无法加载身份验证插件“ caching_sha2_password”


434

我正在将MySQL-8.0与MySQL Workbench连接起来并出现以下错误:

无法加载身份验证插件“ caching_sha2_password”:dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so,2):找不到映像

我也尝试过使用其他客户端工具。

有什么解决办法吗?


2
如果将MySQL 8.0配置为以mysql_native_password模式运行,则可能能够解决此问题。
雷蒙德·尼兰

6
正确,MySQL Workbench需要更新连接器才能使用缓存的sha2密码(即将推出)。
Mike Lischke,

7
我将默认登录设置为本机并重新启动,问题仍然存在,并且无法登录以创建新用户。令人惊讶的是,在2018年安装Mysql和workbench并没有用完。劣质的质量控制。
克里斯(ChrisR)

1
我不知道您从哪里得到的印象就不会再有32位mysql客户端库了,但这不是事实。事实是,MySQL Workbench不再附带32位版本。
Mike Lischke '18

2
这些答案表明使用较弱的加密不是正确的方法。使用诸如tableplus之类的其他客户端。
ohkts11

Answers:


279

注意:对于MAC OS

  1. 从“系统偏好设置”>“初始化数据库”>“打开MySQL”
  2. 输入您的新密码。
  3. 选择“使用旧密码”
  4. 再次启动服务器。
  5. 现在连接MySQL Workbench

图片描述


这有助于OSX
Salam,

2
这项工作,谢谢。我认为这是可行的,因为MySQL工作台使用旧式密码加密来连接数据库服务器。也可以在安装MySQL并选择“旧版”加密(而不是建议的“强密码”加密)时完成。
僧侣辛哈

1
某些版本的mysql具有不同的设置面板,因此无法使用
Michael Yang

8
退回到旧的安全性较低的身份验证广告根本不是一个好的解决方案。
Mike Lischke,

63
我在系统偏好设置中没有MySQL
JavaRunner,

247

您可以像这样更改密码的加密。

ALTER USER 'yourusername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'youpassword';

33
如果OP要使用全新的酷认证方法怎么办?
LibertyPaul '18

@twocold,不错的脚本查询。+ 1
Md Haidar Ali Khan

请注意,yourusername和yourpassword应该用单引号引起来,如@twocold代码所示。
矩阵

@twocold完成以上操作后,如何“撤消”以上的ALTER USER回到MySQL 8.0标准(新的加密级别)?
Will Belden

1
@BrianFitzGerald是“ caching_sha2_password”,请在此处此处链接。
Yan Karin

114

对于Windows 10:

打开命令提示符:

cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"

C:\Program Files\MySQL\MySQL Server 8.0\bin> mysql -u root -p
Enter password: *********

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newrootpassword';
Query OK, 0 rows affected (0.10 sec)

mysql> exit

另外,您可以按以下方式更改my.ini配置:

[mysqld]

default_authentication_plugin=mysql_native_password

重新启动MySQL Server并再次打开工作台。


1
更改my.ini对我不起作用-但命令提示符更改确实有效。
amelvin

更改my.ini解决了我的问题。谢谢。
berkant


我只想指出,必须在要连接的服务器上完成配置,而ALTER USER已帮助我从Windows连接到远程mysql服务器
Alcides

不限于Windows 10
Geza Turi

76

您可以使用下面的Alter命令更改用户,从而更改用户密码的加密:

ALTER USER'username'@'ip_address'用mysql_native_password标识并通过'password';

要么

我们可以通过使用旧密码插件来避免此错误:

首先在Windows中的Linux / my.ini文件的my.cnf文件中更改身份验证插件:

[mysqld]

default_authentication_plugin = mysql_native_password

重新启动mysql服务器以影响更改,并尝试通过MySQL与任何mysql客户端连接。

如果仍然无法连接并出现以下错误:

Unable to load plugin 'caching_sha2_password'

这意味着您的用户需要上述插件。因此,尝试在更改默认插件后使用create user或grant命令创建新用户。那么新用户需要本机插件,您就可以连接MySQL。

谢谢


5
绝对不能解决缺少插件的问题
。– LibertyPaul

1
它是。问题是数据库管理软件尚未处理它。因此,除非您是mysql工作台开发人员,否则这是您现在的解决方法。
凯文·加格农

为我工作。谢谢
LucasAraújo18年

添加config标志后创建新用户的部分至关重要。
意大利,

70

当前(在2018/04/23上),您需要下载开发版本。该GA那些不工作。

我无法连接到最新的GA版本(6.3.10)。

