错误场景描述
使用数据库连接工具(如: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 账户登录密码时,用来重置登录密码