MySQL错误:#1045 - 用户'root'@'localhost'被拒绝访问(使用密码:是)

11
我尝试了所有可以找到的方法,但是无法更改我的MySQL根密码。在shell中,如果我输入mysql -u root,会得到以下结果:

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

当我进入PHP MyAdmin时,会看到这个错误信息:

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

这一切都始于我被强制要求输入新的MySQL密码。我不知道如何解决这个问题,非常绝望。谢谢。

2
你尝试过在Shell中使用mysql -u root -p吗? - Bernd Buffen
1
可能是[MySQL ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)]的重复问题。请参考此链接:https://dev59.com/-2kv5IYBdhLWcg3w3Uc0 - rkosegi
1
好的,你的密码错误。就这么简单。如何修复:使用新的正确密码。 - Franz Gleichmann
是的,我尝试了很多次 - 它没有起作用。 - SandyS
8个回答

11

通用MySQL信息

首先,阅读MySQL手册:https://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

这些步骤将向您展示如何关闭服务并使用不需要密码的覆盖命令启动服务,然后您可以重置密码。来自手册:

停止MySQL服务器,然后使用--skip-grant-tables选项重新启动它。这使任何人都可以连接而不需要密码和所有特权,并禁用帐户管理语句,例如ALTER USERSET PASSWORD。由于这是不安全的,您可能希望在与--skip-networking结合使用以防止远程客户端连接。

使用mysql客户端连接到MySQL服务器;因为服务器是使用--skip-grant-tables启动的,所以无需密码:

shell> mysql

在mysql客户端中,告诉服务器重新加载授予权限表,以便账户管理语句起作用:

mysql> FLUSH PRIVILEGES;

然后更改'root'@'localhost'帐户密码。将密码替换为您要使用的密码。要更改具有不同主机名部分的root帐户密码,请修改说明以使用该主机名。

MySQL 5.7.6及更高版本:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

MySQL 5.7.5及更早版本:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

或直接在用户表上进行:

UPDATE mysql.user SET password=PASSWORD('mynewpassword') WHERE user='root';

XAMPP SPECIFIC

停止MySQL服务。打开命令窗口。切换到XAMPP MySQL目录:

> cd \xampp\mysql\bin\

以不带安全性的方式运行服务 (请注意您正在运行mysqld而不是mysql):

> mysqld.exe --skip-grant-tables

MySQL服务将在此窗口中运行,请打开另一个命令窗口并切换到XAMPP MySQL目录:

> cd \xampp\mysql\bin\

运行MySQL客户端:

> mysql

更新密码:

mysql> UPDATE mysql.user SET password=PASSWORD('mynewpassword') WHERE user='root';

退出MySQL:

mysql> \q

使用任务管理器取消仍在运行的mysqld.exe。重新启动mysql服务。


我尝试按照您的建议更改root mysql密码,但是没有成功。当我运行更改密码的命令时,我收到了以下错误提示:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement - Diego Somar
如果您遇到错误1290,通常是因为您没有执行FLUSH PRIVILEGES命令。这将重新激活帐户管理。如果您在使用非标准版本的MySQL(例如MariaDB出现错误1131)时遇到问题,可以直接更新用户表而不是使用帐户管理语句:UPDATE mysql.user set password=PASSWORD('mynewpassword') WHERE user='root'; - Steve Johnson
我正在使用“通用”的MySQL 5.7版本。这并没有起作用,但解决方案看起来很有前途。我将在新的帖子中进一步探讨这个问题。 - Eric Hepperle - CodeSlayer2010

10

我的问题通过以下方式得到解决。

当我输入以下命令时,会出现错误。 sudo mysql -u root -p

Enter password:   
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES).

为了解决此问题,请按照以下步骤操作。输入以下命令:
sudo mysqld_safe --skip-grant-tables &

接着出现了以下错误。
2018-12-17T06:43:33.106111Z mysqld_safe Logging to syslog.
2018-12-17T06:43:33.108971Z mysqld_safe Logging to '/var/log/mysql/error.log'.
/usr/bin/mysqld_safe: 152: /usr/bin/mysqld_safe: cannot create /var/log/mysql/error.log: Permission denied
2018-12-17T06:43:33.111388Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
/usr/bin/mysqld_safe: 152: /usr/bin/mysqld_safe: cannot create /var/log/mysql/error.log: Permission denied

为了解决这个错误,请按照以下步骤进行:
  1. systemctl stop mysql
