MySQL 错误:'Access denied for user 'root'@'localhost'。

544

考虑:

./mysqladmin -u root -p** '_redacted_'  

输出(包括输入密码):

输入密码:

mysqladmin:连接到本地主机的服务器失败,错误信息为:
'Access denied for user 'root'@'localhost' (using password: YES)'

我该如何修复这个问题?


5
可能是 [Access denied for user 'root'@'localhost' (using password: YES) (Mysql::Error)] 的重复问题。 - clearlight
1
@clearlight,这不是同一个问题。这篇文章是关于mysqladmin win超级权限进入mysql的问题,而另一篇文章是有关套接字简单连接的问题。 - e-info128
1
尝试删除如果存在的 ~/.my.cnf 文件。 - e-info128
44
虽然这篇文章有些年头了,但我想为将来的读者提供一个提示。不要在命令本身中输入MySQL密码,特别是root密码,否则它将被存储在 shell历史中。只需单独使用-p选项,MySQL会提示您输入密码。 - Scotty C.
1
对于MySQL 8,请使用sudo mysql_secure_installation并设置强密码。参考:请查看此教程的第5步 https://phoenixnap.com/kb/how-to-install-mysql-on-ubuntu-18-04 - Jhon Didier Sotto
29个回答

1
尝试了很多次以下答案后:
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('root');

类似的答案,我的终端仍然显示以下错误:

您的SQL语法存在错误;请检查与您的MariaDB服务器版本相对应的手册,以获取正确的语法...

因此,在网上研究后,这行代码解决了我的问题,并让我更改了root用户密码:

sudo mysqladmin --user=root password "[your password]"

0

如果您像我一样通过 Google 访问了此页面,之前的解决方案都没有起作用,最终错误是我自己的愚蠢造成的,我没有连接服务器。 一旦连接上,一切顺利。

以防有所帮助,我正在使用 Sequel Pro,并尝试使用 NPM 包 mysql 使用 Node 连接。 我认为我不需要实际连接(除了运行 Sequel Pro),因为我已经从我的应用程序中执行了操作。

Enter image description here


0

在设置 mysql-8 zip 版本时,我遇到了同样的错误。最终,我切换到 安装程序 版本,它能够无缝运行。在安装过程中,有一个提示来设置 root 密码。一旦设置完成,它肯定能够正常工作。

Enter image description here


0

在Arch Linux上

软件包:mysql 8.0.29-1

对我有用的方法:

  1. 编辑my.cnf文件,通常可以在/etc/mysql/my.cnf找到,并在文件底部/末尾添加skip-grant-tables

  2. 通过调用sudo systemctl restart mysqld重新启动mysql服务。

  3. 通过调用sudo systemctl status mysqld确保mysql服务已正确启动。

  4. 使用'root'登录mysql,通过调用mysql -u root -p

  5. 通过调用flush privileges;刷新权限。

  6. 创建新用户,通过CREATE USER 'root'@'localhost' IDENTIFIED BY 'rootpassword';

  7. (如果您计划使用此数据库与PHP),则应改为使用此CREATE USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'rootpassword';

  8. 按顺序调用以下内容以检查更改是否已反映在数据库中:

    • use mysql;
    • SELECT User, password_last_changed FROM user;
  9. 退出mysql控制台并通过编辑my.cnf文件(请参阅步骤1以获取位置)注释/删除skip-grant-tables

  10. 重新启动mysql服务(请参阅步骤2和步骤3)。

就是这样了。


0
我试图在 Mac 上利用 Docker 桌面版来运行 5.7.35,而这个 docker-compose.yml 配置使其能够正常工作:

特别是添加了以下行...

command: --default-authentication-plugin=mysql_native_password

...才解决了问题。

version: '3.3'
services:
  mysql_db:
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 'your_password'
    ports:
      - '3306:3306'
    expose:
      - '3306'
    volumes:
      - ~/your/volume/path:/var/lib/mysql

为什么这个能够工作?有什么解释吗?请通过编辑(更改)您的答案来回答,而非在评论中回答(不要包含"Edit:"、"Update:"或类似内容 - 答案应该看起来像是今天写的)。 - Peter Mortensen

0
根据MariaDB官方文档,在MariaDB 10.4.3及更高版本中,默认安装了unix_socket身份验证插件。
要禁用它,并恢复以前的mysql_native_password身份验证方法,请在my.cnf文件的[mysqld]部分中添加以下行:
[mysqld]
unix_socket=OFF

然后运行:

mysql_install_db --auth-root-authentication-method=normal

然后启动 mysqld

这个命令就可以正常工作了:

mysqladmin -u root password CHANGEME

如需更多信息,请参见配置mysql_install_db以恢复先前的身份验证方法


unix_socket 是什么东西,它的作用是什么,为什么需要这个更改?你能在你的回答中添加一点吗?请通过编辑(更改)你的回答来回复,而不是在评论中回复(不要加上“编辑:”,“更新:”或类似的内容 - 回答应该看起来像今天写的)。 - Peter Mortensen

0
在与Spring Boot集成时遇到了类似的问题,而对于我的情况,问题非常明确。
我试图访问根用户,但在我的application.properties文件中提供了错误的密码。
解决方案是:
要么将用户从root更改为您想要使用提供的密码访问的实际用户
例如,在我的情况下,我提供了一个root而不是budget作为用户名。
spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/budgetdb
spring.datasource.username=budget
spring.datasource.password=@@@password1234
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

或者为root用户提供正确的密码,这实际上是问题的一个潜在原因。
spring.jpa.hibernate.ddl-auto=create spring.datasource.url=jdbc:mysql://127.0.0.1:3306/budgetdb spring.datasource.username=root spring.datasource.password=@@@Budget9650 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

-1

'-p'参数不需要在参数名称和值之间加空格。

而应该使用

./mysqladmin -u root -p 'redacted'

使用

./mysqladmin -u root -p'redacted'

或只是

./mysqladmin -u root -p

这将提示您输入密码。


-3
解决方案:放弃吧!
听我说。我花了大约两天的时间试图让MySQL工作,但一直被权限错误困扰,而这些错误都没有被这个问题的答案所解决。到了一定程度,我觉得如果继续下去,我会疯掉。
由于没有耐心让它工作,我发送了安装SQLite的命令,只使用了450 KB,从一开始就完美地工作了。
如果你没有耐心,那就选择SQLite吧,这样可以节省很多时间、精力、痛苦和存储空间!

这是我在SO上读到的第一个PEBKAC解决方案。 - Adam W. Dennis
如果软件在多个场合下无法正常工作,需要手动修复或替换才能使用,那么问题并非出在用户身上。 - ArraysStartAt1

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