MySQL 和 MariaDB 的严格模式控制如何处理数据更改查询中的无效或缺失值; 这包括 INSERT、UPDATE 和 CREATE TABLE 语句。 启用 MySQL 严格模式(这是默认状态)后,在尝试处理查询时,无效或丢失的数据可能会导致警告或错误。
当严格模式被禁用时,相同的查询将调整其无效或缺失的值,并会产生一个简单的警告。 这似乎是首选结果,但是禁用严格模式后,某些操作可能会导致意外结果; 例如,当插入的值超过最大字符限制时,它将被截断以适应限制。
可能需要禁用 MySQL 的严格模式的原因有多种,但最常见的是当服务器运行 WHMCS 时——这是该工具的要求。
飞行前检查
- 这些说明专门用于在使用 cPanel 的托管 Liquid Web 服务器上禁用 MySQL 严格模式。
- 服务器应该运行 MySQL 5.6/5.7 或 MariaDB 10.x
- 遵循本教程需要通过 SSH 进行命令行和根级别访问。
第 1 步:始终进行备份!
每当修改服务器上的文件时,最好事先采取某种形式的备份。 如果出现问题,这可以确保您有办法恢复更改; 这也是有益的,因为它有助于跟踪何时以及进行了哪些更改。
使用 root 用户登录 SSH 后,执行以下操作:
cp -a /usr/my.cnf{,.strict.bak}
cp -a /etc/my.cnf{,.strict.bak}
上面的命令使用 ‘BASH 大括号扩展’ 为了在其原始目录中制作文件的备份副本。
步骤 #2:禁用 MySQL 严格模式
根据服务器和当前配置,您可能需要编辑服务器上的以下文件之一或两者。 通常,相关的配置行只在其中之一,但是,它可以在任何一个中而不会引起问题; 所以通常最好同时检查两者。
要编辑文件,您将使用您喜欢的命令行编辑器打开文件。 在这个 example,我们使用’vim’。
vim /usr/my.cnf
vim /etc/my.cnf
在vim中,可以按“a”或“i”进入文本插入模式; 按下键盘上的退出键 (Esc) 将返回命令模式。 有关使用 vim 编辑文件的复习,请参阅我们的新用户教程:Vim 文本编辑器概述。
在上面的每个文件中,您将寻找包含以下内容的行:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
如果您发现与上面类似的行设置了 `sql_mode` 变量,那么您需要将其替换为以下行以禁用 MySQL 严格模式。
sql_mode=""
一旦进行了此调整,或者您确认文件不需要调整,您将保存并 close 文件。
第 3 步:重启 MySQL 服务
最后,为了使这些更改生效,您需要重新启动 MySQL 服务,因为它只会在最初加载时读取配置文件。 为了强制 MySQL 使用新的配置文件,您将执行以下操作:
对于 CentOS 7 服务器:
systemctl restart mysql
对于 CentOS 6 及更早版本:
/etc/init.d/mysql restart
在服务器上发出此命令后,MySQL 服务将重新启动并加载所做的更改。 如果遵循并完成了所有指示,那么现在应该禁用 MySQL 严格模式。
要验证该过程是否正确完成,您可以运行以下命令:
mysql -e "SELECT @@sql_mode;"
输出可能类似于以下内容:
+--------------------------------------------+
| @@sql_mode
+--------------------------------------------+
| NO_AUTO_CREATE_USER
+--------------------------------------------+
如果您有任何问题或对自己进行这些更改感到不自在,请随时联系 Heroic Support®。