📅  最后修改于: 2023-12-03 15:22:34.319000             🧑  作者: Mango
MySQL 5.7.6 版本之后引入了一个新的安全特性 —— 安全模式。在安全模式下,某些 MySQL 的操作只能由拥有特定权限的用户执行,这些用户通常是 MySQL 系统管理员或者具备某些高级权限的用户。但是,这个特性也会导致某些 MySQL 命令不能正常执行。如果你遇到了这个问题,那么你可以尝试关闭安全模式。
当你在执行某些 MySQL 命令时,如果返回了以下错误提示,那么说明你需要关闭安全模式:
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation
这个错误提示的意思是:你没有权限执行此操作,需要拥有超级权限。在安全模式下,只有拥有超级权限的用户才能执行这些操作。如果你是一般用户,那么你可能无法执行这些操作,因此需要关闭安全模式。
你可以通过修改 MySQL 的配置文件来关闭安全模式。下面是具体的步骤:
使用管理员权限登录 MySQL。
执行以下命令来查看当前 MySQL 是否处于安全模式:
mysql> SHOW VARIABLES LIKE 'sql_mode';
+---------------+--------------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------------+
| sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------+
如果 sql_mode
变量的值中包含 STRICT_TRANS_TABLES
或者 STRICT_ALL_TABLES
,那么说明 MySQL 正处于安全模式下。
打开 MySQL 的配置文件(通常位于 /etc/my.cnf
或者 /etc/mysql/my.cnf
),然后找到以下内容:
[mysqld]
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
将 sql_mode
变量的值修改为以下内容:
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION
注意:不要将整个 [mysqld]
块删除,只需要修改其中的 sql_mode
变量即可。
保存并关闭文件,然后重启 MySQL 服务。
再次执行 SHOW VARIABLES LIKE 'sql_mode';
命令,如果返回结果中仅包含 NO_ENGINE_SUBSTITUTION
,那么说明安全模式已经被成功关闭了。
关闭安全模式 MySQL,可以为一些高级操作提供更多的权限。但是,关闭安全模式也意味着 MySQL 会变得不再安全,因此请务必根据具体情况来决定是否关闭安全模式。