天天看點

MySQL複制過濾注意事項

1、replicate_do_db 和 replicate_ignore_db 不要同時出現。容易出現混淆。也是毫無意義的。

Replicate_Do_DB: db1 

Replicate_Ignore_DB: db2

statement模式:

使用use 語句

use db1;insert into tb1 values (1);

use db2;insert into tb2 values (2);

以上在slave上均能正确複制,tb1 有資料,tb2沒有資料。

不使用use 語句

insert into db1.tb1 values (11); 

insert into db2.tb2 values (11); 

結果tb1沒有資料,tb2也沒有資料(按照文檔上來講,應該有的)

row模式:

無論是否使用use 語句,均能正确複制

小結:對于statement模式,SQL語句必須使用use 語句,并設定設定多個replicate_do_db來複制多個DB。

2、隻進行表級别過濾的時候,對于statement模式,無論是否使用use語句,均能正确複制。row模式也是可以的。(表名它比對的表的全名:資料庫名+表名)

replicate_do_table=db1.tb1

use db1; insert into tb1 values (22);

insert into db1.tb1 values (22);

兩者的複制結果一緻。

(同樣do 和 ignore 不要混用,除非出現過濾DB的情況)

3、有DB過濾規則的時候,statment模式必須使用USE語句,不能出現 db.表名,db.視圖,db.存儲程式這樣的形式。row模式完勝!

replicate-ignore-db = db1

replicate-do-table = db2.tbl2

USE db1;

INSERT INTO db2.tbl2 VALUES (1);

row模式下,

預設DB不是db1,是以跳過第一條規則,執行表的規則,行被插入

statement模式下,

insert 語句被忽略,表的過濾規則已經在DB級别停止,是以沒有做檢查。

本文轉自 位鵬飛 51CTO部落格,原文連結:http://blog.51cto.com/weipengfei/1070485,如需轉載請自行聯系原作者