mysql ビデオ チュートリアル このコラムでは、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 によって変更されていると言われました。起動できません。このディレクトリは非常に役に立たないように感じられ、古いイメージは起動できません。新しいものは開始できません。
だから、私はあまりにも愚かだったので、泣いてしまいました。新しいイメージを直接使用してコンテナーを起動し、元の 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 が正常に復元され、ナビゲート ツールを使用して接続すると、次のエラーが報告されます。
その後、私の SQL を変更する必要があります。 mysql の .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 に変更することしかできません。 , 通常通り接続できます。
3. いくつかの docker コマンドを記録します
重容器中拷贝文件到宿主机 不需要容器启动 docker cp 容器:/etc/mysql/my.cnf /home/xxx/my.cnf 将宿主机的文件拷贝容器里面的目录下 会覆盖老的文件 docker cp /home/xxx/my.cnf 容器:/etc/mysql/ 如果你特别牛逼程序中是用root来连接账号的那你可能还需要创建一个 ‘root’@'%' 的账号并修改它的权限可以远程访问,修改命令网上找
以上がDocker mysql コンテナを mysql8 にアップグレードするときに発生した問題を解決するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。