我很困,我用自制软件安装了新版本的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"对我不起作用…(
感谢