データベース · 1 min read · Sep 27, 2025

MySQL マスターマスターレプリケーション

MySQL マスターマスターレプリケーションチュートリアル

このチュートリアルでは、MySQLマスターマスターレプリケーションの設定方法について説明します。高可用性(HA)を実現するためにMySQLサーバーをレプリケートする必要があります。私の場合、2つのマスターが互いに同期している必要があります。1つがダウンした場合、もう1つが引き継ぎ、データが失われないようにします。同様に、最初のものが再び起動すると、ライブのもののスレーブとして使用されます。

ここでは、mysqlのマスターとスレーブのレプリケーションをカバーし、mysqlのマスターとマスターのレプリケーションについて説明する基本的なステップバイステップのチュートリアルを示します。

概念: システム1をmaster1およびslave2、システム2をmaster2およびslave1と呼びます。

ステップ 1:

master 1およびslave 1にmysqlをインストールします。両方のシステムでネットワークサービスを構成します。

Master 1/Slave 2 IP: 192.168.16.4

Master 2/Slave 1 IP: 192.168.16.5

ステップ 2:

Master 1で、my.cnfに変更を加えます:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1

log-bin
binlog-do-db=<データベース名> # レプリケートするデータベースを入力
binlog-ignore-db=mysql # レプリケーションのために無視するデータベースを入力
binlog-ignore-db=test

server-id=1

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

ステップ 3:

master 1で、mysqlにレプリケーションスレーブアカウントを作成します。

mysql> grant replication slave on . to ‘replication’@192.168.16.5 \
identified by ‘slave’;

そして、mysql master1を再起動します。

ステップ 4:

次に、Slave1またはMaster2のmy.cnfを編集します:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1

server-id=2

master-host = 192.168.16.4
master-user = replication
master-password = slave
master-port = 3306

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

ステップ 5:

mysqlスレーブ1を再起動し、次のコマンドを実行します。

mysql> start slave;
mysql> show slave status\G;

* 1. row *

Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.16.4
Master_User: replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: MASTERMYSQL01-bin.000009
Read_Master_Log_Pos: 4

Relay_Log_File: MASTERMYSQL02-relay-bin.000015

Relay_Log_Pos: 3630
Relay_Master_Log_File: MASTERMYSQL01-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4
Relay_Log_Space: 3630
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 1519187

1 row in set (0.00 sec)

上記のハイライトされた行は、関連するログファイルを示し、Slave_IO_RunningおよびSlave_SQL_Running:はYESでなければなりません。

ステップ 6:

master 1で:

mysql> show master status;
+————————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+————————+———-+————–+——————+
|MysqlMYSQL01-bin.000008 | 410 | adam | |
+————————+———-+————–+——————+
1 row in set (0.00 sec)

上記のシナリオはマスター-スレーブ用です。次に、同じシステムのスレーブマスターシナリオを作成し、マスターマスターとして機能します。

ステップ 7:

Master2/Slave 1で、my.cnfを編集し、マスターエントリを追加します:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

old_passwords=1
server-id=2

master-host = 192.168.16.4
master-user = replication
master-password = slave
master-port = 3306

log-bin #マスターになるための情報を追加
binlog-do-db=adam

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

ステップ 8:

** master1のためにmaster2でレプリケーションスレーブアカウントを作成します:

mysql> grant replication slave on *.* to 'replication'@192.168.16.4 identified by 'slave2';

ステップ 9:

** master1のためにそのマスターの情報をmy.cnfで編集します。

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

old_passwords=1

log-bin
binlog-do-db=adam
binlog-ignore-db=mysql
binlog-ignore-db=test

server-id=1
#スレーブになるための情報。
master-host = 192.168.16.5
master-user = replication
master-password = slave2
master-port = 3306

[mysql.server]user=mysqlbasedir=/var/lib

ステップ 10:

mysql master1とmaster2の両方を再起動します。

mysql master1で:

mysql> start slave;

mysql master2で:

mysql > show master status;

mysql master 1で:

mysql> show slave status\G;

* 1. row *
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.16.5
Master_User: replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: Mysql1MYSQL02-bin.000008
Read_Master_Log_Pos: 410
Relay_Log_File: Mysql1MYSQL01-relay-bin.000008
Relay_Log_Pos: 445
Relay_Master_Log_File: Mysql1MYSQL02-bin.000008
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 410
Relay_Log_Space: 445
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 103799
1 row in set (0.00 sec)

ERROR:
No query specified

ハイライトされた行を確認し、実行中であることを確認してください。これでデータベースにテーブルを作成でき、スレーブに変更が表示されます。楽しんでください!!

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。