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

MYSQL之過濾複製

1.過濾複製的方式

1.檢視master status

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      305 |   白名單      |    黑名單        |                   |
+------------------+----------+--------------+------------------+-------------------+

2.配置白名單

#從庫
replicate-do-db=test  # test庫
replicate-do-table=test.t1  # test庫下的t1表
replicate-wild-do-table=test.t*  # test庫下t開頭的表

# 三種只能選一種,多個庫(表)配置可以多寫一行配置,或者','。

#主庫
binlog-do-db=test
binlog-do-table=test.t1
binlog-wild-do-table=test.t*

3.配置黑名單

#從庫
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;

mysql> create database lol;
2.第一臺從庫配置
[root@db02 ~]# vim /etc/my.cnf
[mysqld]
server_id=2
replicate-do-db=wzry

[root@db02 ~]# 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

mysql> create table cikexintiao(id int);

mysql> use lol

mysql> create table fuleierzhuode(id int);

#第一臺從庫檢視
mysql> use wzry

mysql> show tables;
+----------------+
| Tables_in_wzry |
+----------------+
| cikexintiao    |
+----------------+

mysql> use lol

mysql> show tables;

#第二臺從庫檢視
mysql> use wzry

mysql> show tables;


mysql> use lol

mysql> show tables;
+---------------+
| Tables_in_lol |
+---------------+
| fuleierzhuode |
+---------------+
1 row in set (0.00 sec)

3.過濾複製配置在主庫

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庫的資料

4.過濾複製總結

#配置在從庫時
1.配置白名單:IO執行緒將主庫的資料拿到了relay-log,但是sql執行緒只執行白名單配置的資料庫相關語句
1.配置黑名單:IO執行緒將主庫的資料拿到了relay-log,但是sql執行緒只不執行黑名單配置的資料庫相關語句

#配置在主庫時
1.配置白名單:binlog只記錄白名單相關的sql語句
2.配置黑名單:binlog只不記錄黑名單相關的sql語句

# 建議配置在從庫