无法连接到 mysql:无法加载身份验证插件 'caching_sha2_password



我很困,我用自制软件安装了新版本的mysql(8.0.12(。然后我从mysql中转储了我的数据库(我当时使用的是MAMP堆栈,这样做是为了消除它…(。然而,当导入转储时,创建了数据库,一切似乎都井然有序。然后我试图将我的IDE(phpstorm(连接到它,但我得到了一个错误,说"无法加载身份验证插件‘caching_sha2_password’。"(我认为这是在这个新版本中引入的…(。

我创建了一个my.cnf文件并放入:

[mysqld]default_authentication_plugin=mysql_native_password

仍然有同样的问题

因此,我还尝试创建一个具有密码的用户,以使用这种新算法(caching_sha2_password(。不起作用,我以sudo的身份登录到mysql,它给了我以下信息:

MacBookAir$sudo mysql密码:欢迎使用MySQL监视器。命令以结尾;或\g。您的MySQL连接id为16服务器版本:8.0.12 Homebrew

版权所有(c(20002018,Oracle和/或其附属公司。保留所有权利。

Oracle是Oracle Corporation和/或其附属公司。其他名称可能是其各自的商标所有者。

键入"help;"或'\h'寻求帮助。键入"\c"以清除当前输入语句。

mysql>ALTER USER'root'@'localhost'通过'root'标识为mysql_native_password;错误1726(HY000(:存储引擎"MyISAM"不支持系统表。[mysql.db]

最后但同样重要的是,我使用以下内容更改了my.cnf文件中的配置:default_authentication_plugin=mysql_native_password

你们知道吗?

干杯

MyISAM基于旧的(不再可用(ISAM存储发动机

。。。看见https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html

有几个检查可以在MySQL 5.*安装上运行,看看是否可以升级(这些只是示例(:

mysqlcheck -u root -p --all-databases --check-upgrade
mysql_upgrade --user=root -p --host=localhost —force

如果你有mysqlshell:

mysqlsh -- util checkForServerUpgrade root@localhost:3306 --target-version=8.0.16  --config-path=/etc/my.cnf 

这些命令可能会修复、升级或修复数据库的问题。

在5.*安装时,我建议您将MyISAM表转换为InnoDB并使用新的默认字符集utf8mb4,它对更多字符集有更广泛的支持。

ALTER TABLE table_name ENGINE=InnoDB;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4;

使用mysqldump保存您的模式。单独安装MySQL 8。(不要将5.*安装升级到8。(将您的mysqldump文件导入到您创建的新数据库下的mysql8安装中。

创建用户帐户:用户帐户必须使用旧的身份验证插件创建-这是PHP连接的唯一方式。此外,您必须使用PHP 7.2.4或更高版本

CREATE USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'my_password';

授予用户访问适当架构的权限。类似于:

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

注意:PHP的mysql本地驱动程序(mysqlnd(尚未更新为使用新的默认身份验证插件(caching_sha2_password(告诉mysql在创建用户帐户时使用旧的身份验证插件,方法是将其添加到/etc/my.cnf文件中:

default_authentication_plugin=mysql_native_password

但是,如果您的my.cnf文件中没有包含上述指令,您仍然可以发出带有">IDENTIFIED with mysql_native_password"子句的create-user语句来使用旧的身份验证插件!

所以我决定删除mysql 8,并安装5.7,这对我来说很好,显然没有兼容性问题。对于mysqlserver5.*和8.0之间的兼容性问题,这是一个快速而肮脏的替代方案。

问题是,我将数据库从mysqlv5.*(MAMP堆栈(迁移到了mysqlserver8.0(单独安装(,因此转储使用MyIsam引擎创建了一些系统表(因为在以前的版本中,我认为Innodb不能用于系统表…?(。然而,这给我在更改任何系统表(用户密码等(时带来了很多问题,我不确定这是否是因为他们试图摆脱MyIsam引擎,因此新的插件不适用,例如caching_sha2_password(顺便说一句,更改my.cnf文件并添加">default_authentication_plugin=mysql_native_password"对我不起作用…(

感谢

最新更新