主要验证过滤复制,DM通过filter模块管理BINLOG中的events, 可以有选择的复制BINLOG中的特定操作,过滤掉不必要的操作;
这里过滤掉"truncate table","drop table","delete"三种操作
配置同步文件
# 过滤规则
filters:
trace-filter-rule1:
schema-pattern: "user*"
table-pattern: "hero*"
events: ["truncate table","drop table","delete"]
action: Ignore
check-task 检查配置文件的正确性;并通过start-task 开启任务;
验证数据已同步;
mysql> select * from hero;
+----+------------------------------+
| id | name |
+----+------------------------------+
| 2 | user0.hero1 |
| 3 | user0.hero1.row3 |
| 4 | user0.hero1.pause.row2 |
| 1 | user1.hero1 |
| 2 | user1.hero1.row2 |
| 3 | user1.hero1.pause.row4 |
| 1 | user1.hero0 |
| 2 | user0.hero1.row4 |
| 3 | user1.hero0.pause.row3 |
| 4 | user0.hero0.IncrementTesting |
+----+------------------------------+
10 rows in set (0.01 sec)
分别用drop,truncate和delete对源库中的表进行删除操作;
为了验证,为user0.hero1 insert一条数据;
mysql> drop table hero0;
Query OK, 0 rows affected (0.02 sec)
mysql> truncate table hero1;
Query OK, 0 rows affected (0.04 sec)
mysql> delete from user1.hero0;
Query OK, 3 rows affected (0.02 sec)
mysql> delete from user1.hero1 where id=2 and name='user1.hero1.row2';
Query OK, 1 row affected (0.01 sec)
mysql> insert into user0.hero1(name) values('user0.hero1.DeleteTesting');
Query OK, 1 row affected (0.01 sec)
查看目标库,此时有11条数据;
mysql> select * from hero;
+----+------------------------------+
| id | name |
+----+------------------------------+
| 2 | user0.hero1 |
| 3 | user0.hero1.row3 |
| 4 | user0.hero1.pause.row2 |
| 1 | user1.hero1 |
| 2 | user1.hero1.row2 |
| 3 | user1.hero1.pause.row4 |
| 1 | user1.hero0 |
| 2 | user0.hero1.row4 |
| 3 | user1.hero0.pause.row3 |
| 4 | user0.hero0.IncrementTesting |
| 1 | user0.hero1.DeleteTesting |
+----+------------------------------+
11 rows in set (0.00 sec)
验证结果表明DM Filter模块有效地过滤了drop/truncate/delete的操作;