⚠️ 本教程默认你使用的是 CentOS + systemd 管理 mysqld,MySQL 版本为 5.6.x(也适用于 5.7/8.0,部分语法差异请注意)。
✅ 步骤总览
- 停止 mysqld 服务
- 以跳过授权表模式启动 MySQL
- 使用 SQL 修改 root 密码
- 恢复正常启动 MySQL
- 验证是否可以登录
🧱 第一步:停止 MySQL 服务
sudo systemctl stop mysqld
如使用 mysql
社区源安装,可能为 mysql
而非 mysqld
:
sudo systemctl stop mysql
🚪 第二步:跳过权限表启动 MySQL(进入免密模式)
sudo mysqld_safe --skip-grant-tables &
等待几秒(如提示找不到 mysqld_safe
,尝试 which mysqld_safe
查路径)
🔐 第三步:用 root 用户进入 MySQL(无密码)
mysql -u root
🔄 第四步:重置 root 密码
✅ 方式 A:MySQL 5.6
UPDATE mysql.user SET password = PASSWORD('YourNewPassword') WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;
✅ 方式 B:MySQL 5.7+
UPDATE mysql.user SET authentication_string = PASSWORD('YourNewPassword') WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;
🔁 第五步:重启 MySQL 回正常模式
关闭跳过权限表的 MySQL:
sudo pkill -f mysqld
或(视系统而定):
sudo killall mysqld_safe
然后正常启动:
sudo systemctl start mysqld
🔑 第六步:验证登录
mysql -u root -p
# 输入你刚设置的新密码
如果正常进入,则恢复成功 ✅
🧹 可选:确认配置文件中没有残留 skip-grant-tables
确保你没有在配置文件中永久跳过权限表:
sudo grep skip-grant-tables /etc/my.cnf /etc/my.cnf.d/* 2>/dev/null
如果有以下配置,务必手动删除或注释掉:
[mysqld]
skip-grant-tables
否则每次启动 MySQL 都会绕过密码验证,极不安全!
📌 补充建议
- 若你不想修改 root,可以通过提权已有用户(如 WordPress 用的
xxx
):UPDATE mysql.user SET Grant_priv = 'Y', Super_priv = 'Y' WHERE User = 'xxx'; FLUSH PRIVILEGES;
- 若你之后不使用 root,建议禁用远程登录:
UPDATE mysql.user SET Host='localhost' WHERE User='root';
发表回复