📜  关闭安全模式mysql(1)

📅  最后修改于: 2023-12-03 15:22:34.319000             🧑  作者: Mango

关闭安全模式 MySQL

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 的配置文件来关闭安全模式。下面是具体的步骤:

  1. 使用管理员权限登录 MySQL。

  2. 执行以下命令来查看当前 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 正处于安全模式下。

  3. 打开 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
    
  4. sql_mode 变量的值修改为以下内容:

    [mysqld]
    sql_mode=NO_ENGINE_SUBSTITUTION
    

    注意:不要将整个 [mysqld] 块删除,只需要修改其中的 sql_mode 变量即可。

  5. 保存并关闭文件,然后重启 MySQL 服务。

  6. 再次执行 SHOW VARIABLES LIKE 'sql_mode'; 命令,如果返回结果中仅包含 NO_ENGINE_SUBSTITUTION,那么说明安全模式已经被成功关闭了。

结论

关闭安全模式 MySQL,可以为一些高级操作提供更多的权限。但是,关闭安全模式也意味着 MySQL 会变得不再安全,因此请务必根据具体情况来决定是否关闭安全模式。