2018-12-17T06:48:42.971692Z mysqld_safe Logging to syslog.
2018-12-17T06:48:42.974451Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2018-12-17T06:48:42.976653Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
  1. sudo mkdir -p /var/run/mysqld

  2. sudo chown mysql:mysql /var/run/mysqld

  3. sudo mysqld_safe --skip-grant-tables &

这段代码是与MySQL数据库相关的,它的作用是创建一个目录并赋予mysql用户权限,然后启动mysqld_safe服务,并跳过授权表。请注意不要修改HTML标签。
2018-12-17T06:50:39.135292Z mysqld_safe Logging to syslog.
2018-12-17T06:50:39.137938Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2018-12-17T06:50:39.152966Z mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
  1. 然后连接 mysql -u root。接着会出现 MySQL 提示符,然后设置您的密码。

  2. FLUSH PRIVILEGES;

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
  1. systemctl stop mysql

  2. 然后用以下方式登录:mysql -u root -p


4

我曾经面临着相同的问题#1045错误,即使我从我的shell中以root身份登录。 然后我按照以下步骤进行操作,这对我起作用-

请注意,此方法仅适用于Linux 20.04用户

步骤1: 在命令行中输入以下命令 sudo nano /etc/mysql/debian.cnf --->这将打开mysql数据库配置文件 然后只查看文件。不需要进行任何更改。定位到文件中的以下行

[client] 
host     = localhost 
user     = debian-sys-maint  --->Copy this user name
password = QiExXKUgZHc4Mnui  --->Copy this password 
socket   = /var/run/mysqld/mysqld.sock 
[mysql_upgrade] 
host     = localhost 
user     = debian-sys-maint 
password = QiExXKUgZHc4Mnui 
socket   = /var/run/mysqld/mysqld.sock

步骤2: 返回用户提示符,然后输入以下内容 -

`sudo -i` ----->This will change to user to root
`mysql -u debian-sys-maint -p` ----This will prompt for MySql editor

将之前复制的密码粘贴,并输入。
`FLUSH PRIVILEGES;` ----->This will grant all privileges to debian-sys-maint

然后在 MySQL 编辑器中输入以下内容以更改 'root' 用户密码:

`ALTER USER 'root'@'localhost' IDENTIFIED BY 'yournewpassword';`  --->this will change your password

就是这样,现在您的“root”用户和密码已准备好登录phpmyadmin。


2
First Run CMD mode 
E:\xampp\mysql\bin>mysql.exe -u root -p

Screenshot:

enter image description here


我也尝试过这个。最终我安装了一个新版本的XAMPP,问题得到了解决。虽然我失去了我的数据库,但问题已经解决了。 - SandyS
由于MySQL有许多不同的版本和变种,因此在寻求帮助时,如果您能够确定您正在使用的版本和变种,那么这将非常有帮助。如果出现问题,错误信息也是获取额外帮助的有用途径。我已经添加了一个特定于XAMPP的答案。 - Steve Johnson

1
我最近遇到了同样的问题。最新版本的PHPmyadmin不允许您使用root登录。我遇到了额外的问题,因为在Ubuntu 18设置脚本期间定义的用户名和密码没有被授予任何特权。我通过在终端上以root身份登录mysql来解决这个问题。然后我从命令行添加了一个新用户。此时,我可以使用新用户登录PHP my admin,并且新用户拥有我授予的特权。

0

对于Windows用户:在开始恢复密码之前,请尝试在命令行中执行以下操作:

mysql -uroot -pyourpassword 

原文如下,不要像下面这样有空格:

我的MySQL登录打印

我没有时间解释为什么,但如果你想了解更多,请查看你电脑上的“MySQL X.X命令行客户端”快捷方式是如何工作的。

同时,确保mysql路径在PATH变量中。

我的电脑使用以下路径。你的电脑可能使用其他路径。 C:\ProgramData\MySQL\MySQL Server 8.0 C:\Program Files\MySQL\MySQL Server 8.0\bin


0

我之前在Windows电脑上遇到过这个问题,但是我成功地解决了它...

  1. 首先打开MYSQL安装程序
  2. 在“MySQL服务器”旁边按重新配置
  3. 进入身份验证方法
  4. 然后更改为传统身份验证
  5. 最后按完成

0
以下方法适用于我:我正在运行一个Springboot应用程序,我可以通过命令行mysql -u root -p创建表,但是一旦我运行了应用程序,表就没有被创建(我没有为数据库设置密码),所以在项目的application.properties文件中,您必须确保该行不存在,或者如果您想使用密码,则需要与以下行匹配:spring.datasource.password=pssw

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接