停止 MySQL 服务:
sudo systemctl stop mysql
以跳过权限表的方式启动 MySQL:
sudo mysqld_safe --skip-grant-tables &
连接到 MySQL(此时无需密码):
mysql -u root
更新 root 密码(MySQL 5.7+):
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
退出 MySQL 并重启服务:
exit
sudo systemctl restart mysql
登录 MySQL(如果可能):
mysql -u root -p
检查 root 用户的权限:
SELECT Host, User FROM mysql.user WHERE User='root';
如果缺少本地访问权限,添加:
CREATE USER 'root'@'localhost' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
创建包含密码重置命令的文件:
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';" > /tmp/reset.sql
停止 MySQL 并启动时加载该文件:
sudo systemctl stop mysql
sudo mysqld --init-file=/tmp/reset.sql &
重启 MySQL 服务:
sudo systemctl restart mysql