微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

怎么处理Docker mysql容器升级到mysql8遇到的问题

这篇文章主要介绍怎么处理Docker mysql容器升级MysqL8遇到的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

问题还原
原本的MysqL 容器创建 命令如下

docker run --name MysqL -v /xxxx/xxx/MysqLdata:/var/lib/MysqL -p xxx:3306 -d MysqL:laster

数据目录被挂载到 /xxxx/xxx/MysqLdata 下面 领导让升级MysqL 我天真的下了一个 MysqL:8.0.11最新的
MysqL镜像 然后执行

docker run --name MysqL -v /xxxx/xxx/MysqLdata:/var/lib/MysqL -p xxx:3306 -d MysqL:8.0.11

创建容器 同样挂载到原本的目录 :  /xxxx/xxx/MysqLdata

结果容器秒退根本无法起来    查看日志

 docker logs -f -t --tail 70 MysqL

日志说 大概是/xxxx/xxx/MysqLdata下面的插件文件是5.7版本创建的 8.0无法启动 然后我有切回原本的 MysqL:laster 镜像创建容器,又说这个目录下的文件被8.0修改无法启动,感觉这个目录就这么废了,老的镜像无法启动,新的也无法启动。

所以自己被自己的行为蠢哭了千万别再直接用新本的镜像启动容器时挂接原本的MysqL目录,有同事说这样没问题,但为啥我出问题了人设有问题吗

解决方法
用老的MysqL:laster镜像连接 /xxxx/xxx/MysqLdata 的备份目录,备份太重要了。启动一个MysqL容器
用新的MysqL:8.0.11 启动一个新的MysqL 容器,挂接一个任意目录。然后通过navicat等其他工具将老的数据备份还原到新的MysqL容器中。或者通过命令
$ docker exec some-MysqL sh -c 'exec MysqLdump --all-databases -uroot -p"$MysqL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql 备份还原。

1、如果你的新本MysqL还原成功了你用 navicate工具连接报如下的错

怎么处理Docker mysql容器升级到mysql8遇到的问题

那么你需要修改MysqL 的 my.cnf  文件
添加

default_authentication_plugin=MysqL_native_password

因为8.0使用的是 caching_sha2_password
你可以进入容器:

docker exec -it MysqL /bin/bash
MysqL -uroot -pxxxx
use MysqL
select Host,User,plugin from MysqL.user;

查看如下图

怎么处理Docker mysql容器升级到mysql8遇到的问题

为啥非要修改caching_sha2_password 为 MysqL_native_password ,我也不知道只是我的8.0.11的MysqL容器启动后,程序接口任然无法正常使用报错:无法连接不支持的认证方法,这个时候可能需要升级程序接口的MysqL驱动 ,但是懒得升,只能修改caching_sha2_password 为 MysqL_native_password 结果就可以正常连接了。

3、一点docker 命令记录一下

重容器中拷贝文件到宿主机 不需要容器启动
docker cp 容器:/etc/MysqL/my.cnf  /home/xxx/my.cnf 

将宿主机的文件拷贝容器里面的目录下 会覆盖老的文件
docker cp /home/xxx/my.cnf   容器:/etc/MysqL/
如果你特别牛逼程序中是用root来连接账号的那你可能还需要创建一个 ‘root’@'%' 的账号并修改它的权限可以远程访问,修改命令网上找

以上是“怎么处理Docker MysqL容器升级MysqL8遇到的问题”这篇文章的所有内容,感谢各位的阅读!希望分享内容对大家有帮助,更多相关知识,欢迎关注编程之家行业资讯频道!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