从 Remi-DB(CentOS 6)升级到 MySQL 5.5 后,我们遇到一个问题,每次重启我们的 SQL 服务器都会将自己设置回严格模式:
mysql> SELECT @@GLOBAL.sql_mode;
+--------------------------------------------+
| @@GLOBAL.sql_mode |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
然后我运行命令:
mysql> SET GLOBAL sql_mode="";
Query OK, 0 rows affected (0.00 sec)
这对于会话来说很好,但是重新启动时这个更改就会丢失(我也尝试过设置“SET SESSION”sqlmode)。
我还想指出,我my.cnf
也在文件中尝试过这一点。
唯一可行的解决方案是编写一个初始化文件以SET GLOBAL sql_mode
在重新启动时运行,但这很麻烦、烦人而且不合理,必须有一种方法可以让它立即工作。
我尝试重新安装 SQL 服务器,但无济于事。(不过,我当然从备份中恢复了数据,因为这是一台生产服务器。)
答案1
我在 Percona Server v5.5.30-30.1-log 上也遇到了这个问题。
看: http://bugs.mysql.com/bug.php?id=68643
并检查可能由 mysql_install_db 创建的 /usr/my.cnf 或类似文件 ($MYSQL_HOME/my.cnf)。
这将覆盖我们所有其他配置文件中的 sql_mode 设置。
答案2
将其添加到 my.cnf 中并重新启动 MySQL。确保之后没有其他行来覆盖它。
代替
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
和
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
有时添加以下几行也可能有效。请先尝试上述方法,如果不行,请尝试这些方法。
sql-mode=""
或者
sql-mode="TRADITIONAL"
答案3
我知道这已经很旧了,但如果有人需要它:
我在 Windows 7 x64 上使用 MySQL Server 5.6 时遇到了这个问题。
事实证明它在这里加载了一个 my.ini 文件:
C:\ProgramData\MySQL\MySQL Server 5.6\my.ini
尽管 MySQL 已从这里安装并运行:
C:\Program Files\MySQL\MySQL Server 5.6
将 ProgramData ini 中的 sql 模式更改为以下,然后重新启动 MySql 解决了该问题:
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
答案4
如果使用以下命令禁用 mysql 严格模式,则服务器重启后它将恢复。
设置全局 sql_mode='';
要永久设置/禁用它,您必须编辑 mysql conf 文件中的值。
/etc/mysql/my.cnf 或 /etc/my.cnf 取决于您的操作系统。
找到以下行:
sql_mode = "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
用下面的行替换它:如果找不到该行,请将该行插入 [mysqld] 部分下(如果没有 [mysqld] 部分,请创建它)。
[mysqld]
sql_mode= ""
重新启动 MySQL 服务以使更改生效。