错误场景描述

使用数据库连接工具(如:dataGrip)或者使用 msyql 命令行连接 mysql 8.0 的本地 server 时,报如下错误:

Access denied for user 'root'@'localhost'(using password: YES)

本地 mysql8.0 数据库版本:

解决办法

1. 停掉 mysql 服务

# 切换至管理员账户
sudo bash -c "su"

# 杀掉 mysql 进程
ps aux | grep -v grep | grep mysql | awk '{print $2}' | xargs kill -9

执行完毕后,可以在系统偏好设置的 mysql 服务里查看 mysql 服务器的状态:

当然也可以通过如下命令查看是否还存在 mysql 进程:

# 查看是否还存在 mysql 进程
ps aux | grep -v grep | grep mysql

2. 启动 mysql 8.0 server

# 切换至管理员用户
sudo bash -c "su"

# 不启动 grant-tables 授权表方式启动 mysql server,可以不用输入密码登录数据库,此时该终端会阻塞
/usr/local/mysql/bin/mysqld_safe --skip-grant-tables

3. 新开一个 terminal 终端,登录 mysql 8.0 server

# 输入如下命令,按回车即可登录数据库,无需输入密码,直接回车即可
/usr/local/mysql/bin/mysql -uroot -p

4. 执行如下命令

# 1. 使用 mysql 数据库
mysql> use mysql;

# 2. 将 authentication_string 置空
mysql> update user set authentication_string = '' where user = 'root';

# 3. 重新设置新密码,其中 new_password 就是要设置的新密码
mysql> alter user 'root'@'localhost' identified by 'new_password';

# 4. 如果上述第 3 步执行提示成功,则输入如下命令,然后关闭命令终端,就可以正常登录 mysql 8.0 server 了
mysql> flush privileges;

此时,会报如下错误:

关闭已经打开的两个 terminal 终端,重新执行上述的步骤 1,杀死 mysql 进程:

使用系统偏好设置的 MySQL 服务正常开启 mysql 服务,然后重新执行上述步骤的 3、4:

# 1. 输入如下命令,按回车即可登录数据库,无需输入密码,直接回车即可
/usr/local/mysql/bin/mysql -uroot -p

# 2. 使用 mysql 数据库
mysql> use mysql;

# 3. 将 authentication_string 置空
mysql> update user set authentication_string = '' where user = 'root';

# 4. 重新设置新密码,其中 new_password 就是要设置的新密码
mysql> alter user 'root'@'localhost' identified by 'new_password';

# 5. 如果上述第 3 步执行提示成功,则输入如下命令,然后关闭命令终端,就可以正常登录 mysql 8.0 server 了
mysql> flush privileges;

5. 重新使用 dataGrip 连接 mysql 8.0 server

注意

上述操作同样适用于,忘记 root 账户登录密码时,用来重置登录密码

文章来源于互联网:Mac mysql 8.0 登录报 Access denied for user ‘root’@’localhost’ (using password: YES) 错误

发表评论