製品&サポートサービス

pt-slave-restart

コマンド

pt-slave-restart [オプション] [DSN]

【必須項目】

  • ・ [ オプション ] : -p パスワード

【主なオプション】

  • ・ [ DSN ] : h=ホスト名, u=ユーザー名(デフォルトではそれぞれlocalhost, root)

※ここで指定するDSNはスレーブ側のものを使用します

目的

レプリケーションの Slave を監視して、エラー等により停止した場合に自動的に再起動を試みます

シナリオ

マスター側に以下のようなテーブルを用意します(スレーブ側にも同テーブルがレプリケーションされます)

mysql> CREATE TABLE `test001` (`id` int(11) DEFAULT NULL) \
ENGINE=InnoDB DEFAULT CHARSET=utf8;

スレーブ側のテーブルにPRIMARY KEY 制約をつけます

mysql> ALTER TABLE test001 ADD PRIMARY KEY(id);

スレーブ側のコンソール画面から、以下のコマンドを実行します

# pt-slave-restart -u root -ppassword

マスター側で以下のSQLを実行し、意図的にスレーブ側でキー重複エラーを起こします

mysql> INSERT INTO test001(id) VALUES(1);
mysql> INSERT INTO test001(id) VALUES(1);

結果

スレーブ側で、レプリケーションのエラーが発生します

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.11.50
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000020
          Read_Master_Log_Pos: 38232509
               Relay_Log_File: mysql-relay-bin.000003
                Relay_Log_Pos: 1737
        Relay_Master_Log_File: mysql-bin.000020
             Slave_IO_Running: Yes
            Slave_SQL_Running: No

                            (省略)

                   Last_Errno: 1062
                   Last_Error: Error 'Duplicate entry '1' for key 'PRIMARY'' on query. Default database: 'test'. Query: 'INSERT INTO test001(id) VALUES(1)'

※スレーブ側のみPRIMARYキーが設定されているため、重複したデータをINSERT出来ずエラーが発生する

その後、pt-slave-restart が動作します

[Et@localhost ~]$ pt-slave-restart -u root -ppassword
2017-04-10T18:34:27 u=root mysql-relay-bin.000003        1737 1062

エラーの原因となる処理がスキップされ、レプリケーションが正常に継続されます

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.11.50
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000020
          Read_Master_Log_Pos: 38232509
               Relay_Log_File: mysql-relay-bin.000003
                Relay_Log_Pos: 1954
        Relay_Master_Log_File: mysql-bin.000020
             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: 38232509

良い点

レプリケーション中にエラーが生じても、その処理をスキップしてくれるので、レプリケーションの停止を防ぐことができます

MySQLや関連ソリューションに関するお問い合わせ、お見積などがございましたら、ご連絡ください。

お問い合わせ各MySQL保守サービス見積依頼スマートスタイルOSSストア
各データベース保守サービス比較
各データベース保守サービス見積依頼
契約条項
データベースサポートサービス
MySQL Editions
Oracle Cloud
Percona
MariaDBサブスクリプション
エンタープライズOSSサポート
高可用性ソリューション
OSSシステムソリューション
Navicat
SQL Diagnostic Manager for MySQL
SYNCNEL
OSS保守サポートサービス
Microsoft Azure
お問い合わせ
各MySQL保守サービス見積依頼
スマートスタイルOSSストア
Oracle Gold Partner

ページトップへ