MySQL スレーブで SQL スレッドが停止した場合の対処方法

提供:maruko2 Note.
移動: 案内, 検索

MySQL スレーブで SQL スレッドが停止(Slave_SQL_Running: No)した場合、次のような対処方法がある。

mysql> show slave status\G
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                           省略
              Relay_Log_Pos: 13550246
      Relay_Master_Log_File: mysql-bin.000010
           Slave_IO_Running: Yes
          Slave_SQL_Running: No
                           省略
                 Last_Errno: 1062
                 Last_Error: Error 'エラー内容'
                           省略

目次

対処方法1

エラー内容を確認し、その SQL をスキップしてもよいと判断できるならば、次の SQL を実行しエラーをスキップする。

mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
mysql> START SLAVE;

対処方法2

それでもエラーになる場合は、my.cnf に次のような記述をし mysqld を再起動することで、エラーを強制的にスキップする。(指定したエラーがでても、レプリケーションを続行するように SQL スレッドに指示する。)

slave-skip-errors= には、Last_Errno: の数字を記述する。

[mysqld]
slave-skip-errors=1062

SQL スレッドが動くようになると Slave_SQL_Running: Yes となり、エラーになっていた SQL 文以降の SQL 文が実行され Relay_Log_Pos: が増えていることが確認できる。

mysql> show slave status\G
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                           省略
              Relay_Log_Pos: 136324962
      Relay_Master_Log_File: mysql-bin.000010
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
                           省略
                 Last_Errno: 0
                           省略

関連ページ

MySQL レプリケーションの設定

MySQL 関連のページ

LINEで送る このエントリーをはてなブックマークに追加
個人用ツール
名前空間
変種
表示
操作
案内
ツールボックス

注目のページ

このサイトのはてなブックマーク数