1. 什么是1290错误
MySQL中1290错误是指“超级用户自举违规”,通常出现在当您试图更改包含全局变量的MySQL配置时。
当您使用SET GLOBAL
命令将super_read_only
设置为OFF
值时,可能会遇到这个错误。
2. 解决1290错误的方法
2.1 使用SET PERSIST命令
SET PERSIST命令是一种适用于MySQL8.0版本及以上的命令。它可以用于更改全局变量,而无需使用SUPER
权限,将变量的值设置在MySQL服务的永久存储中。
使用SET PERSIST super_read_only=0;
命令可以关闭super_read_only
,从而消除1290错误。
需要注意的是,一旦使用SET PERSIST
命令设置全局变量,就不需要再次设置变量,因为MySQL会记住该选项的值。
2.2 修改my.cnf配置文件
另一种消除1290错误的方法是直接修改MySQL的配置文件my.cnf
。
在该文件中,找到包含super_read_only
变量的行,将该行的值更改为0
,然后重启MySQL服务。
#在my.cnf文件中将super_read_only的值设置为0
[mysqld]
super_read_only=0
2.3 关闭MySQL服务后,使用mysqld参数启动MySQL服务
您也可以先关闭MySQL服务,然后用一个特殊参数启动它,以在没有SUPER
权限的情况下设置全局变量。
使用以下命令关闭MySQL服务:
sudo systemctl stop mysql
在MySQL关闭后,以以下任一方式启动MySQL服务:
#使用--skip-grant-tables选项启动MySQL服务
sudo mysqld --skip-grant-tables &
#使用--user=root选项启动MySQL服务
sudo mysqld --user=root &
您可以通过以下任一方式更改全局变量:
#使用SET命令更改全局变量
SET GLOBAL super_read_only=0;
#使用UPDATE语句更改mysql系统表中的全局变量值
UPDATE mysql.global_variables SET variable_value=0 WHERE variable_name='super_read_only';
注意,在以这种方式启动MySQL服务后,不应将MySQL暴露在外部网络上,因为它可能会影响与MySQL进行的任何交互。