データベース · 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
ハイライトされた行を確認し、実行中であることを確認してください。これでデータベースにテーブルを作成でき、スレーブに変更が表示されます。楽しんでください!!
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。