>  기사  >  데이터 베이스  >  Docker mysql 컨테이너를 mysql8로 업그레이드할 때 발생하는 문제 해결

Docker mysql 컨테이너를 mysql8로 업그레이드할 때 발생하는 문제 해결

coldplay.xixi
coldplay.xixi앞으로
2020-12-23 09:30:062429검색

mysql 동영상 튜토리얼 칼럼에서는 Docker mysql 컨테이너를 mysql8로 업그레이드할 때 발생하는 문제를 소개하고 이를 효과적으로 해결하는 방법을 알려줍니다.

Docker mysql 컨테이너를 mysql8로 업그레이드할 때 발생하는 문제 해결

권장(무료): mysql 동영상 튜토리얼

문제 복원
원래 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 수정을 시작할 수 없습니다. 이 디렉터리는 너무 쓸모가 없고 새 이미지도 시작할 수 없는 것 같습니다. . 日志说 大概是/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 结果就可以正常连接了。

그래서 나는 내 행동 때문에 울었습니다. 컨테이너를 시작하고 원래 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로 업그레이드할 때 발생하는 문제 해결🎜🎜그런 다음 my.cnf 파일을 수정해야 합니다 mysql: 🎜추가됨: 🎜

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

将宿主机的文件拷贝容器里面的目录下 会覆盖老的文件
docker cp /home/xxx/my.cnf   容器:/etc/mysql/
如果你特别牛逼程序中是用root来连接账号的那你可能还需要创建一个 ‘root’@'%' 的账号并修改它的权限可以远程访问,修改命令网上找
🎜 8.0부터 사용됩니다. 하나는 caching_sha2_password입니다🎜컨테이너에 들어갈 수 있습니다: 🎜rrreee🎜아래 그림을 보세요🎜🎜 .png" alt="Docker mysql 컨테이너를 mysql8로 업그레이드할 때 발생하는 문제 해결"/>🎜🎜ca를 수정해야 하는 이유 ching_sha2_password 8.0.11 mysql 컨테이너가 시작된 후에도 여전히 프로그램 인터페이스를 정상적으로 사용할 수 없으며 오류가 보고됩니다. 현재 지원되지 않는 인증 방법입니다. 프로그램 인터페이스의 mysql 드라이버를 업그레이드해야 할 수도 있지만 업그레이드하기에는 너무 게을러서 caching_sha2_password를 mysql_native_password로 수정만 하면 정상적으로 접속이 가능합니다. 🎜🎜3. docker 명령을 기록하세요🎜rrreee

위 내용은 Docker mysql 컨테이너를 mysql8로 업그레이드할 때 발생하는 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jianshu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제