无法以root登录时,如何获取SUPER权限执行SET GLOBAL lc_time_names=pt_BR?
解决MySQL无法获取SUPER权限且root无法登录的问题
别担心,这种因mysql_secure_installation配置导致root权限受限、无法执行全局参数设置的问题很常见,咱们一步步来搞定:
步骤1:停止当前MySQL服务
根据你的操作系统执行对应的停止命令:
- Ubuntu/Debian:
sudo systemctl stop mysql - CentOS/RHEL:
sudo systemctl stop mysqld - Windows:
打开管理员权限的命令提示符,执行:net stop mysql
步骤2:启动MySQL并跳过权限验证
这一步会让MySQL不加载权限表,允许你无密码登录root账户,同时加上--skip-networking避免期间的远程安全风险:
- Linux系统(systemctl方式):
旧版本也可使用sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking" sudo systemctl start mysqlmysqld_safe:sudo mysqld_safe --skip-grant-tables --skip-networking & - Windows系统:
找到MySQL安装目录下的mysqld.exe(比如C:\Program Files\MySQL\MySQL Server 8.0\bin),在管理员命令提示符中执行:"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --skip-grant-tables
步骤3:无密码登录MySQL
打开新的终端/命令提示符,直接执行:
mysql -u root
不需要输入密码即可进入MySQL命令行。
步骤4:修复root账户权限并赋予SUPER权限
进入MySQL后,依次执行以下命令:
- 切换到权限管理库:
USE mysql; - (MySQL 8.0+)重置root密码并使用原生密码认证(避免后续登录问题):
若使用MySQL 5.x版本,执行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的强密码';SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的强密码'); - 刷新权限表让设置生效:
FLUSH PRIVILEGES; - 确保root拥有SUPER权限(若之前权限被误删可手动赋予):
GRANT SUPER ON *.* TO 'root'@'localhost'; - 再次刷新权限:
FLUSH PRIVILEGES;
步骤5:恢复正常MySQL服务
- 退出MySQL命令行:
EXIT; - 停止当前跳过权限的MySQL实例:
- Linux:
sudo systemctl stop mysql - Windows:回到启动
mysqld.exe的窗口,按Ctrl+C停止进程
- Linux:
- 清除跳过权限的环境变量(Linux systemctl方式):
sudo systemctl unset-environment MYSQLD_OPTS - 正常启动MySQL服务:
- Linux:
sudo systemctl start mysql - Windows:
net start mysql
- Linux:
步骤6:执行目标语句
用新设置的密码登录root:
mysql -u root -p
输入密码后,执行你需要的全局设置:
SET GLOBAL lc_time_names=pt_BR;
这次应该就能成功执行,不会再出现权限报错了。
内容的提问来源于stack exchange,提问作者MagicHat
相关产品推荐
相关产品推荐

