1. 程式人生 > 實用技巧 >MySQL過濾複製

MySQL過濾複製

目錄

一、過濾複製

什麼是過濾複製

# 出現原因
讓從節點僅僅複製指定的資料庫,或指定資料庫的指定資料表。主伺服器有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語句