参考:https://www.olinux.org.cn/mysql/846.html
自己补充:
以下的方法也不是对的:其实是可以修改配置文件让其生效的,不需要加在启动的脚本中,
默认可能修改配置文件不成功的原因是因为你不了解mysql加载配置文件有好几个和一个顺充的。
是按照以下顺序加载的:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 还有一个是的basedir目录下面。mysql按照上面的顺序加载配置文件,后面的配置项会覆盖前面的。所以有时候配置不成功,是因为基础目录下的my.cnf把前面的覆盖的。
线上环境使用的是oracle mysql 5.5.x,现新上一台美团云主机,准备把Mysql升级到5.6.x
sql_mode坑
5.5.x sql_mode默认值为空,5.6.x默认值为STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,于是原来的程序由于sql语句不严谨,出现报错,网站无法访问。
sql_mode坑处理办法
首先想到的是修改my.cnf文件,在my.cnf配置文件中添加sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,保存文件,重启Mysql服务,一气呵成,本想问题应该随之而解,但是人品欠佳,进入mysql命令行查看,sql_mode值纹丝不动,利用SET命令更改倒是可以成功,但是每次重启服务以后,此配置会失效,无奈只好想其他办法。
暂时想到两种办法
一、找开发修改程序,在mysql_query函数中添加sql_mode=’NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’;
二、还是在Mysql服务这块解决,在Mysql启动脚本中添加–sql-mode=”NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”,保存后测试,一切ok!
[root@7-node1 tools]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.31-log Source distribution Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> select @@sql_mode; +--------------------------------------------+ | @@sql_mode | +--------------------------------------------+ | NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +--------------------------------------------+ 1 row in set (0.00 sec) mysql>
原文链接:mysql5.6.31更改sql_mode类型,转载请注明来源!