Maison > Article > base de données > Résoudre les problèmes rencontrés lors de la mise à niveau du conteneur Docker mysql vers mysql8
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.
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
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
为啥非要修改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!