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

推薦する

iframe でページを開く方法

解決:リンクのターゲット属性値をターゲット フレームワーク名と同じに設定するだけです。具体的な手順:...

MYSQLは、ショッピングカートに追加する際に重複追加を防ぐためのサンプルコードを実装します。

序文最近、仕事の都合で、APP ショッピングカートの注文支払いに取り組んでいました。テスト中にバグが...

JavaScript でウェブ プレーヤーを実装する

今日は、JavaScript を使用して Web ページ上にプレーヤーを作成する方法を紹介します。誰...

ES6拡張演算子の理解と使用シナリオ

目次1. 適用メソッドを置き換え、関数を呼び出すときにパラメータを処理する2. 残りパラメータ(残り...

HTMLページにビデオを挿入する方法の概要

ページでビデオ タグを使用する場合は、Ogg Theora または VP8 (これに問題がない場合)...

node.jsミドルウェアの種類についての簡単な説明

目次概要1. アプリケーションレベルのミドルウェア2. 組み込みミドルウェア3. サードパーティミド...

Linux でシェル スクリプトを使用して jar パッケージ プロジェクトを展開するための完全な手順

1. JDKをインストールする コンピュータの動作桁を確認します。 uname -ar 2017 x...

Vue はフォームデータ検証のサンプルコードを実装します

el-form フォームにルールを追加します。データにルールを定義する定義されたルールをel-for...

Win10 DVWA のダウンロード、インストール、構成のグラフィック チュートリアルの詳細な説明 (初心者向け学習侵入)

コンピュータ システムが再インストールされ、侵入テスト学習環境 DVWA を再インストールする必要が...

Windows 10 での Hyperledger Fabric 1.4 環境構築プロセスの図

内容Hyperledger fabric1.4環境のWindows 10でのセットアップ前提条件Wi...

Windows で Mysql を起動したときに 1067 が表示される場合の解決策

数日前に仕事を始めて、Mysql をインストールしたところ、開くことができました。今日、会社に行った...

フローティング要素が親要素の高さを崩す原因と解決策の詳細な説明

フローティング要素は、親要素の高さを縮小します。要素を float float:left/right...

MySQL explain クエリ命令情報の取得原理と例

explain はクエリ実行プラン情報を取得するために使用されます。 1. 文法次のように、sele...

js の hasOwnProperty のプロパティとインスタンスの使用法の詳細な説明

1. js は hasOwnProperty が不正に占有されることから保護しません。オブジェクトに...

Docker の MySQL 時間とシステム時間の不一致の問題を解決する

最近、Docker に MySQL をインストールしたところ、データベースの時刻がシステム時刻と 8...