CentOS 環境における MariaDB マスター・スレーブ レプリケーション構築ガイド

導入とバージョン互換性について

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;

出力結果から FilePosition の値を控えてください(例: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: YES
  • Slave_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 を実行して設定をリセットすることが一般的な対処法となります。

8月26日 13:30 投稿