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 |
+---------------+----------+--------------+------------------+
---(下記を実行)---------------------------
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
(略)