docker公式mysqlイメージのカスタム構成の詳細な説明

docker公式mysqlイメージのカスタム構成の詳細な説明

インストール時間を節約するために、公式の mysql docker イメージを使用して mysql を起動しました。

合格

次のようにコードをコピーします
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d daocloud.io/mysql:tag

some-mysql はコンテナの名前を指定し、my-secret-pw は root ユーザーのパスワードを指定し、tag パラメータは必要な MySQL バージョンを指定します。

この方法ではデータは永続的ではないため、起動パラメータでローカル ディレクトリをマウントする必要があります。

これまでデータベースはこのように動作していましたが、最近プログラムで絵文字表現をサポートする必要が生じたため、MySQL の文字セットを変更する必要があります。

次のようにコードをコピーします
$ docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d daocloud.io/mysql:tag

この時点で、カスタム設定ファイルをマウントすることができます。公式ドキュメントでは次のように説明されています。

MySQL サービスが起動すると、/etc/mysql/my.cnf が設定ファイルとして使用されます。このファイルは、/etc/mysql/conf.d ディレクトリ内の .cnf サフィックスを持つすべてのファイルをインポートします。これらのファイルは、/etc/mysql/my.cnf ファイル内の構成を拡張または上書きします。したがって、独自の構成ファイルを作成し、それを MySQL コンテナの /etc/mysql/conf.d ディレクトリにマウントすることができます。

したがって、データベース設定を変更する最も簡単な方法は、ホスト上に新しい構成ファイルを作成し、それをutf8mb4に変更することです。

[クライアント]

デフォルトの文字セット=utf8mb4


[mysqld]

文字セットクライアントハンドシェイク = FALSE

文字セットサーバー = utf8mb4

照合サーバー = utf8mb4_unicode_ci

[mysql]
デフォルトの文字セット=utf8mb4

次に、ファイルを対応するDockerコンテナフォルダにコピーします。

docker cp /home/my.cnf (ホストファイルパス) [コンテナID]:/etc/mysql/mysql.conf.d

最後に、docker stop コマンドと start コマンドを使用してコンテナを再起動し、カスタム構成を読み込みます。

Dockerの公式MySQLイメージで構成されたコンテナを起動できない

MySQLのDockerイメージを使用しています。まずイメージを作成して起動します。

# docker run --name mysql-b \
> -p 33002:3306 -v /zc/mysql/datadir-b:/var/lib/mysql \
> -e MYSQL_ROOT_PASSWORD='123456' -d mysql:最新

正常に起動しました。問題はありません。通常、MySQL を使用する場合は、パラメータを設定する必要があります。パラメータを設定するには、まずコンテナの bash に入り、次の操作を行う必要があります。

docker exec -it mysql -b bash

MySQL のデフォルトの設定ファイルは /etc/mysql/my.cnf ファイルです。設定をカスタマイズする場合は、/etc/mysql/conf.d ディレクトリに .cnf ファイルを作成することをお勧めします。新しく作成されたファイルは、サフィックスが cnf である限り、任意の名前を付けることができます。新しく作成されたファイル内の設定項目は、/etc/mysql/my.cnf 内の設定項目を上書きできます。 MySQL の公式 Docker イメージには vim エディタが提供されていないため、cat コマンドを使用してファイルを生成し、コンテンツを追加します。

# cat >test.cnf <<EOF
[mysqlダンプ]
ユーザー=root
パスワード='123456'
[mysqld]
最大許容パケット数=8M
小文字テーブル名=1
文字セットサーバー=utf8
最大接続数=900
最大接続エラー数=600
デフォルトの文字セット=utf8
終了

終了した後、コンテナを停止し、コンテナを再起動すると、コンテナが起動できないことがわかります。

回避策

起動できない元のコンテナを削除します。新しいコンテナを再作成します。この問題の鍵となるのは、元の test.cnf ファイルにエラーがあることです。元の設定ファイルの最後の行を見つけます。

