1. マスタースレーブ構成の基本概念
マスタースレーブ構成では、マスターサーバーが書き込み操作(INSERT, UPDATE, DELETE)を担当し、スレーブサーバーが読み取り操作(SELECT)を担当します。これによりデータベースの読み書き分離が実現されます。
2. 環境準備
2.1 ファイアウォールとSELinuxの無効化
# ファイアウォール停止
systemctl stop firewalld
systemctl disable firewalld
# SELinux無効化
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
2.2 Dockerのインストール
オンラインまたはオフライン環境に応じてDockerをインストールします。
3. MySQLコンテナの起動
3.1 MySQLイメージの取得
docker pull mysql:5.7
3.2 コンテナの実行
# マスターサーバー
docker run --name db-primary -p 3339:3306 --privileged=true \
-e MYSQL_ROOT_PASSWORD=rootpass --restart=unless-stopped -d mysql:5.7
# スレーブサーバー
docker run --name db-replica -p 3340:3306 --privileged=true \
-e MYSQL_ROOT_PASSWORD=rootpass --restart=unless-stopped -d mysql:5.7
4. レプリケーション設定
4.1 マスターサーバー設定
# my.cnf設定
[mysqld]
server-id=1
log-bin=mysql-bin
4.2 スレーブサーバー設定
# my.cnf設定
[mysqld]
server-id=2
relay_log=mysql-relay-log
4.3 レプリケーション接続設定
# マスターサーバーでレプリケーション用ユーザー作成
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'replpass';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl_user'@'%';
# スレーブサーバーで接続設定
CHANGE MASTER TO
MASTER_HOST='マスターIP',
MASTER_USER='repl_user',
MASTER_PASSWORD='replpass',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154,
MASTER_CONNECT_RETRY=30;
START SLAVE;
4.4 レプリケーション状態確認
SHOW SLAVE STATUS \G
Slave_IO_RunningとSlave_SQL_Runningが共にYesになっていることを確認します。
5. トラブルシューティング
5.1 接続エラー
Slave_IO_RunningがConnecting状態の場合は、以下の点を確認します:
- ネットワーク接続
- 認証情報の正確性
- ログファイル位置の整合性
5.2 レプリケーションエラー
エラー発生時の対処方法:
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;