数日前、MariaDB(またはMySQL)でレプリケーションを行う方法についてのチュートリアルを書きました。これは一方向のレプリケーションです。マスターからスレーブへ。これは、スレーブサーバーがマスターからトランザクションを受信することを意味します。ただし、どちらのサーバーがトランザクションを受信するかわからず、両方に同じデータが存在する必要があるため、クライアントには双方向レプリケーションが必要です。ここでは、これを実現するためにMariaDBを使用してマスターマスターレプリケーションを構成する方法を示します。
マイセットアップ
前の記事を見逃した場合に備えて、これらは私がこのレプリケーションを実行している仮想マシンの機能です。
- OS:Debianテスト「Bookworm」
- MariaDBバージョン:10.5.12
- マスター1:192.168.122.13
- マスター2:192.168.122.223
マスター構成
両方のマスターが同じ構成を取得します。edit /etc/mysql/mariadb.conf.d/50-server.cnf
次の値を置き換えます:
bind-address = <master.X.ip.address> server-id = <X> report_host = masterX log_bin = /var/log/mysql/mysql-bin.log relay_log = /var/lib/mysql/relay-bin relay_log_index = /var/lib/mysql/relay-bin.index log-slave-updates auto_increment_increment=2 auto_increment_offset=X
ここで、Xは最初のマスターの場合は1、2番目のマスターの場合は2です。
自動インクリメント値は、id-kindフィールドで、マスターの1つが常に偶数を取得し、もう1つが常に奇数を取得することを意味します。これは、まったく同じID番号が両方のマスターに同時に割り当てられるのを防ぐためです。

次に、mariadbサービスを再起動し、mysqlにログインして、レプリケーション権限を持つユーザー(esclavoはスペイン語でスレーブを意味します)を作成します。
CREATE USER 'esclavo1'@'ip.mysql.master.2' IDENTIFIED BY 'SlavePass' ; GRANT REPLICATION SLAVE ON *.* TO 'esclavo1'@'ip.mysql.master.2'; FLUSH PRIVILEGES;
それに応じて情報を変更する両方のマスターで繰り返します(つまり、master2でユーザー [email protected]を作成します )。ただし、最初に、最初のマスターのSQLダンプを取得し、2番目のマスターにロードします。
master1: mysqldump -u root --all-databases -p --master-data > data.sql master2: mysql -uroot < data.sql
次に、他のホストでスレーブモードを有効にするために必要なこのマスターに関する情報を取得します。
MariaDB [(none)]> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003| 358 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.000 sec) STOP SLAVE;

スレーブ構成
次に、両方のmariadb/mysqlホストでスレーブモードを構成します。
CHANGE MASTER TO MASTER_HOST='ip.mysql.master.X', MASTER_USER='esclavoX',MASTER_PASSWORD='SlavePass MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS = 358'; START SLAVE;
master_host vauleは他のマスターのIPであり、master_user値は他のマスターで作成したユーザーであり、最後にshow master sta
からmaster_log_fileとmaster_log_postの値を取得します。 tusコマンド。
すべてをチェックする
MariaDBでマスターマスターレプリケーションを有効にできるかどうかを確認するために、いくつかの非常に簡単なテストを実行しました。
1つのマスターでデータベースを作成し、次に単純なテーブル(1つのフィールドのみ)を作成して、いくつかのレコードを挿入しました。次に、データが両方のホストに表示されることを選択して確認しました。最後に、1つのホストにid自動増分列を追加し、それがどのように表示されるかを確認するためにさらにデータを挿入しました。


これらのスクリーンショットにさらに混乱を加えるために、このテスト中にauto_increment構成(インクリメントとオフセット)をmy.cnfに追加しました。これは、テストを開始するまで知らなかったためです。
とにかく、これは私がMariaDBでマスターマスターレプリケーションを有効にした方法です。これはスレーブスレーブレプリケーションでもあります。またはマスタースレーブおよび スレーブマスターレプリケーション、あなたはそれに名前を付けます。
次の論理的なステップは、GaleraClusterを調査して使用することだと思います。