導入とバージョン互換性について
MariaDB(MySQL)のマスター・スレーブ構成を構築する際、異なるバージョン間でのバイナリログ(binlog)フォーマットの差異に注意する必要があります。原則として、スレーブノードのバージョンはマスターノードと同じか、それより新しいものであることが推奨されます(下位互換性の確保)。本稿では CentOS 7 上で動作する MariaDB 5.5 を対象として、具体的な設定手順を解説します。
構築環境の概要
以下のネットワーク構成およびバージョン情報に基づいて設定を進めます。
- マスターサーバー: CentOS 7 (64bit) / IP: 10.20.30.10 / MariaDB 5.5.50
- スレーブサーバー: CentOS 7 (64bit) / IP: 10.20.30.20 / MariaDB 5.5.50
データベースおよびユーザーの準備
マスターおよびスレーブ両方のインスタンスで同期用のデータベースを作成します。
mysql -u root -p
CREATE DATABASE sync_target DEFAULT CHARACTER SET utf8mb4;
次に、マスター側の MariaDB にログインし、スレーブ用アカウントを作成して権限を付与します。
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'10.20.30.20' IDENTIFIED BY 'SecurePass#2024';
FLUSH PRIVILEGES;
設定変更のため、マスターサービスのみを再起動します。
systemctl restart mariadb
マスターノードの設定
マスター側の設定ファイル /etc/my.cnf 内の [mysqld] セクションに以下のパラメータを追加します。
[mysqld]
server-id = 1
log-bin = mysql-bin
log-slave-updates = 1
binlog-do-db = sync_target
binlog-ignore-db = mysql
binlog-ignore-db=mysql はシステム管理データを同期から除外するための設定です。設定後、マスターのステータスを確認し、現在のログファイル名とポジショングを取得します。
SHOW MASTER STATUS;
出力結果から File と Position の値を控えてください(例:File=binlog.000003, Position=154)。
スレーブノードの設定
スレーブ側でも同様に /etc/my.cnf を編集します。
[mysqld]
server-id = 2
log-bin = mysql-bin
relay-log = mysql-relay-bin
read-only = 1
log-slave-updates = 1
replicate-do-db = sync_target
read-only=1 は管理者権限以外からの直接書き込みを防止します。設定完了後にスレーブサービスを再起動してください。
systemctl restart mariadb
レプリケーションリンクの確立
スレーブ側でマスターへの接続情報を設定し、同期を開始します。先ほど取得したマスターのログ位置情報を記載します。
CHANGE MASTER TO
MASTER_HOST='10.20.30.10',
MASTER_USER='replicator',
MASTER_PASSWORD='SecurePass#2024',
MASTER_PORT=3306,
MASTER_LOG_FILE='binlog.000003',
MASTER_LOG_POS=154,
MASTER_CONNECT_RETRY=10;
START SLAVE;
同期状態の確認と検証
コマンド SHOW SLAVE STATUS\G を実行し、以下の二つの項目が YES になっていることを確認してください。
Slave_IO_Running: YESSlave_SQL_Running: YES
データ同期のテストとして、マスター側の sync_target データベースでテーブルを作成し、データを挿入します。
USE sync_target;
CREATE TABLE sample_data (id INT, message VARCHAR(50));
INSERT INTO sample_data VALUES (1, 'Sync Test A');
INSERT INTO sample_data VALUES (2, 'Sync Test B');
スレーブ側で same テーブルの内容を照会し、データが存在することを確認すれば構成成功となります。
SELECT * FROM sample_data;
主要なレプリケーションパラメータ解説
運用中に重要となるいくつかの設定項目について説明します。
- log-slave-updates
- スレーブで発生した更新を自身のバイナリログに記録するか指定します。カスケード構成(スレーブが別のスレーブのマスターになる場合)で必須です。
- master-connect-retry
- マスター接続切断時に再試行を行う間隔(秒)を定義します。デフォルトは 60 秒ですが、接続状況に応じて調整可能です。
- read-only
- 通常ユーザーによるスレーブへのデータ変更を制限しますが、ROOT など権限を持つユーザーは例外扱いとなる点に注意が必要です。
- slave-skip-errors
- 特定のエラーコードを無視して複製を継続させる設定です(例:
slave-skip-errors=1062,1032)。データの整合性が損なわれるリスクがあるため、安易な使用は避けるべきです。
ステータス監視の詳細
SHOW SLAVE STATUS 出力に含まれる重要なフィールドの意味は以下の通りです。
- MASTER_LOG_FILE / MASTER_LOG_POS: スレーブ IO スレッドがマスターから次回の起動時に読み取り始めるバイナリログの座標。
- RELAY_LOG_FILE / RELAY_LOG_POS: スレーブ SQL スレッドがリレーログから処理を再開する位置。
- MASTER_BIND: 複数のネットワークインターフェースがある場合に、マスターとの通信に使用する IP アドレスを指定可能。
- MASTER_DELAY: マスターからのイベント実行を意図的に遅延させる秒数。
- Last_IO_Error / Last_SQL_Error: 复制プロセスで最後に発生したエラーの詳細内容。
トラブルシューティング時はこれらのエラーメッセージを参照し、RESET SLAVE ALL を実行して設定をリセットすることが一般的な対処法となります。