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,好了