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過濾復制思路詳解的文章就介紹到這瞭,更多相關mysql過濾復制 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!