mysql 復(fù)制過(guò)濾重復(fù)如何解決
更新時(shí)間:2012年11月26日 09:52:27 作者:
在進(jìn)行mysql復(fù)制過(guò)程中,會(huì)出現(xiàn)數(shù)據(jù)重復(fù)的現(xiàn)象,怎樣利用mysql 過(guò)濾重復(fù)的數(shù)據(jù)呢?本文將提供詳細(xì)的解決方法,需要了解的朋友可以參考下
1、replicate_do_db 和 replicate_ignore_db 不要同時(shí)出現(xiàn)。容易出現(xiàn)混淆。也是毫無(wú)意義的。
Replicate_Do_DB: db1
Replicate_Ignore_DB: db2
statement模式:
使用use 語(yǔ)句
use db1;insert into tb1 values (1);
use db2;insert into tb2 values (2);
以上在slave上均能正確復(fù)制,tb1 有數(shù)據(jù),tb2沒(méi)有數(shù)據(jù)。
不使用use 語(yǔ)句
insert into db1.tb1 values (11);
insert into db2.tb2 values (11);
結(jié)果tb1沒(méi)有數(shù)據(jù),tb2也沒(méi)有數(shù)據(jù)(按照文檔上來(lái)講,應(yīng)該有的)
row模式:
無(wú)論是否使用use 語(yǔ)句,均能正確復(fù)制
小結(jié):對(duì)于statement模式,SQL語(yǔ)句必須使用use 語(yǔ)句,并設(shè)置設(shè)置多個(gè)replicate_do_db來(lái)復(fù)制多個(gè)DB。
2、只進(jìn)行表級(jí)別過(guò)濾的時(shí)候,對(duì)于statement模式,無(wú)論是否使用use語(yǔ)句,均能正確復(fù)制。row模式也是可以的。(表名它匹配的表的全名:數(shù)據(jù)庫(kù)名+表名)
replicate_do_table=db1.tb1
statement模式:
use db1; insert into tb1 values (22);
insert into db1.tb1 values (22);
兩者的復(fù)制結(jié)果一致。
(同樣do 和 ignore 不要混用,除非出現(xiàn)過(guò)濾DB的情況)
3、有DB過(guò)濾規(guī)則的時(shí)候,statment模式必須使用USE語(yǔ)句,不能出現(xiàn) db.表名,db.視圖,db.存儲(chǔ)程序這樣的形式。row模式完勝!
replicate-ignore-db = db1
replicate-do-table = db2.tbl2
USE db1;
INSERT INTO db2.tbl2 VALUES (1);
row模式下,
默認(rèn)DB不是db1,所以跳過(guò)第一條規(guī)則,執(zhí)行表的規(guī)則,行被插入
statement模式下,
insert 語(yǔ)句被忽略,表的過(guò)濾規(guī)則已經(jīng)在DB級(jí)別停止,所以沒(méi)有做檢查。
Replicate_Do_DB: db1
Replicate_Ignore_DB: db2
statement模式:
使用use 語(yǔ)句
use db1;insert into tb1 values (1);
use db2;insert into tb2 values (2);
以上在slave上均能正確復(fù)制,tb1 有數(shù)據(jù),tb2沒(méi)有數(shù)據(jù)。
不使用use 語(yǔ)句
insert into db1.tb1 values (11);
insert into db2.tb2 values (11);
結(jié)果tb1沒(méi)有數(shù)據(jù),tb2也沒(méi)有數(shù)據(jù)(按照文檔上來(lái)講,應(yīng)該有的)
row模式:
無(wú)論是否使用use 語(yǔ)句,均能正確復(fù)制
小結(jié):對(duì)于statement模式,SQL語(yǔ)句必須使用use 語(yǔ)句,并設(shè)置設(shè)置多個(gè)replicate_do_db來(lái)復(fù)制多個(gè)DB。
2、只進(jìn)行表級(jí)別過(guò)濾的時(shí)候,對(duì)于statement模式,無(wú)論是否使用use語(yǔ)句,均能正確復(fù)制。row模式也是可以的。(表名它匹配的表的全名:數(shù)據(jù)庫(kù)名+表名)
replicate_do_table=db1.tb1
statement模式:
use db1; insert into tb1 values (22);
insert into db1.tb1 values (22);
兩者的復(fù)制結(jié)果一致。
(同樣do 和 ignore 不要混用,除非出現(xiàn)過(guò)濾DB的情況)
3、有DB過(guò)濾規(guī)則的時(shí)候,statment模式必須使用USE語(yǔ)句,不能出現(xiàn) db.表名,db.視圖,db.存儲(chǔ)程序這樣的形式。row模式完勝!
replicate-ignore-db = db1
replicate-do-table = db2.tbl2
USE db1;
INSERT INTO db2.tbl2 VALUES (1);
row模式下,
默認(rèn)DB不是db1,所以跳過(guò)第一條規(guī)則,執(zhí)行表的規(guī)則,行被插入
statement模式下,
insert 語(yǔ)句被忽略,表的過(guò)濾規(guī)則已經(jīng)在DB級(jí)別停止,所以沒(méi)有做檢查。
相關(guān)文章
Centos6.4編譯安裝mysql 8.0.0 詳細(xì)教程
這篇文章主要為大家分享了Centos6.4編譯安裝mysql 8.0.0 詳細(xì)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
MySQL觸發(fā)器的使用和inserted和deleted表介紹
這篇文章主要介紹了MySQL觸發(fā)器的使用和inserted和deleted表,觸發(fā)器,就是一種特殊的存儲(chǔ)過(guò)程,觸發(fā)器和存儲(chǔ)過(guò)程一樣是一個(gè)能夠完成特定功能和存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器上的SQL片段,感興趣想要詳細(xì)了解可以參考下文2023-05-05
MySQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)高可用架構(gòu)之MHA的實(shí)戰(zhàn)
本文主要介紹了MySQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)高可用架構(gòu)之MHA的實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
查看mysql語(yǔ)句運(yùn)行時(shí)間的2種方法
網(wǎng)站運(yùn)行很慢的時(shí)候,我就特別起知道為什么這么慢,所以我查啊查,數(shù)據(jù)庫(kù)絕對(duì)是很重要的一部分,里面運(yùn)行的sql是絕對(duì)不能放過(guò)的。平時(shí)做項(xiàng)目的時(shí)候,我也會(huì)注意sql語(yǔ)句的書(shū)寫(xiě),寫(xiě)出一些高效的sql來(lái),所以我會(huì)經(jīng)常測(cè)試自己寫(xiě)的sql語(yǔ)句。我把我知道的二個(gè)方法,總結(jié)一下發(fā)出來(lái)2014-01-01
利用SQL注入漏洞登錄后臺(tái)的實(shí)現(xiàn)方法
工作需要,得好好補(bǔ)習(xí)下關(guān)于WEB安全方面的相關(guān)知識(shí),故撰此文,權(quán)當(dāng)總結(jié),別無(wú)它意。讀這篇文章,我假設(shè)讀者有過(guò)寫(xiě)SQL語(yǔ)句的經(jīng)歷,或者能看得懂SQL語(yǔ)句2012-01-01
MySQL數(shù)據(jù)庫(kù)事務(wù)transaction示例講解教程
這篇文章主要為大家介紹了MySQL數(shù)據(jù)庫(kù)事務(wù)transaction的示例講解教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10
MySQL常見(jiàn)內(nèi)置函數(shù)以及其使用教程
MySQL數(shù)據(jù)庫(kù)中提供了很豐富的函數(shù),MySQL函數(shù)包括數(shù)學(xué)函數(shù)、字符串函數(shù)、日期和時(shí)間函數(shù)、條件判斷函數(shù)、系統(tǒng)信息函數(shù)、加密函數(shù)、格式化函數(shù)等,下面這篇文章主要給大家介紹了關(guān)于MySQL常見(jiàn)內(nèi)置函數(shù)以及其使用的相關(guān)資料,需要的朋友可以參考下2022-12-12

