mysql過濾複製的實現

roc_guo發表於2021-09-11
導讀 這篇文章主要介紹了mysql過濾複製的實現思路,主要講解了兩種思路,一種是在主庫的binlog上實現另一種是從庫的sql執行緒上實現,具體實現過程跟隨小編一起看看吧
mysql過濾複製

mysql過濾複製的實現mysql過濾複製的實現

兩種思路:

主庫的binlog上實現(不推薦,儘量保證主庫binlog完整)

從庫的sql執行緒上實現

所以主從過濾複製儘量不用,要用的也僅僅在從庫上使用,因為要儘可能保證binlog的完整性

主庫上實現

在Master 端為保證二進位制日誌的完整, 不使用二進位制日誌過濾。

主庫配置引數:

#配置檔案中新增
 
binlog-do-db=db_name     #定義白名單,僅將制定資料庫的相關操作記入二進位制日誌。如果主資料庫崩潰,那麼僅僅之恢復指定資料庫的內容,不建議在主伺服器端使用,這樣導致日誌不完整。
binlog-ignore-db=db_name   #定義黑名單, 定義ignore 的庫上發生的寫操作將不會記錄到二進位制日誌中
從庫上實現

可以下載配置檔案中

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)
#將源資料庫的db1發生的語句重寫到從庫的db2
CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB = ((db1, db2));

語法:

官網語法參考:https://dev.mysql.com/doc/refman/5.7/en/change-replication-filter.html

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)
}
#從庫實現過濾複製
 
   stop slave sql_thread;
   change replication filter replicate_do_db=(db);
   start slave sql_thread;
 
#取消過濾複製
   stop slave sql_thread;
   change replication filter replicate_do_db=();
   start slave sql_thread;
一些問題

主庫刪除某個表,從庫沒有這個表,導致從庫sql執行緒關閉

或者主從正常,從庫不小心刪除某個表,主庫隨後再刪除這個表,從庫又會去刪除這個不存在的表,報錯,導致sql執行緒退出

解決方法:跳過這一步操作

解決方案:從庫sql執行緒跳過誤操作的步驟
 
stop slave sql_thread;
 
#找到Executed_Gtid_Set執行到19
set gtid_next='94fc1fbe-b7a0-11eb-b0a0-000c2969aba1:20'; 將gtid分配給下一個事務
 
begin;commit;
set gtid_next=automatic; 系統自動分配gtid
start slave sql_thread;

到此這篇關於mysql過濾複製思路詳解的文章就介紹到這了

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2791854/,如需轉載,請註明出處,否則將追究法律責任。

相關文章