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