よっしー
こんにちは。よっしーです(^^)
今日は、DockerでMySQLの開発環境を構築する方法についてご紹介します。
背景
MySQLの開発環境をDockerで構築する機会があったので、そのときの内容を備忘として残しています。
この記事のベースとなっている環境については、下記の記事を御覧ください。
各種ログの設定
下記の4つのログを設定していきます。本記事では、バイナリログについて記載しています。それ以外のログ設定は、次回の記事以降に記載していきます。
・一般クエリの実行ログ(General query log)
・スロークエリの発生ログ(Slow query log)
・バイナリログ(Binary log)
・エラーログ(Error log)
バイナリログは、MySQLデータベースの変更を記録するための重要な仕組みです。以下に詳細を説明します。
- バイナリログとは:
- バイナリログは、テーブル作成操作やテーブルデータへの変更などのデータベース変更を記述する「イベント」が格納されます。
- 例えば、CREATEやUPDATEなどのステートメントが記録されます。
- データを変更しないSELECTやSHOWなどのステートメントではバイナリログは使用されません。
- 目的:
- レプリケーションの場合、マスターサーバー上のバイナリログは、レプリカに送信されるデータ変更のレコードを提供します。レプリカはこれらのトランザクションを再現して、ソースで行われたものと同じデータ変更を行います。
- データリカバリの際にもバイナリログが必要です。バックアップがリストアされた後、バックアップが実行された後に記録されたバイナリログ内のイベントが再実行され、データベースをバックアップのポイントから最新の状態に持って行きます。
- 保存形式:
- バイナリログには3つの保存形式があります:
- STATEMENT: SQLステートメントを記録します。
- ROW: 行ベースの変更を記録します。
- MIXED: STATEMENTとROWの組み合わせです。
- バイナリログには3つの保存形式があります:
- 注意点:
- バイナリロギングを有効にすると、パフォーマンスが低下することがありますが、レプリケーションやデータリカバリの利点は重要です。
- バイナリログ内のパスワードはプレーンテキストでないようにサーバーによって書き換えられます。
- MySQL 8.0.14以降では、バイナリログファイルとリレーログファイルを暗号化できるため、潜在的機密データを保護できます。
バイナリログは、データベースの信頼性とセキュリティに欠かせない要素です。
修正ファイル一覧
下記のファイルを作成、修正しました。ファイルの内容は次のセクションに記載しています。
new file: mysql_server/log.cnf
mysql_server/log.cnf
下記の緑の箇所を追記します。
+# バイナリーログ
+server-id=1
+log-bin=/var/log/mysql/bin.log
+log_bin_index=/var/log/mysql/bin.list
+max_binlog_size=256M
+expire_logs_days=2
+
+# GTID enable
+gtid_mode=ON
+enforce-gtid-consistency
+
+# Related settings
+innodb_flush_log_at_trx_commit=1
+sync_binlog=1
+sysdate_is_now
この設定ファイルは、MySQLのバイナリーログに関連するいくつかの重要な設定を示しています。以下に各行の意味と役割を説明します:
- server-id=1:
- この設定は、MySQLサーバーの識別番号を指定します。レプリケーションの際にマスターサーバーとスレーブサーバーを識別するために使用されます。
- log-bin=/var/log/mysql/bin.log:
- この行は、バイナリーログの出力先ファイルを指定しています。バイナリーログはデータベースの変更を記録するためのファイルであり、ここに記録されます。
- log_bin_index=/var/log/mysql/bin.list:
- バイナリーログのインデックスファイルのパスを指定しています。インデックスファイルはバイナリーログファイルの一覧を保持し、管理のために使用されます。
- max_binlog_size=256M:
- バイナリーログファイルの最大サイズを指定しています。ここでは256メガバイトを設定しています。ファイルサイズがこの閾値を超えると新しいバイナリーログファイルが作成されます。
- expire_logs_days=2:
- バイナリーログの保存期間を指定しています。この設定では2日間のログを保持するようになります。
- gtid_mode=ON:
- GTID (Global Transaction Identifier) モードを有効にしています。GTIDはトランザクションを一意に識別するための仕組みであり、レプリケーションにおいて重要です。
- enforce-gtid-consistency:
- GTIDを使用する際に、トランザクションの整合性を強制する設定です。
- innodb_flush_log_at_trx_commit=1:
- InnoDBストレージエンジンの設定で、トランザクションのコミット時にログをフラッシュするかどうかを指定しています。
- sync_binlog=1:
- バイナリーログの同期を制御する設定です。1は同期を意味し、トランザクションが完了する前にログをディスクに書き込むことを保証します。
- sysdate_is_now:
- この行は、特定の設定を示していません。おそらくカスタム設定やアプリケーション固有の設定です。
これらの設定は、データベースの信頼性、レプリケーション、およびデータリカバリの側面で重要です。
動作確認
下記のコマンドを実行します。
make build
make up
make login_mysql_server
mysql -uroot -p
ls /var/log/mysql
下記の結果が出力されていれば成功です。
sh-4.4# ls /var/log/mysql
bin.000001 bin.000002 bin.000003 bin.list general.log slow_query.log
バイナリログの使い方については、別の記事にしたいと思います。
おわりに
今日は、DockerでMySQLの開発環境を構築する方法についてご紹介しました。
よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント