对目标端数据库的影响(gtid_executed表)
表 dtle.gtid_executed_v4
当目标端是MySQL数据库时, dtle会在目标端自动创建表dtle.gtid_executed_v4
, 目标端的用于回放数据的数据库用户需要对这张表有相应权限.
表dtle.gtid_executed_v4
的作用是存储已经回放的事务的GTID, 用作断点续传/数据检查等.
使用表dtle.gtid_executed_v4
模仿GTID机制, 而不使用MySQL原生GTID机制的原因是: 在回放时, set GTID_NEXT=...
语句需要 SUPER 权限, 而云环境下, 数据库用户可能无法拥有 SUPER 权限.
dtle.gtid_executed_v4
的建表语句如下:
CREATE TABLE IF NOT EXISTS dtle.gtid_executed_v4 (
job_name varchar(64) NOT NULL,
source_uuid binary(16) NOT NULL,
gtid int NOT NULL,
gtid_set longtext,
primary key (job_name, source_uuid, gtid)
);
表结构说明:
- job_name: 执行同步的任务名
- source_uuid: 源端数据库UUID号
- gtid: 执行过的GTID gno编号。若某行该列为0,则表明这是一个汇总行
- 行数过多时,会触发汇总机制
- gtid_set: 对于gtid=0的汇总行,该列批量储存gno编号,如1-100:200:300-400
典型的查询方法
SELECT job_name, HEX(source_uuid), gtid, gtid_set FROM dtle.gtid_executed_v4;
-- 注意source_uuid以binary储存,直接查询会乱码,需要HEX()转换