我很困惑,我用自制软件安装了新版本的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
有创意的人吗?
欢呼
答案 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插件!