共计 1676 个字符,预计需要花费 5 分钟才能阅读完成。
自动写代码机器人,免费开通
这篇文章主要介绍怎么处理 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 工具连接报如下的错
那么你需要修改 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;
查看如下图
为啥非要修改 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 遇到的问题”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!
向 AI 问一下细节