SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【MySQL】エラーで止まっているレプリケーションを再開する

問題

実行できないSQLがあったみたいで、レプリケーションが止まっています。どうしたらよいですか。

151216  6:31:44 [ERROR] Slave SQL: Error 'Query execution was interrupted' on query. Default database: 'example_database'. Query: 'ALTER TABLE temp_hoge_fuga
    ADD PRIMARY KEY (`id`),
    ADD KEY `user_code` (`user_code`)', Error_code: 1317

答え

エラーの状況は、エラーログや、SHOW SLAVE STATUS などで確認できる。

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.255.255.81
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.001192
(略)
             Slave_IO_Running: No ← 止まっていると No
            Slave_SQL_Running: No ← 止まっていると No
(略)
                Last_IO_Errno: *** エラーがあると ***
                Last_IO_Error: *** このあたりに  ***
               Last_SQL_Errno: *** エラーが出力  ***
               Last_SQL_Error: *** される     ***
(略)

スレーブ側でSQLがエラーになっていて、しかもそれは無視してよいものであれば、スキップして次に進ませることができる。

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

上で指定する数字は、スキップしたいSQLの数を指定する。

レプリケーションが再開する。

151216  9:22:05 [Note] Slave I/O thread: connected to master 'repl@10.255.255.81:3306',replication started in log 'mysql-bin.001190' at position 455447545
151216  9:22:05 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.001189' at position 844953249, relay log './hoge-dbsv2-relay-bin.003320' position: 844953395
151216  9:22:05 [Note] 'SQL_SLAVE_SKIP_COUNTER=1' executed at relay_log_file='./hoge-dbsv2-relay-bin.003320', relay_log_pos='844953395', master_log_name='mysql-bin.001189', master_log_pos='844953249' and new position at relay_log_file='./hoge-dbsv2-relay-bin.003320', relay_log_pos='844953707', master_log_name='mysql-bin.001189', master_log_pos='844953561'

また同様の状況になれば、同様の手順でスキップを繰り返す。

関連するメモ

コメント