Maison  >  Article  >  base de données  >  Résoudre les problèmes rencontrés lors de la mise à niveau du conteneur Docker mysql vers mysql8

Résoudre les problèmes rencontrés lors de la mise à niveau du conteneur Docker mysql vers mysql8

coldplay.xixi
coldplay.xixiavant
2020-12-23 09:30:062457parcourir

La colonne

tutoriel vidéo mysql présente les problèmes rencontrés lors de la mise à niveau du conteneur Docker mysql vers mysql8 et vous indique comment le résoudre efficacement.

Résoudre les problèmes rencontrés lors de la mise à niveau du conteneur Docker mysql vers mysql8

Recommandé (gratuit) : Tutoriel vidéo MySQL

Restauration des problèmes
La commande originale de création du conteneur mysql est la suivante

docker run --name mysql -v /xxxx/xxx/mysqldata:/var/lib/mysql -p xxx:3306 -d mysql:laster

Le répertoire de données est monté sur /xxxx/xxx/mysqldata Le leader ci-dessous m'a demandé de mettre à jour mysql. J'ai naïvement téléchargé un mysql : 8.0. .11 last
image mysql puis exécutez

docker run --name mysql -v /xxxx/xxx/mysqldata:/var/lib/mysql -p xxx:3306 -d mysql:8.0.11

pour créer un conteneur et montez-le dans le répertoire d'origine : /xxxx/xxx/mysqldata

En conséquence, le conteneur plante et ne peut pas être démarré du tout Voir le journal

 docker logs -f -t --tail 70 mysql

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

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

Solution :
Utiliser l'ancien mysql:laster image pour vous connecter au répertoire de sauvegarde de /xxxx/xxx/mysqldata,备份太重要了. Démarrez un conteneur mysql
Utilisez le nouveau mysql : 8.0.11 pour démarrer un nouveau conteneur mysql et monter un répertoire arbitraire. Restaurez ensuite l'ancienne sauvegarde de données dans le nouveau conteneur MySQL via d'autres outils tels que Navicat. Ou sauvegardez et restaurez via la commande
$ docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql.

1. Si votre nouveau MySQL est restauré avec succès et que vous utilisez l'outil de navigation pour vous connecter, l'erreur suivante est signalée

Résoudre les problèmes rencontrés lors de la mise à niveau du conteneur Docker mysql vers mysql8

Ensuite, vous devez modifier le my.cnf de mysql. Fichier :
Ajouter :

default_authentication_plugin=mysql_native_password

Parce que 8.0 utilise caching_sha2_password
Vous pouvez entrer le conteneur :

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

Voir l'image ci-dessous

Résoudre les problèmes rencontrés lors de la mise à niveau du conteneur Docker mysql vers mysql8

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

3. Enregistrez-le avec une petite commande docker

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer