製品

Percona

pt-slave-delay

コマンド

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;