MySQL過濾複製
阿新 • • 發佈:2020-07-25
目錄
一、過濾複製
什麼是過濾複製
# 出現原因 讓從節點僅僅複製指定的資料庫,或指定資料庫的指定資料表。主伺服器有10個數據庫,而從節點只需要同步其中的一兩個資料庫。這個時候就需要複製過濾。 複製過濾器可以在主節點中實現,也可以在從節點中實現。 # 過濾複製選擇: 主節點: 在主節點的二進位制事件日誌中僅記錄與指定資料庫(資料表)相關的事件日誌,但是主節點的二進位制日誌不完整,沒有記錄所有對主節點的修改操作。(不推薦) 如果要使用該方式,則在主節點的配置檔案中新增如下引數: binlog_do_db=”XXX,XXX,XXX”; #資料庫白名單列表 binlog_ingore_db=”XXX,XXX,XXX”; #資料庫黑名單列表。 但這兩個配置引數不要同時使用。 從節點: 從伺服器的 SQL Thread在Replay中繼日誌中的事件時,僅讀取於特定資料庫(資料表)相關的事件,並應用於本地。(但是浪費I/O ,浪費頻寬)推薦使用 從節點複製過濾相關設定項: replicate_do_db =”“; #複製的白名單 replicate_ingore_db =”“; #複製的黑名單 replicate_do_table=”“; relicate_ingore_table=”“; replicate_wild_do_table=”“; #更高級別的應用,萬用字元,應用到哪一類表的。
1.過濾複製的方式
mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000002 | 305 | 白名單 | 黑名單 | | +------------------+----------+--------------+------------------+-------------------+
1)白名單
#從庫
replicate-do-db=test
replicate-do-table=test.t1
replicate-wild-do-table=test.t*
#主庫
binlog-do-db=test
binlog-do-table=test.t1
binlog-wild-do-table=test.t*
2)黑名單
#從庫 replicate-ignore-db=test replicate-ignore-table=test.t1 replicate-wild-ignore-table=test.t* #主庫 binlog-ignore-db=test binlog-ignore-table=test.t1 binlog-wild-ignore-table=test.t*
2.配置過濾複製
1)主庫建立兩個庫
mysql> create database wzry;
Query OK, 1 row affected (1.00 sec)
mysql> create database lol;
Query OK, 1 row affected (0.00 sec)
2)第一臺從庫配置
[root@db02 data]# vim /etc/my.cnf
[mysqld]
server_id=2
replicate-do-db=wzry
[root@db02 data]# systemctl restart mysqld
#檢視主從狀態
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: wzry
3)配置第二臺從庫
[root@db03 ~]# vim /etc/my.cnf
[mysqld]
server_id=2
replicate-do-db=lol
[root@db03 ~]# systemctl restart mysqld
#檢視主從狀態
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: lol
4)驗證過濾複製
#1.主庫操作
mysql> use wzry
Database changed
mysql> create table cikexintiao(id int);
Query OK, 0 rows affected (0.26 sec)
mysql> use lol
Database changed
mysql> create table fuleierzhuode(id int);
Query OK, 0 rows affected (0.01 sec)
#第一臺從庫檢視
mysql> use wzry
Database changed
mysql> show tables;
+----------------+
| Tables_in_wzry |
+----------------+
| cikexintiao |
+----------------+
1 row in set (0.00 sec)
mysql> use lol
Database changed
mysql> show tables;
Empty set (0.00 sec)
#第二臺從庫檢視
mysql> use wzry
Database changed
mysql> show tables;
Empty set (0.00 sec)
mysql> use lol
Database changed
mysql> show tables;
+---------------+
| Tables_in_lol |
+---------------+
| fuleierzhuode |
+---------------+
1 row in set (0.00 sec)
3.配置過濾多個庫
1)方法一:
[root@db02 data]# vim /etc/my.cnf
[mysqld]
server_id=2
replicate-do-db=wzry,lol
2)方法二:
[root@db02 data]# vim /etc/my.cnf
[mysqld]
server_id=2
replicate-do-db=wzry
replicate-do-db=lol
4.過濾複製配置在主庫
1.配置
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
server_id=1
log_bin=/usr/local/mysql/data/mysql-bin
binlog-do-db=wzry
2.檢視主庫狀態
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 120 | wzry | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
3.在主庫的wzry庫和lol庫新增資料
4.從庫檢視資料,只能看到wzry庫的資料
5.過濾複製總結
#配置在從庫時
1.配置白名單:IO執行緒將主庫的資料拿到了relay-log,但是sql執行緒只執行白名單配置的資料庫相關語句
1.配置黑名單:IO執行緒將主庫的資料拿到了relay-log,但是sql執行緒只不執行黑名單配置的資料庫相關語句
#配置在主庫時
1.配置白名單:binlog只記錄白名單相關的sql語句
2.配置黑名單:binlog只不記錄黑名單相關的sql語句