tidb迁移工具DM测试-数据追加增量
环境部署
| IP | 安装文档 | ||
|---|---|---|---|
| msyql | 192.168.138.131 | 5.7 | |
| tidb单机多节点 | 192.168.138.135 | https://docs.pingcap.com/zh/tidb/stable/quick-start-with-tidb | |
| dm工具 | 192.168.138.135 | https://docs.pingcap.com/zh/tidb-data-migration/stable/deploy-a-dm-cluster-using-tiup |
初始化数据
官方的说明里基本都是讲全量迁移数据的情况。所以这里自测一下数据追加的情景。
模拟tidb里已经有数据,mysql也已经有不相同的数据。
mysql初始化数据
bsppr.xpost_bak,未开启binlog
mysql -uroot -p -h127.0.0.1 bsppr<bsppr.xpost_bak.0000000000001.sqlSELECT count(1) FROM xpost_bak;
33062
tidb初始化数据
bsppr.xpost
mysql -uroot -p -h192.168.138.135 -P4000 bsppr<bsppr.xpost_bak.0000000000000.sqlSELECT count(1) FROM xpost;
332389
配置DM
配置worker
# 加密密码
tiup dmctl --encrypt "Root123456"[root@centos7x5 tidb]# cat conf/source1.yaml
# MySQL1 Configuration.source-id: "mysql-replica-01"# DM-worker 是否使用全局事务标识符 (GTID) 拉取 binlog。使用前提是在上游 MySQL 已开启 GTID 模式。
enable-gtid: falsefrom:host: "192.168.138.135"user: "root"password: "0nv/tHurR0FiSNa4EuAytUDojdB/RRHdquAK"port: 3306
上传配置
tiup dmctl --master-addr 192.168.138.135:8261 operate-source create conf/source1.yaml
配置task
一个上游mysql,迁移数据从bsppr.xpost_bak到bsppr.xpost
# 任务名,多个同时运行的任务不能重名。
name: "test"
# 全量+增量 (all) 迁移模式。
task-mode: "all"
# 下游 TiDB 配置信息。
target-database:host: "192.168.138.135"port: 4000user: "root"password: "0nv/tHurR0FiSNa4EuAytUDojdB/RRHdquAK"# 黑白名单全局配置,各实例通过配置项名引用。
#block-allow-list: # 如果 DM 版本 <= v2.0.0-beta.2 则使用 black-white-list。
# global:
# do-tables: # 需要迁移的上游表的白名单。
# - db-name: "test_db" # 需要迁移的表的库名。
# tbl-name: "test_table" # 需要迁移的表的名称。block-allow-list: # 上游数据库实例匹配的表的 block-allow-list 过滤规则集,如果 DM 版本 <= v2.0.0-beta.2 则使用 black-white-listbw-rule-1: # 配置名称do-dbs: ["bsppr"] # 迁移哪些库do-tables: # 迁移哪些表- db-name: "bsppr"tbl-name: "xpost_bak"routes: # 上游和下游表之间的路由 table routing 规则集route-rule-1: # 配置名称schema-pattern: "bsppr" # 库名匹配规则,支持通配符 "*" 和 "?"table-pattern: "xpost_bak" # 表名匹配规则,支持通配符 "*" 和 "?"target-schema: "bsppr" # 目标库名称target-table: "xpost" # 目标表名称# dump 处理单元全局配置,各实例通过配置项名引用。
#mydumpers:
# global:
# extra-args: "-B test_db -T test_table" # dump 处理单元的其他参数,从 DM 1.0.2 版本开始,DM 会自动生成 table-list 配置,在其之前的版本仍然需要人工配置。mydumpers: # dump 处理单元的运行配置参数global: # 配置名称threads: 4 # dump 处理单元从上游数据库实例导出数据的线程数量,默认值为 4chunk-filesize: 64 # dump 处理单元生成的数据文件大小,默认值为 64,单位为 MBskip-tz-utc: true # 忽略对时间类型数据进行时区转化,默认值为 trueextra-args: "--consistency none" # dump 处理单元的其他参数,不需要在 extra-args 中配置 table-list,DM 会自动生成# 当前数据迁移任务需要的全部上游 MySQL 实例配置。
mysql-instances:
-# 上游实例或者复制组 ID,参考 `inventory.ini` 的 `source_id` 或者 `dm-master.toml` 的 `source-id 配置`。source-id: "mysql-replica-01"# 需要迁移的库名或表名的黑白名单的配置项名称,用于引用全局的黑白名单配置,全局配置见下面的 `block-allow-list` 的配置。block-allow-list: "bw-rule-1"# dump 处理单元的配置项名称,用于引用全局的 dump 处理单元配置。mydumper-config-name: "global"# 该上游数据库实例匹配的表到下游数据库的 table routing 规则名称route-rules: ["route-rule-1"]
启动作业
打开mysql的binlog
修改my.cnf配置文件,并重启
########bin-log settings########
#show variables like 'log_%';
server_id=11
log_bin = mysql-bin
binlog_format = ROW
#expire_logs_days = 30
#max-binlog-size = 500M
启动task任务
[root@centos7x5 tidb]# tiup dmctl --master-addr 192.168.138.135:8261 start-task ./task.yaml
Starting component `dmctl`: /root/.tiup/components/dmctl/v2.0.1/dmctl/dmctl --master-addr 192.168.138.135:8261 start-task ./task.yaml
{"result": true,"msg": "","sources": [{"result": true,"msg": "","source": "mysql-replica-01","worker": "dm-192.168.138.135-8262"}]
}
查看任务
[root@centos7x5 tidb]# tiup dmctl --master-addr 192.168.138.135:8261 query-status
Starting component `dmctl`: /root/.tiup/components/dmctl/v2.0.1/dmctl/dmctl --master-addr 192.168.138.135:8261 query-status
{"result": true,"msg": "","tasks": [{"taskName": "test","taskStatus": "Running","sources": ["mysql-replica-01"]}]
}
测试效果
查询tidb的数据
可以看到数据增加了,mysql里的33062和tidb原有的332389之和365451
SELECT count(1) FROM xpost;
365451
insert测试:向mysql里增加数据
mysql -uroot -p -h127.0.0.1 bsppr<bsppr.xpost_bak.0000000010000.sql# 查看mysql的数据(增加4条)
SELECT count(1) FROM xpost_bak;
33066# 查看tidb的数据
SELECT count(1) FROM xpost;
365455
update测试:在mysql里做update操作
UPDATE xpost_bak SET title="这就是一个binlog测试" WHERE postid=2411376745;# 到tidb里查询
SELECT * FROM xpost WHERE postid=2411376745;2411376745 1850 304174 这就是一个binlog测试......
tidb还没有同步到原始数据的时候,在MySQL里update
# 插入1G的数据
for f in bsppr.xpost_bak.00000532{0..3}0000.sql;do mysql -uroot -pRoot123456 -h127.0.0.1 bsppr<$f;done# 到导入的最后一行数据是17078111052
[root@centos7x1 xpost_bak]# tail bsppr.xpost_bak.0000053230000.sql
(17078111052,60327,1174891,'影视行业应该如何迎接95.....
再次测试
重新准备数据
mysql部分,重置binlog
# 查找:
MySQL> show binary logs;
+—————-+———–+
| Log_name | File_size |
+—————-+———–+
| mysql-bin.000001 | 150462942 |
| mysql-bin.000002 | 125 |
+—————-+———–+
# 清理binglog日志
mysql> flush logs;
删除bin-log(删除mysql-bin.000002之前的而没有包含mysql-bin.000002)
mysql> purge binary logs to 'mysql-bin.000002';
tidb部分
TRUNCATE xpost;
mysql -uroot -p -h192.168.138.135 -P4000 bsppr
启动任务后,立刻update,mysql里的最后一条数据
tiup dmctl --master-addr 192.168.138.135:8261 start-task --remove-meta ./task.yaml
mysql -uroot -pRoot123456 -h192.168.138.131 bsppr -e"UPDATE xpost_bak SET title='大量full数据后的update增量' WHERE postid=17078111052"
查询任务
[root@centos7x5 tidb]# tiup dmctl --master-addr 192.168.138.135:8261 query-status test
Starting component `dmctl`: /root/.tiup/components/dmctl/v2.0.1/dmctl/dmctl --master-addr 192.168.138.135:8261 query-status test
{"result": true,"msg": "","sources": [{"result": true,"msg": "","sourceStatus": {"source": "mysql-replica-01","worker": "dm-192.168.138.135-8262","result": null,"relayStatus": null},"subTaskStatus": [{"name": "test","stage": "Running","unit": "Load","result": null,"unresolvedDDLLockID": "","load": {"finishedBytes": "128183998","totalBytes": "1048396102","progress": "12.23 %","metaBinlog": "(mysql-bin.000002, 154)","metaBinlogGTID": ""}}]}]
}
从任务记录里可以看到,dm启动的时候记录mysql当前的binlog位置,然后开始全量过程(full)。全量完成后再进行增量任务。”unit“:DM 的处理单元,包括 “Check”,“Dump“,“Load” 以及 “Sync”。到Sync状态时,表示开始增量。“synced”: true已经同步
继续向mysql里插入大量数据,查看任务状态。 “synced”: false正在同步
[root@centos7x5 tidb]# tiup dmctl --master-addr 192.168.138.135:8261 query-status test
Starting component `dmctl`: /root/.tiup/components/dmctl/v2.0.1/dmctl/dmctl --master-addr 192.168.138.135:8261 query-status test
{"result": true,"msg": "","sources": [{"result": true,"msg": "","sourceStatus": {"source": "mysql-replica-01","worker": "dm-192.168.138.135-8262","result": null,"relayStatus": null},"subTaskStatus": [{"name": "test","stage": "Running","unit": "Sync","result": null,"unresolvedDDLLockID": "","sync": {"totalEvents": "47702","totalTps": "276","recentTps": "484","masterBinlog": "(mysql-bin.000002, 48691031)","masterBinlogGtid": "","syncerBinlog": "(mysql-bin.000002, 26009274)","syncerBinlogGtid": "","blockingDDLs": [],"unresolvedGroups": [],"synced": false,"binlogType": "remote"}}]}]
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
