Die Spalte
MySQL-Video-Tutorial stellt die Probleme vor, die beim Upgrade des Docker-MySQL-Containers auf MySQL8 auftreten, und erklärt Ihnen, wie Sie diese effektiv lösen können.
Empfohlen (kostenlos): MySQL-Video-Tutorial
Problembehebung
Der ursprüngliche Befehl zum Erstellen eines MySQL-Containers lautet wie folgt:
docker run --name mysql -v /xxxx/xxx/mysqldata:/var/lib/mysql -p xxx:3306 -d mysql:laster
Das Datenverzeichnis wird in /xxxx/xxx/mysqldata Let gemountet der Anführer unten Upgrade von MySQL Ich habe naiverweise ein MySQL: 8.0.11 neuestes
MySQL-Image heruntergeladen und dann
docker run --name mysql -v /xxxx/xxx/mysqldata:/var/lib/mysql -p xxx:3306 -d mysql:8.0.11
ausgeführt, um einen Container zu erstellen und ihn im ursprünglichen Verzeichnis bereitzustellen: /xxxx/xxx/mysqldata
Als Ergebnis der Container stürzte ab und konnte überhaupt nicht gestartet werden. Sehen Sie sich das Protokoll an
docker logs -f -t --tail 70 mysql
Im Protokoll stand, dass die Plug-In-Datei unter /xxxx/xxx/mysqldata in Version 5.7 erstellt wurde und in 8.0 nicht gestartet werden konnte. Dann habe ich zurückgeschaltet zum ursprünglichen mysql:laster-Image, um den Container zu erstellen, und sagte, dass die 8.0-Modifikation nicht gestartet werden kann. Das alte Image kann nicht gestartet werden und das neue kann nicht gestartet werden .
日志说 大概是/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 结果就可以正常连接了。
Also habe ich wegen meines eigenen Verhaltens geweint. Bitte verwenden Sie nicht direkt das neue Image, um den Container zu starten und das ursprüngliche MySQL-Verzeichnis bereitzustellen. Einige Kollegen sagten, dass dies kein Problem sei I Gibt es ein Problem?
🎜Lösung: 🎜🎜Verwenden Sie das alte mysql:laster-Image, um eine Verbindung zum Sicherungsverzeichnis von /xxxx/xxx/mysqldata herzustellen . Starten Sie einen MySQL-Container 🎜 Verwenden Sie das neue MySQL: 8.0.11, um einen neuen MySQL-Container zu starten und ein beliebiges Verzeichnis bereitzustellen. Stellen Sie dann die alte Datensicherung mit anderen Tools wie Navicat im neuen MySQL-Container wieder her. Oder über den Befehl 🎜$ docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases .sql
sichern und wiederherstellen. 🎜🎜1. Wenn Ihr neues MySQL erfolgreich wiederhergestellt wurde und Sie das Navicate-Tool zum Herstellen einer Verbindung verwenden, wird der folgende Fehler gemeldet🎜🎜🎜Dann müssen Sie die my.cnf-Datei von ändern sql: 🎜Hinzugefügt: 🎜
重容器中拷贝文件到宿主机 不需要容器启动 docker cp 容器:/etc/mysql/my.cnf /home/xxx/my.cnf 将宿主机的文件拷贝容器里面的目录下 会覆盖老的文件 docker cp /home/xxx/my.cnf 容器:/etc/mysql/ 如果你特别牛逼程序中是用root来连接账号的那你可能还需要创建一个 ‘root’@'%' 的账号并修改它的权限可以远程访问,修改命令网上找
Warum Ich muss caching_sha2_password ändern zu mysql_native_password? Es ist nur so, dass die Programmschnittstelle nach dem Start immer noch nicht normal verwendet werden kann: Es kann keine Verbindung zu einer nicht unterstützten Authentifizierungsmethode hergestellt werden. Möglicherweise müssen Sie den MySQL-Treiber der Programmschnittstelle aktualisieren, sind aber zu faul für ein Upgrade und können daher nur caching_sha2_password in mysql_native_password ändern. Infolgedessen können Sie eine normale Verbindung herstellen.
🎜🎜3. Zeichnen Sie einige Docker-Befehle auf🎜rrreeeDas obige ist der detaillierte Inhalt vonLösen Sie die Probleme, die beim Upgrade des Docker-MySQL-Containers auf MySQL8 auftreten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!