MySQL主從復(fù)制過濾

MySQL主從復(fù)制是邏輯復(fù)制譬涡,基于Binlog進(jìn)行主從數(shù)據(jù)傳輸合蔽,MySQL提供了豐富的參數(shù)來(lái)配置主從復(fù)制過濾條件怀骤。在主庫(kù)可以設(shè)置對(duì)于庫(kù)的數(shù)據(jù)寫入是否寫入binlog费封,在從庫(kù)可以設(shè)置對(duì)某些庫(kù)或者表的binlog是否忽略。本文將簡(jiǎn)單描述MySQL主從復(fù)制過濾的相關(guān)參數(shù)和常見用法蒋伦。

原文地址:
https://mytecdb.com/blogDetail.php?id=88

  • MySQL版本:5.7.19
  • binlog_format:ROW

1. 是否寫入binlog

MySQL通過以下兩個(gè)參數(shù)來(lái)控制某些庫(kù)是否寫入binlog弓摘。

  • --binlog-do-db=db_name
  • --binlog-ignore-db=db_name

--binlog-do-db 指定的庫(kù)名,其內(nèi)部表數(shù)據(jù)修改都會(huì)寫入binlog痕届。
--binlog-ignore-db 指定的庫(kù)名韧献,其內(nèi)部表數(shù)據(jù)修改將不會(huì)寫入binlog。

這兩個(gè)參數(shù)修改需要重啟MySQL研叫,無(wú)法動(dòng)態(tài)修改锤窑,另外在show global variables 的結(jié)果中也無(wú)法顯示這兩個(gè)參數(shù)。

2. SQL線程過濾日志

從庫(kù)復(fù)制的SQL線程從relay log里讀日志嚷炉,并應(yīng)用日志渊啰,通過設(shè)置如下參數(shù),可以控制SQL線程根據(jù)庫(kù)名或表名過濾日志申屹。

  • --replicate-ignore-db=db_name
  • --replicate-ignore-table=db_name.tbl_name
  • --replicate-do-db=db_name
  • --replicate-do-table=db_name.tbl_name
  • --replicate-wild-do-table=db_name.tbl_name
  • --replicate-wild-ignore-table=db_name.tbl_name
  • --replicate-rewrite-db=from_name->to_name

--replicate-ignore-db 忽略某些庫(kù)的binlog 日志應(yīng)用绘证。
--replicate-ignore-table 忽略某些表的binlog 日志應(yīng)用。
--replicate-do-db 應(yīng)用某些庫(kù)的binlog 日志哗讥。
--replicate-do-table 應(yīng)用某些表的binlog 日志嚷那。
--replicate-wild-do-table 使用通配符來(lái)匹配那些應(yīng)用binlog日志的表。
--replicate-wild-ignore-table 使用通配符來(lái)匹配那些不能應(yīng)用binlog日志的表杆煞。
--replicate-rewrite-db魏宽,能夠?qū)崿F(xiàn)主庫(kù)與從庫(kù)數(shù)據(jù)庫(kù)名稱不同的復(fù)制腐泻,比如主庫(kù)數(shù)據(jù)庫(kù)名為A,從庫(kù)數(shù)據(jù)庫(kù)名為B湖员,實(shí)現(xiàn)主庫(kù)A到從庫(kù)B的復(fù)制贫悄。

以上這些參數(shù)同樣不能動(dòng)態(tài)修改,需要重啟MySQL生效娘摔。在show global variables 的結(jié)果中也無(wú)法顯示這些參數(shù)窄坦。

動(dòng)態(tài)設(shè)置過濾條件:

MySQL提供了另外一種動(dòng)態(tài)設(shè)置從庫(kù)的復(fù)制過濾條件的方式,CHANGE REPLICATION FILTER 語(yǔ)法凳寺,設(shè)置前先停止復(fù)制的SQL線程鸭津,設(shè)置完成后,再開啟SQL線程肠缨。具體語(yǔ)法如下:

CHANGE REPLICATION FILTER filter [, filter][, ...] 

filter: 
    REPLICATE_DO_DB = (db_list) 
|   REPLICATE_IGNORE_DB = (db_list) 
|   REPLICATE_DO_TABLE = (tbl_list) 
|   REPLICATE_IGNORE_TABLE = (tbl_list) 
|   REPLICATE_WILD_DO_TABLE = (wild_tbl_list) 
|   REPLICATE_WILD_IGNORE_TABLE = (wild_tbl_list) 
|   REPLICATE_REWRITE_DB = (db_pair_list) 

db_list: 
    db_name[, db_name][, ...] 

tbl_list: 
    db_name.table_name[, db_table_name][, ...] 
    
wild_tbl_list: 
    'db_pattern.table_pattern'[, 'db_pattern.table_pattern'][, ...] 
    
db_pair_list: 
    (db_pair)[, (db_pair)][, ...] 

db_pair: 
    from_db, to_db

