远程Ubuntu 20服务器无法进入MySQL控制台问题求助(需替换MySQL凭据)
你确实是用系统root账户登录了远程服务器,但MySQL的root账户和系统的root账户是完全独立的身份,这就是你碰到错误的核心原因!
为什么会报错?
你直接执行mysql命令时,MySQL会默认用当前系统用户名(也就是root)尝试无密码登录,但MySQL的root账户默认在Ubuntu 20.04上要么是通过auth_socket插件认证(需要特定的本地连接方式),要么已经被设置了登录密码,所以无密码登录会被拒绝,就出现了ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)这个错误。
解决方案(分两种情况尝试)
情况1:尝试直接通过系统root身份登录MySQL
因为Ubuntu安装MySQL-server后,默认可能配置了系统root用户可以免密通过socket登录MySQL,你可以试试明确指定用户名登录:
mysql -u root
如果还是不行,试试用sudo执行(即使你已经是系统root,这个操作有时候能绕过认证限制):
sudo mysql
如果成功进入MySQL控制台,接下来你就可以修改root账户的密码或者调整认证方式:
- 切换到mysql系统数据库:
USE mysql;
- 设置新的密码(MySQL 8.0+用这个语法):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';
- 刷新权限使修改生效:
FLUSH PRIVILEGES;
- 退出控制台:
EXIT;
之后你就可以用mysql -u root -p命令,输入刚才设置的密码登录了。
情况2:如果上述方法都无法登录,需要重置MySQL root密码
如果连sudo都进不去,那就需要跳过MySQL的权限检查来重置密码:
- 先停止MySQL服务:
systemctl stop mysql
- 用跳过权限检查的方式启动MySQL后台进程:
mysqld_safe --skip-grant-tables &
- 此时可以直接无密码登录MySQL:
mysql -u root
- 切换到mysql系统数据库:
USE mysql;
- 修改root账户的密码和认证方式:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';
- 刷新权限:
FLUSH PRIVILEGES;
- 退出MySQL控制台:
EXIT;
- 停止刚才启动的mysqld_safe进程:
pkill mysqld
- 重启正常的MySQL服务:
systemctl start mysql
现在你就可以用mysql -u root -p输入新密码登录MySQL了。
补充说明
从你提供的dpkg -s mysql-server输出可以确认,你确实安装了MySQL-server 8.0.34,这个版本的认证机制和旧版本有所不同,所以一定要用ALTER USER语法来修改密码,不要用旧的SET PASSWORD方式哦。
备注:内容来源于stack exchange,提问作者mstdmstd