デフォルトの文字セット=utf8

この行を削除します。設定ファイルを追加するときは、そのような行がないことを確認してください。

原因

MySQL の公式 Docker イメージの最新タグの下にある [mysqld] 構成セクションには、default-character-set 構成項目がありません。
すべての構成項目を表示する場合は、次のコマンドを使用してパイプラインを使用し、出力ヘルプを help.txt ファイルに格納できます。

docker run -it --rm mysql:tag --verbose --help > help.txt

タグは、最新や 5.6 など、イメージのラベルを示します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • dockerによるmysqlイメージ作成と自動インストールスクリプトの詳しい説明
  • DockerでMysqlイメージを使用する方法の詳細な説明
  • Dockerfile を使用して MySQL イメージを構築し、データの初期化と権限設定を実装する詳細な説明
  • Dockerにmysqlイメージをインストールして使用する
  • Dockerfile で MySQL イメージを構築する方法

<<:  CentOS で RPM を使用して MySQL 5.6 をインストールするチュートリアル

>>:  配列をフィルタリングするJavaScript

推薦する

TypeScript のクラス

目次1. 概要2. シンプルなクラスを定義する3. 継承4. public、private、prot...

Vue3 非同期データ読み込みコンポーネントサスペンスの使い方

目次序文コンポーネントの作成要約する序文Vue3 には多くの注目すべき機能が追加されましたが、サスペ...

MySQL DATE_FORMAT関数の使用

タオバオが、ダブル11に最も多くの注文をした2人のユーザー、ユーザー1:「ショッピングの皇帝、陳哈哈...

JavaScript はクリックして画像の形状を変更する (変換アプリケーション) を実装します。

JavaScriptをクリックすると画像の形状が変わります(変形の応用)。参考までに具体的な内容は...

Vue のフィルターの適用シナリオの詳細な説明

filterは通常、特定の値をフィルターするために使用されます。たとえば、フィールドが空だが、フロン...

MySQL 5.7.15 バージョンのインストールと設定方法のグラフィックチュートリアル

この記事では、MySQLバージョン5.7のインストール方法と使用方法、およびデータベースデータの保存...

Jsモジュールパッケージのエクスポートの使用法と違いにはインポートが必要

目次1. Commonjsのエクスポートとrequireの使用1.1 CommonJS エクスポート...

Dockerイメージの圧縮と最適化操作

Docker が今日非常に人気がある理由は、主にその軽量性、迅速な展開、およびリソースの利用にありま...

純粋な CSS を使用してユーザーが Web ページのコンテンツをコピーするのを防ぐ方法

序文私自身の個人ブログを入力しているときに、ブログの詳細ページでさまざまなコンテンツをコピーするさま...

MySQL InnoDBとMyISAMの違いを簡単に理解する

序文MySQL は、myisam、innodb、memory、archive、example など、...

マウスを動かしたときに画像のズーム効果とゆっくりとした遷移​​効果を実現するCSSのサンプルコード

transform:scale()比例したズームインまたはズームアウトを実現できます。 transi...

MySQL の 4 つのトランザクション分離レベルの詳細な説明

この実験のテスト環境: Windows 10+cmd+MySQL5.6.36+InnoDB 1. ト...

独自の FTP および SFTP サーバーを構築するプロセスの紹介

FTP と SFTP はファイル転送プロトコルとして広く使用されています。関連する機能を開発するには...

WeChat アプレット uniapp は左スワイプによる削除効果を実現します (完全なコード)

WeChatアプレットuniappは左スワイプで削除効果を実現成果を達成する1. スワイプしてリス...

Docker+K8S+GitLab/SVN+Jenkins+Harbor をベースにした継続的インテグレーション配信環境の構築に関する詳細なチュートリアル

目次環境設定の概要1.K8Sとは何ですか? 2. K8S を使用する理由3. K8S を使用する利点...