比如逆趋,下面只復(fù)制庫(kù)名為db1和db2中的表:
CHANGE REPLICATION FILTER REPLICATE_DO_DB = (db1, db2);

比如,下面同步db1.t1開頭的表晒奕,過濾db1.t2開頭的表
CHANGE REPLICATION FILTER
REPLICATE_WILD_DO_TABLE = ('db1.t1%'),
REPLICATE_WILD_IGNORE_TABLE = ('db1.t2%');

關(guān)于復(fù)制過濾闻书,有幾點(diǎn)需要額外注意:

(1)如果一個(gè)binlog事務(wù)里有多個(gè)SQL,其中涉及到過濾庫(kù)名或者表名的SQL將被過濾脑慧,不涉及到的則仍然執(zhí)行魄眉。舉例如下:

比如主庫(kù)執(zhí)行:
begin;
insert into db1.tb1 values(1);
insert into db2.tb2 values(2);
commit;

從庫(kù)設(shè)置
CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB = (db1);

從庫(kù)執(zhí)行的事務(wù)變成如下:
begin;
insert into db2.tb2 values(2);
commit;

(2)如果事務(wù)中的所有SQL都是被過濾的,那么從庫(kù)就會(huì)變成執(zhí)行一個(gè)空事務(wù)闷袒。

比如主庫(kù)執(zhí)行:
begin;
insert into db1.tb1 values(1);
insert into db1.tb2 values(2);
commit;

從庫(kù)設(shè)置
CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB = (db1);

從庫(kù)執(zhí)行的事務(wù)變成如下:
begin;
commit;

(3)過濾是全局設(shè)置的坑律,如果使用channel多通道復(fù)制,那么所有通道的復(fù)制過濾都是一樣的囊骤。MySQL 8.0 對(duì)這個(gè)問題進(jìn)行了改進(jìn)晃择,能夠?qū)δ硞€(gè)通道單獨(dú)指定復(fù)制過濾規(guī)則。

3. binlog_format為statement

對(duì)于binlog格式為statement時(shí)也物,過濾db的邏輯與row格式不太一樣宫屠,判斷sql是否屬于某個(gè)db,與use db相關(guān)滑蚯。比如下面這個(gè)例子浪蹂,目的是想要將涉及db1的SQL不寫入binlog,結(jié)果卻與預(yù)想不一樣膘魄。

設(shè)置:
--binlog-ignore-db=db1

執(zhí)行SQL:
use db2;
update db1.tb set name='123' where id=1;

對(duì)db1中的表做了修改乌逐,該修改本來(lái)是想忽略,不記錄binlog创葡,但結(jié)果仍然記錄在binlog里浙踢,原因就是use db2導(dǎo)致。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末灿渴,一起剝皮案震驚了整個(gè)濱河市洛波,隨后出現(xiàn)的幾起案子胰舆,更是在濱河造成了極大的恐慌,老刑警劉巖蹬挤,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缚窿,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡焰扳,警方通過查閱死者的電腦和手機(jī)倦零,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吨悍,“玉大人扫茅,你說我怎么就攤上這事∮希” “怎么了葫隙?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)躏仇。 經(jīng)常有香客問我恋脚,道長(zhǎng),這世上最難降的妖魔是什么焰手? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任糟描,我火速辦了婚禮,結(jié)果婚禮上册倒,老公的妹妹穿的比我還像新娘蚓挤。我一直安慰自己磺送,他們只是感情好驻子,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著估灿,像睡著了一般崇呵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上馅袁,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天域慷,我揣著相機(jī)與錄音,去河邊找鬼汗销。 笑死犹褒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的弛针。 我是一名探鬼主播叠骑,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼削茁!你這毒婦竟也來(lái)了宙枷?” 一聲冷哼從身側(cè)響起掉房,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎慰丛,沒想到半個(gè)月后卓囚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诅病,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年哪亿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贤笆。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锣夹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出苏潜,到底是詐尸還是另有隱情银萍,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布恤左,位于F島的核電站贴唇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏飞袋。R本人自食惡果不足惜戳气,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望巧鸭。 院中可真熱鬧瓶您,春花似錦、人聲如沸纲仍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)郑叠。三九已至夜赵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乡革,已是汗流浹背寇僧。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沸版,地道東北人嘁傀。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像视粮,于是被迫代替她去往敵國(guó)和親细办。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • atom自帶的UI主題都不怎么好看馒铃,可以自己裝一些 之后選擇自己安裝的theme就可以了 感覺都不怎么好看蟹腾!
    鴨梨山大哎閱讀 1,679評(píng)論 0 1
  • https://blog.csdn.net/guangli_r/article/details/70168131 ...
    dopami閱讀 2,402評(píng)論 0 1
  • 有時(shí)內(nèi)在的痛苦來(lái)的太多痕惋,自己都不清晰是被哪個(gè)內(nèi)在小孩掌控!有時(shí)會(huì)掉入幻想的陷阱里娃殖!讓你找不到方向值戳! ...
    孤獨(dú)的綻放閱讀 101評(píng)論 0 1