• ADADADADAD

    怎么处理Docker mysql容器升级到mysql8遇到的问题[ mysql数据库 ]

    mysql数据库 时间:2024-11-29 09:51:26

    作者:文/会员上传

    简介:

    问题还原原本的mysql 容器创建 命令如下dockerrun--namemysql-v/xxxx/xxx/mysqldata:/var/lib/mysql-pxxx:3306-dmysql:laster数据目录被挂载到 /xxxx/xxx/mysqldata 下面

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

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

    dockerrun--namemysql-v/xxxx/xxx/mysqldata:/var/lib/mysql-pxxx:3306-dmysql:laster

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

    dockerrun--namemysql-v/xxxx/xxx/mysqldata:/var/lib/mysql-pxxx:3306-dmysql:8.0.11

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

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

    dockerlogs-f-t--tail70mysql

    日志说 大概是/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
    你可以进入容器:

    dockerexec-itmysql/bin/bashmysql-uroot-pxxxxusemysqlselectHost,User,pluginfrommysql.user;

    查看如下图

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

    3、一点docker 命令记录一下

    重容器中拷贝文件到宿主机不需要容器启动dockercp容器:/etc/mysql/my.cnf/home/xxx/my.cnf将宿主机的文件拷贝容器里面的目录下会覆盖老的文件dockercp/home/xxx/my.cnf容器:/etc/mysql/如果你特别牛逼程序中是用root来连接账号的那你可能还需要创建一个‘root’@'%'的账号并修改它的权限可以远程访问,修改命令网上找
    怎么处理Docker mysql容器升级到mysql8遇到的问题.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: dockermysqldock