案例分析:從庫複製出錯
1. 從錯誤日誌和slave status來看,複製在relay_master_log_file=mysql-bin.000088這個日誌文件的exec_master_log_pos=471880483這個position上出錯了!
2. 因爲show binlog events 這個命令不能針對relay_bin中繼日誌做讀取event,所以我們還得回到主庫上去讀mysql-bin二進制日誌文件。
3. 去主庫執行show binlog events in 'mysql-bin.000088' from 471880483 limit 10;
可以看出從471880483 到471880982這個出問題的insert 語句,一共分成了三個event!(可以看出一個事務並非就是一個event,而會是三個event!begin/insert/commit)
4. 執行set global sql_salve_skip_counter=1! 此句表示從此刻的位置跳過1個event!
另外在別的資料裏還看到有兩個策略:
1、若N=1且當前event爲BEGIN, 則N不變,跳過當前event繼續。
2、若N=1且當前event處於一個事務之內(BEGIN之後,COMMIT之前),則N不變,跳過當前event繼續。
說明:其實上面兩個策略合起來就是一句話,當N=1時,會連續跳過若干個event,直到當前所在的事務結束。
當然如果N>1,則跳過N個event!並且最後不能處於一個事務內!
5. 執行set global sql_salve_skip_counter=1! ,再去看錯誤日誌
可以看出mysql從event=1 跳過了 第二個和第三個event,從第四個event新的pos=471880982 重新開始執行中繼日誌!