本篇內(nèi)容介紹了“參數(shù)SQL_SLAVE_SKIP_COUNTER的分析”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)公司從2013年成立,公司以成都網(wǎng)站設(shè)計、網(wǎng)站制作、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶上1000家,涉及國內(nèi)多個省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計、獨特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。 每次數(shù)據(jù)庫復(fù)制沖突之后,經(jīng)常使用的一個命令如下:
SET SQL_SLAVE_SKIP_COUNTER = 1;
跳過出錯的這個event就可以解決,其實不然。
在binlog中,所有的binlog是按照組來分的,每一個組是其主庫生成的一個事務(wù)binlog,都以begin開始并以commit結(jié)束。根據(jù)不同類型的時間,如下:
Begin語句:對于一個binlog組,從begin開始,到commit結(jié)束,不同的SQL_SLAVE_SKIP_COUNTER有不同的處理方式。如果參數(shù)SQL_SLAVE_SKIP_COUNTER值為1,則此時這個組中的所有事件都算作不計數(shù)事件,也就是說這個1代表一個事務(wù),而不是一個事件,只有遇到commit語句時,才會將計數(shù)1減為0,那么下一個事務(wù)組會正常執(zhí)行。如果參數(shù)SQL_SLAVE_SKIP_COUNTER值大于1,那么這個組中的事件就被認為是一個個的事件,處理一個事件,參數(shù)SQL_SLAVE_SKIP_COUNTER的值就減去1。當(dāng)減到1的時候,如果這個事務(wù)組還沒有結(jié)束,則回到上面,跳過值為1的情況,如果結(jié)束了,但還沒有減為0,那么下一個事務(wù)組會繼續(xù)重新處理。
Commit或Rollback語句:遇到這個語句時,不管任何情況,參數(shù)SQL_SLAVE_SKIP_COUNTER的值都會減1。如果SQL_SLAVE_SKIP_COUNTER的值為1,commit之前所有的時間都會被算為不計數(shù)事件,這里減1之后,就完成了一個事務(wù)的skip。
其他Query語句:當(dāng)SQL_SLAVE_SKIP_COUNTER為1的時候,會將組內(nèi)事件都跳過,否則它會被減1。
Rows事件:這種類型是在行模式下,一個行的事件類型。針對一條SQL語句產(chǎn)生的若干個事件,分別計數(shù)。如果設(shè)置的SQL_SLAVE_SKIP_COUNTER大于1,則針對每一個事件都會減1,如果減到了1或設(shè)置為1了,則直到commit事件之后才會計數(shù),之前所有的操作都不會被計數(shù)。
不計數(shù)事件:這種類型的意思是,只要遇到這種事件,并且設(shè)置了SQL_SLAVE_SKIP_COUNTER為1或遞減之后值為1,那么就跳過,并且不會影響SQL_SLAVE_SKIP_COUNTER的值。而如果設(shè)置的SQL_SLAVE_SKIP_COUNTER值大于1,則計數(shù)遞減1,直到遞減到1時這類事件才不會算入計數(shù)。這種類型的事件包括Table_map、Intvar、Rand、User_var、BEGIN_load這五個事件,所以在binlog中如果有這五個事件,則在計數(shù)中不做計數(shù),直接忽略。
“參數(shù)SQL_SLAVE_SKIP_COUNTER的分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!