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

时间:2018-11-10 22:00:40

标签: mysql

我很困惑,我用自制软件安装了新版本的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)2000、2018,Oracle和/或其分支机构的版权。保留所有权利。

Oracle是Oracle Corporation和/或其Oracle的注册商标。 会员。其他名称可能是其各自的商标 所有者。

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

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

最后但并非最不重要的一点,我使用以下命令更改了my.cnf文件中的配置: default_authentication_plugin = mysql_native_password

有创意的人吗?

欢呼

2 个答案:

答案 0 :(得分:0)

因此,我决定删除mysql 8,然后安装5.7,这对我来说很好,并且显然没有兼容性问题。 这是mysql服务器5. *和8.0之间兼容性问题的一种快速而肮脏的替代方法。

问题是我将数据库从mysql v 5。*(MAMP堆栈)迁移到了mysql服务器8.0(单独安装),因此转储使用 MyIsam 引擎创建了一些系统表(似乎在以前的版本中,我认为 Innodb 不能用于系统表...?)。 但是,这在更改任何系统表(用户密码等)方面给我带来了很多问题,我不确定是否是因为它们试图摆脱 MyIsam 引擎因此新的插件无法适应,例如 caching_sha2_password (并且更改my.cnf文件并添加“ default_authentication_plugin = mysql_native_password ”对我不起作用...)

谢谢

答案 1 :(得分:0)

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

如果您拥有mysql shell:

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文件导入到mysql 8安装中。

创建用户帐户: 必须使用旧的身份验证插件创建用户帐户-这是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) 通过将它添加到/etc/my.cnf文件中,告诉mysql在创建用户帐户时使用旧的身份验证插件:

default_authentication_plugin=mysql_native_password

但是,如果您不在my.cnf文件中包含上述指令,则仍可以使用“ IDENTIFIED WITH mysql_native_password ”子句发出create user语句,以使用旧的auth插件!