公式の MySQL イメージを使用するには、構成ファイル、DB データ ファイル ディレクトリなどのいくつかの変更が必要です。変更後にコンテナーを再実行すると、変更されたファイルは無効になり、新しく生成されたコンテナーには以前に変更されたコンテンツが含まれなくなります。 1 つ目は、公式サイトからダウンロードしたイメージを修正し、新しいイメージ ファイルと新しく生成されたその他のイメージ情報を docker commit -m で送信する方法です。 2番目のタイプのMYSQL DBデータでは、コンテナを閉じた後にdocker restartで同じコンテナを再起動すると、データは正常になります。コンテナを再度docker runすると、各コンテナにファイルアドレスがあるため、データは表示されません。 これには、他のコンテナが読み取れるようにデータ ファイルをマウントする必要があります。 docker で mysql コンテナを起動し、mysql コンテナ内のデータベースに変更を加え (データベースの作成、データの変更など)、コミット後に再度コンテナに入ると、以前の変更がすべて保存されていないことがわかります。 1. バックグラウンドで mysql コンテナを実行し、コンテナ名を mysql に設定します。
2. コンテナ bash と mysql に入り、データベース TEST_DB を作成し、TEST_DB が正常に作成されたことを確認します。 [root@localhost ~]# docker exec -it mysql bash root@f80791a0daf1:/# mysql -uroot -p データベースを表示します。 データベース TEST_DB を作成します。 3. コンテナを終了し、イメージへの変更をコミットします。このデータは実際には MySQL イメージではなく、ホスト マシン上で変更されます。だからうまくいかない mysql>終了 さよなら root@f80791a0daf1:/# 終了 出口 [root@localhost ~]# docker commit mysql owenchen1992/mysql 4. コンテナを再起動し、bash と mysql を入力します。以前作成した TEST_DB が消えていることがわかり、以前の変更が無効であることがわかります。 [root@localhost ~]# docker コンテナが mysql を停止します マイスク [root@localhost ~]# docker コンテナ rm mysql マイスク [root@localhost ~]# docker run --name=mysql -p 3306:3306 -d owenchen1992/mysql a1a1b4174caaadda0ec4b01b9fe5f92d6b3464d85284042274f71aebde0915dd [root@localhost ~]# docker exec -it mysql bash ルート@a1a1b4174caa:/#mysql -uroot -p パスワードを入力してください: MySQL モニターへようこそ。コマンドは ; または \g で終わります。 MySQL接続IDは3です サーバーバージョン: 5.7.20 MySQL コミュニティサーバー (GPL) mysql> データベースを表示します。 +--------------------+ | データベース | +--------------------+ | 情報スキーマ | |mysql | | パフォーマンススキーマ | |システム| +--------------------+ セット内の 4 行 (0.00 秒) 問題の原因: MySQL Dockerfile には次のような行があります。
これは、コンテナ内の /var/lib/mysql ディレクトリへのすべての変更がホスト上の特定の場所にマッピングされることを意味します。特定の対応するホスト ディレクトリは、コマンド docker inspect containerID/name で確認できます。docker commit を実行すると、コンテナ内の /var/lib/mysql ディレクトリへの変更はイメージにコミットされませんが、これらの変更はいつでもホスト上の対応するディレクトリと同期されます。 コミットされたイメージを再起動すると、コンテナはデータの更新を保存するためにホスト上に新しいディレクトリを作成します。したがって、これは元のホスト ディレクトリではないため、新しく開かれたコンテナは以前のデータの変更を確認できません。 解決: 問題の原因がわかったので、解決するのは難しくありません。手順は次のとおりです。 このディレクトリに直接アクセスして、各コンテナに生成されたデータディレクトリを表示できます。 1. mysql コンテナ「/var/lib/docker/volumes/8496bbf33782bdadc027cdcf23197e5ebc36d11deb69ee833d63b557b3a7183d/_data」に対応するホスト ディレクトリを見つけます。 [root@localhost ~]# docker でmysqlを検査する [ ...... 「ソース」: 「/var/lib/docker/volumes/8496bbf33782bdadc027cdcf23197e5ebc36d11deb69ee833d63b557b3a7183d/_data」、 「宛先」: 「/var/lib/mysql」、 ...... ] コンテナを作成して実行する前の手順を繰り返し、新しいコンテナを実行して、TEST テーブルを作成します。まずコンテナを閉じてから、コンテナ サービスを削除します。 4. 新しいコンテナをバックグラウンドで実行し、ホスト マシンに対応するディレクトリをコンテナの /var/lib/mysql ディレクトリにマウントし、読み取りおよび書き込み権限を有効にします (重要な手順):
5. 新しく開いたコンテナに入り、データベースを確認します。コンテナを再実行しても、作成したデータベースTEST_DBが消えず、問題が解決していることがわかります。 手順は次のとおりです: 1. 新しいテーブルを作成します。2. テーブルを作成するためにコンテナをシャットダウンします。3. コンテナを再実行し、データ ディレクトリを /var/lib/mysql にマウントすると、問題は解決します。 補足知識: Docker環境でMySQLを使用する際のエンコード形式を変更する方法 方法1(単一マシンの変更の場合) まず、mysqlサービスが開始されていることを確認します docker exec -it + サービス名/bin/bashと入力してコンソールに入ります。 apt-get updateコマンドを入力します apt-get install vimと入力します(上記の2つのコマンドはvimエディタをダウンロードするために使用されます)。 vim /etc/mysql/mysql.conf.d/mysqld.cnfコマンドを入力してmysqld.cnfファイルに入ります。 4. i を使用して編集モードを開き、テキストの最後に次のように入力します。 注意: 以下の内容を誤って入力しないでください。誤って入力すると、構成ファイルが無効になります。 [クライアント] デフォルトの文字セット=utf8 [mysql] デフォルトの文字セット=utf8 [mysqld] 文字セットサーバー=utf8 終了するには ESC を押し、保存して終了するには Shift + コロン wq を押します。 5. MySQLコンソールに入る 6. 変更された対応する情報を表示するには、「show variables like 'char%';」と入力します。 変更が完了し、データベースが再起動したら、「char%」のような変数を表示します。 上記の結果は、変更が成功したことを示しています。 方法2(クラスター構築に適用) 構成ファイルを元のディレクトリからコピーし、外部ファイルを使用して変更します。この方法は、ファイルを複数のサーバーに送信して、データベースのデフォルトのエンコーディングを変更するために使用されます。 docker exec -it + サービス名/bin/bash でコンソールに入る cd /etc/mysql/conf.d/と入力して設定ファイルのディレクトリに入ります。 ファイルの絶対パスを取得するにはpwdと入力します コンソールに戻るにはcdと入力し、終了してください docker cp サービス名:/etc/mysql/conf.d/mysql.cnf /usr/soft と入力します (docker 内の mysql.cnf ファイルを Linux の下の soft フォルダにコピーします) 外部エディター (notepad++ など) を開き、次のように構成ファイルを記述します。 [クライアント] デフォルトの文字セット=utf8 [mysql] デフォルトの文字セット=utf8 [mysqld] init_connect = '照合接続を utf8_unicode_ci に設定' init_connect='名前をutf8に設定' 文字セットサーバー=utf8 照合サーバー=utf8_unicode_ci 文字セットクライアントハンドシェイクをスキップする PS: 設定ファイルの内容の間にはスペースが必要であることに注意することが重要です。 上手に節約 7.docker cp /usr/soft/mysql.cnf サービス名: /etc/mysql/conf.d/ 変更したファイルを元のディレクトリにコピーして上書きします 8. dockerでmysqlサービスを再起動し、 9. 変更された文字エンコード形式を表示するには、「char%」コマンドのようなshow variablesを入力します。 Docker MySQLコンテナデータベースの変更が反映されない問題を解決する上記の記事は、編集者が皆さんと共有する内容のすべてです。この記事が皆さんの参考になれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: MySQL 8.0.22 の最新バージョンのダウンロードとインストールの超詳細なチュートリアル (Windows 64 ビット)
1. MySQL Community Server 5.7.16をダウンロードしてインストールします...
問題の説明最近のバックグラウンドサービスでは、特定の命令の要求データをディスクに保存する新しい機能が...
この記事では、参考までに、Navicat for MySql の CSV ファイルのビジュアルインポ...
目次Django でのタイムゾーン設定USE_TZ=真USE_TZ=偽Linux コンテナでのタイム...
この記事では、WeChatミニプログラムのビデオ弾幕の位置をランダム化するための具体的なコードを紹介...
おそらく誰もが js の実行によって DOM ツリーの解析とレンダリングがブロックされることを知って...
目次Vue が DOM を非同期更新する原理1 実際の DOM 要素を取得できるのはいつですか? 2...
ウェブサイトのフロントエンド開発で発生するセキュリティ問題は、クライアントブラウザで実行されるコード...
目次1. はじめに2. 使用1. vue2とvue3の違い2. ページ上の一部のデータはキャッシュす...
環境: 1. Windows Server 2016 Datacenter 64 ビット 2. SQ...
MySQL レプリケーションの詳細な説明と簡単な例マスタースレーブレプリケーション技術は、MySQL...
概要通常、データベース内のデータを直接表示することは望ましくないため、最後の 2 つのセクションでは...
Linux システム管理者にとって、サービスがポートに正しくバインドされているか、またはポートをリッ...
前提条件gitをインストールする必要があるインストール手順1. リモートリポジトリからpyenvをク...
目次概要Gulp.jsをインストールするGulp.jsを使用してプロジェクトを作成するgulpfil...