内容提要
在libera:#mysql中,一个用户在docker容器中运行mysql:latest版本的MySQL。容器自动升级到MySQL 9.0.0,删除了mysql_native_password插件。用户无法登录数据库,没有备份和副本。通过docker重现问题并恢复实例。使用LVM2和XFS文件系统创建10GB测试文件系统,挂载到/a目录。验证插件为即将被弃用的mysql_native_password。升级到8.0和8.4版本时遇到认证方法不再被识别的问题。通过创建恢复my.cnf文件解决问题,并执行恢复操作。演示使用ALTER USER语句升级认证方法为caching_sha2_password。演示创建具有完整权限的其他用户。容器现在可以通过root用户从内部和外部访问。
关键要点
-
用户在docker容器中运行MySQL,容器自动升级到MySQL 9.0.0,删除了mysql_native_password插件。
-
用户无法登录数据库,且没有备份和副本。
-
使用LVM2和XFS文件系统创建10GB测试文件系统,并挂载到/a目录。
-
验证mysql_native_password插件已被弃用,使用5.7版本重现问题。
-
通过docker运行5.7版本的MySQL,确认使用mysql_native_password插件。
-
升级到8.0版本后,数据目录升级成功,但仍然使用mysql_native_password。
-
在8.4版本中,mysql_native_password插件不再被识别,登录失败。
-
通过修改my.cnf文件,添加skip_grant_tables配置,进行恢复操作。
-
使用ALTER USER语句将认证方法升级为caching_sha2_password。
-
创建具有完整权限的新用户,并验证用户权限。
-
容器现在可以通过root用户从内部和外部访问。
延伸问答
MySQL 9.0.0中删除了哪个插件?
mysql_native_password插件在MySQL 9.0.0中被删除。
如何恢复无法登录MySQL数据库的问题?
可以通过修改my.cnf文件,添加skip_grant_tables配置来恢复登录。
在MySQL 8.4版本中,为什么无法使用mysql_native_password插件?
在MySQL 8.4版本中,mysql_native_password插件不再被识别,因此登录失败。
如何将MySQL用户的认证方法升级为caching_sha2_password?
可以使用ALTER USER语句将用户的认证方法升级为caching_sha2_password。
在Docker中如何创建MySQL测试环境?
可以通过docker命令创建MySQL容器,并挂载外部卷来设置测试环境。
如何创建具有完整权限的新用户?
可以使用CREATE USER语句创建新用户,并使用GRANT语句赋予其完整权限。