在Linux上部署web程序遇到的问题

1、背景说明

本地开发的程序打包成war包,发布在Linux服务器上,数据库是Mysql5.7, Tomcat8.5,服务器是centos

2、遇到的问题

  数据库脚本执行失败

  tomcat端口冲突

  数据库表找不到

3、解决问题

  数据库脚本执行失败主要是sql_mode 这个配置在作祟,由于导出的数据脚本存在不规范的现象,比如 ‘0000-00-00’这样的日期等

  通过下面的代码可以查看当前的sql_mode是什么

select @@sql_mode

  如果有 NO_ZERO_IN_DATE、NO_ZERO_DATE这样的字样,脚本中是不能有上述的日期的

  如果有 ONLY_FULL_GROUP_BY ,查询语句使用group by时,需要写规范(覆盖select 出的字段)

  本次遇到的问题就是上述这两个模式,解决办法入下

set @@sql_mode=''

  在引号内填 删除不要的模式后剩余的就可以了,默认修改的是session级别的,修改全局的代码入下

set @@Global.sql_mode=''

  执行以下代码使其立即生效

FLUSH PRIVILEGES

  之后又遇到了 too many connections 的问题, 解决方法和上面差不多,不在赘述

  数据库搞好了,开始搞tomcat了,由于服务器上已经有别的tomcat了,因此需要解决端口冲突的问题

  端口需要修改三处 Connector 的(默认是8080),Shutdown 的(默认是8005) AJP的(默认是 8009)

  将程序发布到tomcat上后,发现报错,根据控制台日志分析是找不到表,但是从库中查看表是存在的,最后发现是大小写不一致,

  windows系统的文件是不区分大小写的,Linux是区分的,表是文件的形式存储,所以找不到表

  需要修改mysql的一个叫 lower_case_table_names 的配置,依然使用上述的方法修改

  修改不成功,报错说这是一个只读的,只能从配置文件中修改了,找到/etc/my.cnf这个文件,在[mysqld]中添加 lower_case_table_names=1

  该文件修改后需要重启mysql,重启命令一般是 service mysql  restart,但是,centos系统不是,centos重启mysql命令是 service mysqld restart

  重启后,再次启动tomcat,好了

猜你喜欢

转载自www.cnblogs.com/niusj/p/11654626.html