MariaDBのレプリケーション入門

—

by

in

概要

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ベースのレプリケーションへと拡張していくことをおすすめします。