错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
意味着您尝试使用MySQL的root用户登录,但是提供的密码不正确,或者root用户没有从localhost登录的权限。
要解决这个问题,您可以尝试以下几个步骤:
步骤 1:确保您使用的是正确的密码
确认您记得的root密码是正确的。如果您不确定密码是否正确,您可能需要重置它。
步骤 2:尝试无密码登录(如果root账户没有设置密码)
如果root账户没有设置密码,或者您不确定是否设置了密码,可以尝试无密码登录:
bash复制代码
/www/server/mysql/bin/mysql -u root |
如果成功登录,那么您需要设置或更改root密码。
步骤 3:重置root密码
如果您无法以root身份登录,或者密码不正确,您可能需要重置密码。这通常涉及到停止MySQL服务,以无密码模式启动它,然后设置新的root密码。
对于MySQL 5.7及之前版本:
-
停止MySQL服务:
bash复制代码
sudo systemctl stop mysqld
-
以无密码模式启动MySQL(跳过权限表):
bash复制代码
sudo /www/server/mysql/bin/mysqld_safe --skip-grant-tables &
-
登录MySQL:
bash复制代码
/www/server/mysql/bin/mysql -u root
-
选择mysql数据库:
sql复制代码
USE mysql;
-
更新root用户的密码:
sql复制代码
UPDATE user SET authentication_string=PASSWORD('NEW_PASSWORD') WHERE User='root';
FLUSH PRIVILEGES;
对于MySQL 5.6及更早版本,使用
Password
替代authentication_string
。 -
退出MySQL:
sql复制代码
EXIT;
-
停止mysqld_safe进程,并正常启动MySQL服务:
bash复制代码
sudo systemctl start mysqld
对于MySQL 8.0及更高版本:
由于MySQL 8.0使用了caching_sha2_password作为默认的认证插件,您可能需要使用不同的方法来重置密码。以下是一个简化的例子:
-
停止MySQL服务。
-
启动MySQL时跳过权限表:
bash复制代码
sudo /www/server/mysql/bin/mysqld_safe --skip-grant-tables --skip-networking &
-
登录MySQL。
-
选择mysql数据库。
-
更改root用户的认证方法并设置新密码:
sql复制代码
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'NEW_PASSWORD';
FLUSH PRIVILEGES;
-
退出MySQL,停止mysqld_safe进程,并正常启动MySQL服务。
步骤 4:再次尝试登录
使用新设置的密码尝试登录MySQL:
bash复制代码
/www/server/mysql/bin/mysql -u root -p |
输入新密码后,您应该能够成功登录。
注意:在执行上述操作时,请确保您有足够的权限来停止和启动MySQL服务。此外,如果您使用的是非标准的MySQL安装(例如,通过特定的包管理器或自定义脚本安装),那么您可能需要查阅相关文档或寻求来自该安装源的支持。