程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> mysql 復制過濾重復如何解決

mysql 復制過濾重復如何解決

編輯:關於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

      statement模式:

      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級別停止,所以沒有做檢查。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved