基本知识:
Ubuntu默认配置是免密登录,代码如下:
sudo mysql #无密码登录
密码登录如下:
mysql -u root -p # 有密码登录
问题情境:
本人手残,复制了以下代码(目的是设置密码),忘记改“你的新密码”的内容了,密码又不支持中文
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';
所以当用密码登录,就失败了
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
此时用免密登录,自然不可能成功,如下
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
提供重新设置密码方案:
1.首先,强制关闭所有MySQL相关进程
sudo killall -9 mysqld mysqld_safe
2.接着,清理残留文件
# 删除可能存在的 PID 文件
sudo rm -f /var/run/mysqld/mysqld.pid
# 清理 socket 文件
sudo rm -f /var/run/mysqld/mysqld.sock
前两步必须完成,否则可能有以下错误:
3.然后,安全模式启动 MySQL
sudo mysqld_safe --skip-grant-tables --skip-networking --datadir=/var/lib/mysql &
-
--skip-grant-tables
:跳过权限验证 -
--skip-networking
:禁止远程连接 -
--datadir
:明确指定数据目录
4.重新设置MySQL密码
mysql -u root
-- 必须先刷新权限
FLUSH PRIVILEGES;
-- 修改密码(注意密码复杂度,至少为纯数字三位,如:123)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你想的密码';
-- 再次刷新
FLUSH PRIVILEGES;
exit;
5.正常重启服务
# 结束安全模式进程
sudo killall mysqld
# 正常启动
sudo systemctl start mysql
# 验证状态
sudo systemctl status mysql
6.最后,用密码登录
mysql -u root -p