
读取mysql的binlog,通过data filter过滤,其中table blockallow list过滤哪些表,binlog event filter过滤哪些操作。再到table routing表路由,作用是表的转化(eg. a表转化到b表。a、c两表同步到d表。)
拓扑例子:

1.查看dm状态
tiup dm display dm-test

2.添加数据源
格式(可多跑几次,添加多个数据源)
tiup dmctl --master-addr <master-addr> operate-source create ./source-mysql-01.yaml
eg.
tiup dmctl --master-addr=172.31.0.49:8261 operate-source create source-mysql-01.yaml
vi source-mysql-01.yaml
# 唯一命名,不可重复。
source-id: "mysql-01"
# DM-worker 是否使用全局事务标识符 (GTID) 拉取 binlog。使用前提是上游 MySQL 已开启 GTID 模式。若上游存在主从自动切换,则必须使用 GTID 模式。
enable-gtid: true
from:
host: "${host}" # 例如:172.16.10.81
user: "root"
password: "${password}" # 支持但不推荐使用明文密码,建议使用 dmctl encrypt 对明文密码进行加密后使用
port: 3306dmctl加密:
tiup dmctl --encrypt 'oracle'

mysql需要成为源需要提前开启binlog与show_compatibility_56参数

验证:
查看所有数据源
tiup dmctl --master-addr=172.31.0.49:8261 operate-source show

查看具体某一个数据源
tiup dmctl --master-addr=172.31.0.49:8261 get-config source mysql-replica-01

3.配置任务文件
vi dm-task.yaml
#任务名,不可重复
name: "shard_merge"
# 任务模式,可设为
# full:只进行全量数据迁移
# incremental: binlog 实时同步
# all: 全量 + binlog 迁移
task-mode: all
# 本示例中上游存在自增主键,因此需要忽略掉该检查项
ignore-checking-items: ["auto_increment_ID"]
#下游信息
target-database:
host: "${host}" # 例如:192.168.0.1
port: 4000
user: "root"
password: "${password}" # 支持但不推荐使用明文密码,建议使用 dmctl encrypt 对明文密码进行加密后使用
#使用规则
mysql-instances:
-
source-id: "mysql-01" # 数据源 ID,即 source1.yaml 中的 source-id
route-rules: ["sale-route-rule"] # 应用于该数据源的 table route 规则
filter-rules: ["store-filter-rule", "sale-filter-rule"] # 应用于该数据源的 binlog event filter 规则
block-allow-list: "log-bak-ignored" # 应用于该数据源的 Block & Allow Lists 规则
-
source-id: "mysql-02"
route-rules: ["sale-route-rule"]
filter-rules: ["store-filter-rule", "sale-filter-rule"]
block-allow-list: "log-bak-ignored"
# 规则配置
routes:
sale-route-rule:
schema-pattern: "store_*" # 源头数据库名
table-pattern: "sale_*" # 源头表名
target-schema: "store" # 目标端数据库名
target-table: "sale" # 目标端表名
# 意思是源端store_开头所有数据库下所有sale_开头表,全部导到目标端store库下sale表中
# 过滤部分 DDL 事件
filters:
sale-filter-rule:
schema-pattern: "store_*"
table-pattern: "sale_*"
events: ["truncate table", "drop table", "delete"]
action: Ignore
# 忽略store_*.sale_*表,truncate、drop、delete操作
store-filter-rule:
schema-pattern: "store_*"
events: ["all dml"]
action: do
# store_*库所有dml操作都做
# 黑白名单
block-allow-list:
log-bak-ignored:
do-dbs: ["store_*"]
# 迁移store_开头所有库
# ignore-dbs是忽略哪些库和表
log-bak-haha1:
do-dbs: ["store_*"]
ignore-dbs: ["haha_*"]
do-tables:
- db-name: "~^test.*"
tbl-name: "~^t.*"
- db-name: "user"
tbl-name: "information"
# 迁移store_*库,忽略haha_*库,迁移规则里的表
# do与ignore同时配置到相同对象,do生效
# 通用优化
mydumpers: # dump 处理单元的运行配置参数
global: # 配置名称
threads: 4 # dump 处理单元从上游数据库实例导出数据和 check-task 访问上游的线程数量,默认值为 4
chunk-filesize: 64 # dump 处理单元生成的数据文件大小,默认值为 64,单位为 MB
extra-args: "--consistency none" # dump 处理单元的其他参数,不需要在 extra-args4.检查与启动任务
启动
tiup dmctl --master-addr=172.31.0.49:8261 start-task dm-task.yaml

检查状态
tiup dmctl --master-addr=172.31.0.49:8261 query-status dm-task.yaml
检查dm状态
tiup dm display dm-test
因为设置2个数据源所以已经2个进程在进行同步。

5.暂停任务
暂停
tiup dmctl --master-addr=172.31.0.49:8261 pause-task dm-task.yaml
恢复
tiup dmctl --master-addr=172.31.0.49:8261 resume-task dm-task.yaml
5.停止任务
停止
tiup dmctl --master-addr=172.31.0.49:8261 stop-task dm-task.yaml
查看
tiup dmctl --master-addr=172.31.0.49:8261 query-status dm-task.yaml

性能优化

















