MySQL 严格模式卡住

MySQL 严格模式卡住

从 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 服务以使更改生效。

相关内容