いわマン備忘録

備忘録とちょっとした設定メモや小ネタをUPしたいと思っております。

MySQL準同期レプリケーション(Semisynchronous Replication)

###
### サーバ構成
###

# Server1 (Web + Mail Server)
# IP:192.168.0.2

# Server2 (DB Server)
# IP:192.168.0.3


###
### マスター側の設定(Server2:192.168.0.3)
###

# レプリケーションユーザの作成
# 「'@'%'」で全てのユーザー、限定する場合は「'@'IPアドレス'」
# ファイアウォールMySQLのポート接続を限定してもOKだと思います。

mysql> GRANT REPLICATION SLAVE ON *.* TO 'ユーザー'@'%' IDENTIFIED BY 'パスワード';
mysql> FLUSH PRIVILEGES;


# MySQLマスター用の設定

vi /etc/my.cnf

---(下記を追加)---------------------------

[mysqld]
(略)

# サーバIDの設定
# 「1」とかでも良いが、よく「1、2」とかは使われることが多いから別のIDの方が無難

# サーバIDの設定
server-id = 101

# バイナリログの有効化
sync_binlog = 1
log-bin = /var/lib/mysql/bin-log

# 準同期レプリケーション用のプラグインを有効化
# デフォルトで記載があるのでコメントアウトを外す
# マスターとスレーブがあるからご注意

plugin-load=rpl_semi_sync_master=semisync_master.so

# 準同期レプリケーションの有効化
# デフォルトで記載があるのでコメントアウトを外す

rpl_semi_sync_master_enabled=1

# スレーブが応答しない場合のタイムアウトの設定(単位はms)
# デフォルトで記載があるのでコメントアウトを外す
rpl_semi_sync_master_timeout=10

# MySQLを再起動
service mysqld restart

# マスター側のダンプ
# ダンプデータをスレーブ側へコピー
mysqldump -u root -p --events --all-databases > all_db_dump.sql

 

###
### スレーブ側の設定(Server2:192.168.0.2)
###

# MySQLスレーブ用の設定

vi /etc/my.cnf

---(下記を追加)---------------------------

[mysqld]
(略)

# サーバIDの設定
# マスター側よりIDを大きくすること
server-id = 102

# バイナリログの有効化
sync_binlog = 1
log-bin = /var/lib/mysql/bin-log

# 準同期レプリケーション用のプラグインを有効
# デフォルトで記載があるのでコメントアウトを外す
# マスターとスレーブがあるからご注意
plugin-load=rpl_semi_sync_slave=semisync_slave.so

# 準同期レプリケーションの有効化
# デフォルトで記載があるのでコメントアウトを外す
rpl_semi_sync_slave_enabled=1

# 更新禁止設定
# rootだとこの設定をしていても更新できてしまうので注意
read_only

# マルチスレーブ
slave_parallel_workers=512

# relay-logを明示的に指定
relay-log=mysqld-relay-bin
relay-log-index=mysqld-relay-bin
relay-log-info-repository=relay-log.info
master-info-repository=master.info

------------------------------


# マスターDBをコピー
mysql -u root -p < all_db_dump.sql

# MySQLを再起動
service mysqld restart

# マスター側でコマンドを実行しバイナリファイルとポジションIDを確認
mysql> SHOW MASTER STATUS;

# 例)
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+


# レプリケーション設定
mysql -u root -p

---(下記を実行)---------------------------
CHANGE MASTER TO
MASTER_HOST='マスターのIPアドレス',
MASTER_PORT=ポート,
MASTER_USER='ユーザー',
MASTER_PASSWORD='パスワード',
MASTER_LOG_FILE='バイナリファイル名',
MASTER_LOG_POS=ポジションID;
\q
------------------------------------------

# マスター情報のファイルが作成されます
less /var/lib/mysql/master.info

# レプリケーションを開始
mysql> START SLAVE;
mysql> RESET SLAVE;
mysql> STOP SLAVE;


# スレーブの状態を確認
mysql> SHOW SLAVE STATUS\G

# この記載があればOK
(略)
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
(略)