You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu系统下如何设置MySQL 8的root密码(安装时未设致登录失败)

解决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

火山引擎 最新活动