Ubuntu系统下如何设置MySQL 8的root密码(安装时未设致登录失败)
我刚帮好几个开发者踩过这个坑——Ubuntu 系统安装 MySQL 8 时,默认不会弹出设置 root 密码的界面,因为它给 root 用户配置的是 auth_socket 认证插件,这种方式只允许本地系统的 root 用户通过 Unix socket 登录,而不是用密码。所以你用 mysql -u root -p 尝试登录时,自然会收到「Access denied」的提示。
下面是亲测有效的修复步骤:
第一步:停止当前 MySQL 服务
先把正常运行的 MySQL 停掉,这样才能启动安全模式:sudo systemctl stop mysql第二步:启动 MySQL 安全模式
用跳过权限验证和网络连接的方式启动 MySQL,这样就能无密码登录了:sudo mysqld_safe --skip-grant-tables --skip-networking &这里的
&是让进程后台运行,执行完后等个3-5秒,让服务完全启动。第三步:无密码登录 MySQL
现在直接输入命令就能进入 MySQL 控制台:mysql -u root第四步:切换到系统数据库
我们需要修改用户表,先切换到mysql数据库:USE mysql;第五步:修改 root 用户的认证方式并设置密码
把认证方式改成支持密码登录的mysql_native_password,同时设置你的新密码(记得把你的强密码替换成符合复杂度要求的密码):ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的强密码';第六步:刷新权限配置
让刚才的修改立即生效:FLUSH PRIVILEGES;第七步:退出 MySQL 控制台
EXIT;第八步:重启正常的 MySQL 服务
先杀掉安全模式的 MySQL 进程,再启动正常服务:sudo pkill mysqld sudo systemctl start mysql第九步:测试登录
现在用你刚设置的密码登录,应该就能成功了:mysql -u root -p
额外说明
如果你之后想换回更安全的 auth_socket 认证(只能通过 sudo mysql -u root 登录),可以再次进入 MySQL 控制台,执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者Sandip Nath




