コマンド
pt-slave-delay [ オプション ] [ スレーブのホスト名 ] [ マスタのホスト名 ]
【必須項目】
- ・ [ オプション ] : -p パスワード
- ・ スレーブのホスト名 : スレーブサーバのホスト名を指定します
【主なオプション】
- ・ –delay : レプリケーションを遅延させる秒数を指定します(デフォルトでは1時間です)
- ・ –interval : スレーブの停止・起動を判断する間隔を指定します(デフォルトで1分です)
- ・ –run-time : コマンドを実行する秒数を指定します(デフォルトでは Ctrl – C するまで動作し続けます)
目的
指定した条件でスレーブサーバを停止・起動させ、レプリケーションを意図的に遅延させます
設定ファイル
必須オプションを、設定ファイルにまとめておきます
# touch /etc/percona-toolkit/pt-slave-delay.conf
# vi /etc/percona-toolkit/pt-slave-delay.conf
・設定ファイルの作成
# touch /etc/percona-toolkit/pt-slave-delay.conf
・設定ファイルの編集
# vi /etc/percona-toolkit/pt-slave-delay.conf
# config for pt-slave-delay
password=スレーブ側のMySQLのパスワード
シナリオ
スレーブ側で以下のコマンドを実行し90秒間、レプリケーションを60秒遅延させます
# pt-slave-delay --delay 60 --interval 30 --run-time 90 localhost
マスタ側で以下のSQL文を実行します
mysql> CREATE TABLE delay_test(id int);
スレーブ側で以下のSQL文を実行します
mysql> SHOW TABLES;
コンソールに以下のような文章が表示されたら、もう一度スレーブ側で”SHOW TABLES;”を実行します
[root@localhost percona-toolkit]# pt-slave-delay --delay 60 --interval 30 --run-time 90 localhost
2017-04-10T16:22:18 slave running 0 seconds behind
2017-04-10T16:22:18 STOP SLAVE until 2017-04-10T16:23:18 at master position mysql-bin.000020/38230402
2017-04-10T16:22:48 slave stopped at master position mysql-bin.000020/38230507
2017-04-10T16:23:18 no new binlog events
2017-04-10T16:23:48 START SLAVE until master 2017-04-10T16:22:48 mysql-bin.000020/38230507
2017-04-10T16:23:48 Setting slave to run normally
結果
スレーブ側でレプリケーション遅延が発生していることが確認できます
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| articles |
+----------------+
1 row in set (0.00 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| articles |
| delay_test |
+----------------+
2 rows in set (0.00 sec)
mysql>
※コマンド終了時点では、スレーブサーバのスレーブモードは停止した状態になります
そのため、コマンド終了後、以下を実行しスレーブモードを開始する必要があります
mysql> START SLAVE;
※遅延する時間は、「–delayで指定した時間」 から 「–delay + –interval」 の間で推移します
良い点
マスタサーバのオペレーションミス等によるデータの反映を遅延させる事により、スレーブサーバへの被害を最小限に抑える事ができます
その他
MySQL5.6以降では、以下のSQL文でpt-slave-delayコマンドと同様の機能が実現できます
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO MASTER_DELAY=60;
mysql> START SLAVE;