標籤:影響 erro sdn 資料庫 廠商 bsp 這一 不可用 mysql
一般來說,為了保險起見,在主從庫維護中,有時候需要跳過某個無法執行的命令,需要在slave處於stop狀態下,執行 set global sql_slave_skip_counter=1以跳過命令。但在測試和開發環境下,有時候為了快速解決不影響開發,需要使用set global sql_slave_skip_counter=N,其意思即為在start slave時,從當前位置起,跳過N個event。每跳過一個event,則N--.
這一點還是很好驗證的,測試過的就有明確體會了,不想測試的可參考下http://www.cnblogs.com/yhlx/articles/3740598.html。
除了跳過N個event外,還有一個很重要的參數是slave-skip-errors,其有四個可用值,分別為:off、all、ErorCode、ddl_exist_errors。
根據各個值得字面意思即可知道它們的用法,但是其中ddl_exist_errors值卻比較特別,它代表了一組errorCode的組合,分別是:
1007:資料庫已存在,建立資料庫失敗
1008:資料庫不存在,刪除資料庫失敗
1050:資料表已存在,建立資料表失敗
1050:資料表不存在,刪除資料表失敗
1054:欄位不存在,或程式檔案跟資料庫有衝突
1060:欄位重複,導致無法插入
1061:重複鍵名
1068:定義了多個主鍵
1094:位置線程ID
1146:資料表缺失,請恢複資料庫
但是還要注意的是,該值只在mysql cluster版的mysqld中才可用,而在mysql Server版的mysqld中不可用。
使用這個參數除了http://blog.csdn.net/wulantian/article/details/38369259和http://bugs.mysql.com/bug.php?id=39393提及的bug外,更嚴重的是它會讓不該忽略的操作也被忽視,進而導致業務不正確,尤其是如果從庫提供和主庫一樣嚴重程度的業務時,比如即時風控和程式化操作基於的即時盈虧預警,為此有些廠商甚至都出現過幾百萬的索賠。
mysql主從之slave-skip-errors和sql_slave_skip_counter