過慮復(fù)制事件有兩種方式:
1、在主服務(wù)器在把事件從進(jìn)二制日志中過濾掉,相關(guān)的參數(shù)是:binlog_do_db和binlog_ignore_db。master過濾器控制哪些被寫入二進(jìn)制日志,以及哪些會發(fā)送給slave。被過濾的表事件不會寫入二進(jìn)制日志。
2、在從服務(wù)器上把事件從中繼日志中過濾掉,相關(guān)的參數(shù)是replicate_*。slave過濾控制哪些在slave上執(zhí)行。事件會寫入二進(jìn)制日志,然后發(fā)送到slave,直到事件執(zhí)行時才進(jìn)行過濾。
3、在Master上設(shè)置:
Binlog_Do_DB:設(shè)定哪些數(shù)據(jù)庫需要記錄Binlog
Binlog_Ignore_DB:設(shè)定哪里數(shù)據(jù)庫不需要記錄Binlog
優(yōu)點是Master端的Binlog記錄所帶來的Io量減少,網(wǎng)絡(luò)IO減少,還會讓slave端的IO線程,SQL線程減少,從而大幅提高復(fù)制性能,
缺點是mysql判斷是否需要復(fù)制某個事件不是根據(jù)產(chǎn)生該事件的查詢所在的DB,而是根據(jù)執(zhí)行查詢時刻所在的默認(rèn)數(shù)據(jù)庫(也就是登錄時指定的庫名或運行"use database"中指定的DB),只有當(dāng)前默認(rèn)DB和配置中所設(shè)定的DB完全吻合時IO線程才會將該事件讀取給slave的IO線程.所以,如果在默認(rèn)DB和設(shè)定須要復(fù)制的DB不一樣的情況下改變了須要復(fù)制的DB中某個Table中的數(shù)據(jù),該事件是不會被復(fù)制到Slave中去的,這樣就會造成Slave端的數(shù)據(jù)和Master的數(shù)據(jù)不一致.同樣,在默認(rèn)的數(shù)據(jù)庫下更改了不須要復(fù)制的數(shù)據(jù)庫中的數(shù)據(jù),則會被復(fù)制到slave端,當(dāng)slave端并沒有該數(shù)據(jù)庫時,則會造成復(fù)制出錯而停止。
4、在slave上設(shè)置:
Replicate_Do_DB:設(shè)定需要復(fù)制的數(shù)據(jù)庫,多個DB用逗號分隔
Replicate_Ignore_DB:設(shè)定可以忽略的數(shù)據(jù)庫.
Replicate_Do_Table:設(shè)定需要復(fù)制的Table
Replicate_Ignore_Table:設(shè)定可以忽略的Table
Replicate_Wild_Do_Table:功能同Replicate_Do_Table,但可以帶通配符來進(jìn)行設(shè)置。
Replicate_Wild_Ignore_Table:功能同Replicate_Do_Table,功能同Replicate_Ignore_Table,可以帶通配符。
優(yōu)點是在slave端設(shè)置復(fù)制過濾機(jī)制,可以保證不會出現(xiàn)因為默認(rèn)的數(shù)據(jù)庫問題而造成Slave和Master數(shù)據(jù)不一致或復(fù)制出錯的問題.
缺點是性能方面比在Master端差一些.原因在于:不管是否須要復(fù)制,事件都會被IO線程讀取到Slave端,這樣不僅增加了網(wǎng)絡(luò)IO量,也給Slave端的IO線程增加了Relay
Log的寫入量。