【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'
また同様の状況になれば、同様の手順でスキップを繰り返す。