它与mysql-workbench-community-8.0.11-rc-winx64.msi(从https://dev.mysql.com/downloads/workbench/,选项卡Development Releases)一起使用。


4
实际上,这是正确的答案:MySQL 8.0需要MySQL Workbench 8.0,不幸的是,它仍处于beta模式。但是一旦安装,您就可以坚持使用新的SHA密码加密,无需更改任何内容。
Cristi S.

不是测试版,而是候选发布版(RC)。GA(一般可用)版本即将推出。
Mike Lischke

对我来说最好的主意。
Wojciech Fornal,

2
情况仍然如此。GA版本的安装仍然会导致无法使用建议的密码加密方式登录。没有警告说GA版本仅适用于旧式身份验证。
唐纳德·里奇

2
至少在MacOS中,GA版本当前为8.0.12(2018/08/13),并解决了该问题!谢谢!
布鲁诺·席尔瓦诺

63

我遇到了同样的问题,但是Aman Aggarwal的答案对运行mysql 8.X的Docker容器不起作用。我登录了容器

docker exec -it CONTAINER_ID bash

然后以root身份登录mysql

mysql --user=root --password

输入root用户的密码(默认为“ root”),最后运行:

ALTER USER 'username' IDENTIFIED WITH mysql_native_password BY 'password';

你们都准备好了


这看起来可能是我正在寻找的一个很好的答案。但是我不知道“这个”是什么。你是说接受的答案?或另一个...
Zach Smith

1
是@ZachSmith,“ this”是指接受的应答者。
axelferreira

如何docker exec -it CONTAINER_ID mysql --user=root --password依赖于存在的,而不是两个命令bash外壳(这是不是一定在未来的)?
埃里克(Eric)

这不适用于使用docker desktop 2.0.3.0(mac)的sequelpro 1.1.2。所有命令均有效,但登录后出现续集专业错误-使用mysql:latest(v8.0.15)
arcseldon

正如其他人所报道的那样,使用mysql 5.7不需要任何操作:docker run -p 3306:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=secret -d mysql:5.7
arcseldon

46

我正在使用“ MySQL Web Installer ” 在Windows 10 PC上安装MySQL,并且在尝试使用MySQL工作台进行连接时遇到相同的问题。我通过从“安装程序”窗口重新配置服务器来解决此问题。

MySQL Web Installer-主屏幕

单击“重新配置”选项,它将允许重新配置服务器。单击“下一步”,直到到达“身份验证方法”。

MySQL Installer-身份验证方法

在此选项卡上后,使用第二个选项“使用旧版身份验证方法(保持MySQL 5.x兼容性)”。

保持其他一切不变,这就是我解决问题的方式。


1
我手动解压缩mysql-8.0.11-winx64.zip,无法轻松解决“无法加载caching_sha2_password”问题。但是,使用mysql-installer-community-8.0.11.0.msi并遵循上述建议,MySQL Workbench 8.0.11可以登录MySQL服务器8.0.11。
oraclesoon

46

好的,这浪费了很多时间,所以这里是截至2019年3月19日的摘要

如果您专门尝试将Docker映像与MySql 8+结合使用,然后使用SequelPro访问在该Docker 容器上运行的数据库,那么您会很不走运。

请参阅sequelpro问题2699

我的设置是使用docker desktop 2.0.3.0(mac-mojave)的sequelpro 1.1.2,并尝试使用mysql:latest(v8.0.15)。

正如其他人所报道的那样,使用mysql 5.7不需要任何操作:

docker run -p 3306:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=secret -d mysql:5.7

当然,可以在docker上使用MySql 8+,在这种情况下(如果需要),此处提供的其他有关caching_sha2_password类型问题的答案也可以使用。但是sequelpro对于MySql 8+来说是行不通的

最后,我放弃了sequelpro(2013-2014年的可信赖朋友),而是安装了DBeaver。一切开箱即用。对于docker,我使用了:

docker run -p 3306:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest --default-authentication-plugin=mysql_native_password

您可以使用以下方法快速查看mysql数据库:

docker exec -it mysql1 bash

mysql -u root -p

show databases;

1
非常感谢分享。意外删除MySQL开发容器后,我尝试使用完全相同的组合。
martn_st

1
。非常可悲的是续集Pro不积极发展对日2016年4月3日再:(最新的新闻,而这是2019已经这是我见过的MySQL Explorer中的最佳工具。
奥莱克西Shnyra

@OleksiiShnyra是的,几年来还没有正式发布版本,但仅供参考,可以使用更新的“每晚”版本。sequelpro.com/test-buildsbrew cask install homebrew/cask-versions/sequel-pro-nightly
彼得W

有可能得到SequelPro工作,对于那些能够登录通过命令行(解决方法mysql客户端)和ALTER其myslq.user表,注意这里:github.com/sequelpro/sequelpro/issues/...
彼得·w ^

如果您使用的是MySQL 8,并且不想降级到mysql_native_password,则可以遵循以下步骤:stackoverflow.com/a/56402217/2321594
Aidin


21
  • 打开MySQL命令行客户端

  • 使用新通行证创建新用户

考虑到顶部bin文件夹的路径示例,这是您需要在命令提示符下逐行运行的代码:

cd C:\Program Files\MySQL\MySQL Server 5.7\bin
MySQL -u root -p    
current password...***  
CREATE USER 'nativeuser'@'localhost'  
IDENTIFIED WITH mysql_native_password BY 'new_password';
  • 然后,您可以再次访问Workbench(在创建新的localhost连接并使用新的凭据开始使用程序之后,您应该能够这样做)。

使用上述用户名(本地用户)建立新的本地主机连接,使用密码(new_password)登录

图片

礼貌:Career365团队回答的UDEMY常见问题解答


这工作了。为什么?尝试使用root无密码连接时出现此错误,该密码在命令行中有效,但在中无效Sequel Pro
沃尔特

像魅力一样工作,与线程启​​动问题完全相关,请注意:您必须具有Mac OS,Catalina,docker 19.03,mysql最新映像,执行此命令$ docker run -p 3306:3306 -d --name mysql -e MYSQL_ROOT_PASSWORD = password dzone网站上的mysql / mysql-server。
banzai

13

对于使用Docker或Docker Compose的用户,由于未设置MySQL映像版本,因此遇到了此错误。Docker将自动尝试获取最新版本为8。

我将MySQL设置为5.7并重建了图像,它正常工作:

version: '2'
services: 
  db:
   image: mysql:5.7

3
有正确的理由使用版本8而不是版本5。我在此页面上是因为我想使用版本8而不是版本5
Zach Smith,

2
使用mysql:5.7而不是mysql:latest为我解决问题
Francesco Borzi

13

这是我在docker-compose中的databdase定义:

dataBase:
    image: mysql:8.0
    volumes:
        - db_data:/var/lib/mysql
    networks:
        z-net:
            ipv4_address: 172.26.0.2
    restart: always
    entrypoint: ['docker-entrypoint.sh', '--default-authentication-plugin=mysql_native_password']
    environment:
        MYSQL_ROOT_PASSWORD: supersecret
        MYSQL_DATABASE: zdb
        MYSQL_USER: zuser
        MYSQL_PASSWORD: zpass
    ports:
        - "3333:3306"

相关行有入口点

构建并启动它之后,可以使用以下命令进行测试:

$ mysql -u zuser -pzpass --host=172.26.0.2  zdb -e "select 1;"
Warning: Using a password on the command line interface can be insecure.
+---+
| 1 |
+---+
| 1 |
+---+

11

对于Windows 10

  1. 修改my.ini文件C:\ProgramData\MySQL\MySQL Server 8.0\

    [mysqld]
    default_authentication_plugin=mysql_native_password
  2. 重新启动MySQL服务。

  3. 在命令行上登录到MySQL,然后在MySQL中执行以下命令:

    • 创建一个新用户。

      CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
    • 授予所有特权。

      GRANT ALL PRIVILEGES ON * .* TO 'user'@'localhost';
  4. 打开MySQL工作台,并使用新的用户凭据打开新的连接。

我正面临着同样的问题,并且这个方法可行。


9

这是在Windows 10上安装MySQL 8.0后为我工作的解决方案。

假设MySQL用户名是root,密码是admin

打开命令提示符,然后输入以下命令:

cd C:\ Program Files \ MySQL \ MySQL Server 8.0 \ bin

mysql_upgrade -uroot -padmin

mysql -uroot -padmin

ALTER USER'root'@'localhost'由mysql_native_password标识为'admin'


8

如果像我这样在GitLab CI上遇到此错误:只需从最新版本更改为5.7版本;)

# .gitlab-ci.yml

rspec:
  services:
    # - mysql:latest (I'm using latest version and it causes error)
    - mysql:5.7 #(then I've changed to this specific version and fix!)

7

我找到

ALTER USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY 'password';

本身不能工作。我还需要设置

[mysqld]
    default_authentication_plugin=mysql_native_password

在运行PHP 7.0的Ubuntu 18.04上的/etc/mysql/mysql.conf.d/mysqld.cnf中


这在Centos 7上对我有用。由于某种原因,默认情况下,我的密码被保存为caching_sha2_password,尝试使用phpMyAdmin登录时出现错误#1251。
DaFudgeWizzad



6

当所使用的工具与MySQL8不兼容时,会出现此错误,请尝试更新至MySQL8的最新版本的MySQL Workbench。


5

几乎与上面的答案类似,但可能只是简单的查询,在MySQL升级后,我在Spring Boot应用程序中出现了此错误,并进入了休眠状态。我们通过对数据库运行以下查询来创建新用户。我相信这是暂时解决方法,可以使用sha256_password代替最新且良好的身份验证caching_sha2_password。

CREATE USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pa$$word';

GRANT ALL PRIVILEGES ON * .* TO 'username'@'localhost';

4

适用于macOS的MySQLWorkbench 8.0.11解决了此问题。我可以与在docker中运行的受root密码保护的mysql实例建立连接。


这就是为我解决的问题。我运行的是带有8.0服务器的旧版MySQL Workbench 6.3。尽管这里有许多答案都说要降低服务器的兼容性,但我只是将Workbench版本升级到了最新的8.0版本(当前是8.0.15)。
总和没有

3

尽管这不是真正的 解决方案,但如果遇到问题,它确实可以在本地运行

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';

1
这样就解决了问题。
kta

2

以下解决方案为我工作 在此处输入图片说明

转到Mysql Workbench->服务器->用户和特权1.单击添加帐户

2.在“登录”选项卡下,提供新的详细信息,并确保选择“身份验证类型”作为标准,并选择相应的管理角色和架构权限

在此处输入图片说明


2

如果您尝试从另一台计算机(无论是否为Docker)从基于文本的MySQL客户端连接到MySQL服务器,

这里的大多数答案都涉及从桌面客户端进行连接,或者要求您切换到较旧的身份验证方法。如果您将其与MySQL客户端(基于文本)连接,则可以使其与Docker容器中的Debian Buster一起使用。

假设您已经安装了apt系统和wget,请执行以下操作:

  1. sudo apt-get update
  2. sudo apt-get install lsb-release -y
  3. MySQL网站下载一个Debian软件包来为您更新apt源。
  4. sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb并选择所需的选项。就我而言,我只需要MySQL Tools & Connectors启用即可。
  5. sudo apt-get update
  6. sudo apt-get install mysql-client -y
  7. 做完了 现在,您可以运行新的MySQL客户端并使用新的身份验证方法进行连接。

这是解决WSL问题的正确答案,谢谢!
安德鲁·兰德斯维克

1

尝试在下载和安装MySql时使用旧密码,这对我有所帮助。或遵循Santhosh Shivan针对Mac OS发布的方法。


0

在Mac上下载8.0.11-rc的开发发行版对我有用。使用以下docker命令:

docker run --name mysql -p 3406:3306 -e MYSQL_ROOT_PASSWORD=mypassword -d mysql

-3

我通过安装MySQL 5.7解决了这个问题:

步骤1 –启用MySQL储存库

首先,您需要在系统上启用MySQL 5.7社区发布的yum存储库。用于yum存储库配置的rpm软件包可在MySQL官方网站上找到。根据您的操作系统版本使用以下命令中的on。

在CentOS和RHEL 7上

yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

在CentOS和RHEL 6上

yum localinstall https://dev.mysql.com/get/mysql57-community-release-el6-9.noarch.rpm

在Fedora 27上

dnf install https://dev.mysql.com/get/mysql57-community-release-fc27-9.noarch.rpm

在Fedora 26上

dnf install https://dev.mysql.com/get/mysql57-community-release-fc26-9.noarch.rpm

在Fedora 25上

dnf install https://dev.mysql.com/get/mysql57-community-release-fc25-9.noarch.rpm

第2步–安装MySQL 5.7服务器

在系统上成功启用MySQL yum存储库后。现在,根据您的操作系统版本,使用以下命令安装MySQL 5.7社区服务器。

在CentOS和RHEL 7/6上

yum install mysql-community-server

在Fedora 27/26/25

 dnf install mysql-community-server

来源:https : //tecadmin.net/install-mysql-5-7-centos-rhel/


-5

回滚到以前的安装(到MySQL Community Server 5.7和Workbench 6.1)并设置新的MySQL凭据对我有用!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.