概要
MariaDBのレプリケーションは、データベースの可用性とスケーラビリティを向上させるための重要な機能です。プライマリサーバ(マスター)から1台以上のレプリカサーバ(スレーブ)へデータ変更を自動的に伝搬させ、読み取り負荷の分散や障害時のフェイルオーバーを実現します。
レプリケーションの種類
マスタ―スレーブレプリケーション
最も一般的な構成で、1つのマスターが全ての書き込みを受け取り、複数のスレーブがマスターのバイナリログを取得して自分のデータを同期します。
マルチマスターレプリケーション
複数のサーバがマスターとして機能し、相互にデータをコピーします。高度な設定と競合回避策が必要です。
レプリケーションの主な構成要素
- バイナリログ(binary log):マスターが行った全ての変更を記録。
- レプリケーションユーザー:スレーブがマスターに接続するための権限を持つユーザー。
- レプリケーションフィルタ:特定のデータベースやテーブルだけをレプリケーション対象にする設定。
- relay log:スレーブが取得したバイナリログの一時保存領域。
基本的な設定手順(マスタ―スレーブ)
1. マスター側の設定
# /etc/my.cnf または /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
log_bin = mariadb-bin
binlog_format = ROW # 推奨設定
server_id = 1 # 任意のユニークなID
設定変更後、MariaDB を再起動し、バイナリログが有効になっていることを確認します。
2. レプリケーションユーザーの作成
CREATE USER 'repl'@'%' IDENTIFIED BY 'StrongPassword!123';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
3. スレーブ側の設定
# /etc/my.cnf または /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
server_id = 2 # マスターと重複しないID
relay_log = relay-log
log_bin = mariadb-bin # 必要に応じて有効化
スレーブを再起動した後、マスターへの接続情報を設定します。
4. スレーブにレプリケーション開始指示
CHANGE MASTER TO
MASTER_HOST='master.example.com',
MASTER_USER='repl',
MASTER_PASSWORD='StrongPassword!123',
MASTER_LOG_FILE='mariadb-bin.000001',
MASTER_LOG_POS=4;
START SLAVE;
設定が正しく行われたかは以下のコマンドで確認できます。
SHOW SLAVE STATUS\G
重要な項目は Slave_IO_Running と Slave_SQL_Running が両方とも Yes であることです。
トラブルシューティングのポイント
- バイナリログが無効化されていないか確認する。
- サーバーIDが重複していないかチェックする。
- レプリケーションユーザーのパスワードやホスト制限が正しいか確認する。
- エラーログ(/var/log/mariadb/mariadb.log)に具体的なエラーメッセージが出力されていないか確認する。
まとめ
MariaDB のレプリケーションは、正しい設定と定期的なモニタリングさえ行えば、データの冗長化や読み取り負荷分散を容易に実現できます。まずはマスタ―スレーブ構成で基本を押さえ、要件に応じてマルチマスターやGTIDベースのレプリケーションへと拡張していくことをおすすめします。