📣
TiDB Cloud Premium 开放公测中。为企业级工作负载提供无限扩展、即时弹性伸缩和高级安全保障。立即体验 →

DM-worker 简介




DM-worker 是 TiDB Data Migration (DM) 的一个组件,负责执行 DM-master 分配的任务和子任务。在全量和增量数据迁移中,它会从一个兼容 MySQL 的上游源实例导出数据,并将导出的数据加载到目标 TiDB 集群中。随后,它作为复制客户端读取上游 binlog,对事件进行转换和过滤,并将其应用到目标端。DM-master 会向 DM-worker 查询数据源和子任务状态。

关键概念

  • 如果某个 worker 实例离线,DM-master 可以自动将其任务重新调度到另一个可用 worker 上,以恢复数据复制。注意,这不适用于全量导出/导入阶段。
  • 单个 DM-worker 进程一次只能连接到一个上游源数据库实例。要从多个数据源迁移数据,例如合并分表时,必须运行多个 DM-worker 进程。

DM-worker 处理单元

根据任务模式的不同,DM-worker 子任务会运行 dump、load 和 binlog replication 处理单元。DM-worker 还可以为其绑定的数据源运行可选的 relay log 处理单元。

Relay 日志

Relay log 是可选功能,默认关闭。启用后,DM-worker 会先将上游 binlog event 存储到本地磁盘,然后 binlog replication 处理单元再读取这些 event。如果长时间运行的全量迁移或阻塞的迁移任务可能持续超过上游 binlog 的保留期限,或者同一数据源的多个任务需要共享同一条 binlog 流,建议启用 Relay Log。启用 Relay Log 会消耗磁盘、I/O 和 CPU 资源,并可能增加数据复制延迟。有关配置和运维细节,参见 DM relay log

dump 处理单元

dump 处理单元从上游 MySQL 或 MariaDB 导出全量数据到本地磁盘。

load 处理单元

load 处理单元读取 dump 处理单元导出的数据文件,然后加载到下游 TiDB。

Binlog replication/sync 处理单元

Binlog replication/sync 处理单元读取上游 MySQL/MariaDB 的 binlog event 或 relay log 处理单元的 binlog event,将这些 event 转化为 SQL 语句,再将这些 SQL 语句应用到下游 TiDB。

DM-worker 所需权限

本小节主要介绍使用 DM-worker 时所需的上下游数据库用户权限以及各处理单元所需的用户权限。

上游数据库用户权限

上游数据库用户所需的权限取决于数据库类型 (MySQL/MariaDB) 和版本。

MySQL 和 MariaDB(MariaDB 10.5.2 之前)

对于 MySQL,以及早于 10.5.2 的 MariaDB 版本,用户必须具有以下权限:

权限作用域
SELECTTables
RELOADGlobal
REPLICATION SLAVEGlobal
REPLICATION CLIENTGlobal

要授予这些权限,请执行以下语句:

GRANT RELOAD, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'your_user'@'your_wildcard_of_host'; GRANT SELECT ON `db1`.* TO 'your_user'@'your_wildcard_of_host';

如果从早于 10.5.2 的 MariaDB 执行全量数据导出,还需要授予 PROCESS 权限,以便 dump 处理单元可以查询 InnoDB 元信息:

GRANT PROCESS ON *.* TO 'your_user'@'your_wildcard_of_host';

MariaDB 10.5.2 到 10.5.8

MariaDB 10.5.2 开始,REPLICATION CLIENT 权限被重命名为 BINLOG MONITOR,并且多个复制语句使用了通过切分 SUPER 而新建的权限。对于 MariaDB 10.5.2 到 10.5.8,用户必须具有以下权限:

权限作用域说明
SELECTTables全量数据导出所需。
PROCESSGlobal全量数据导出期间查询 InnoDB 元信息所需。
RELOADGlobalFLUSH TABLES WITH READ LOCK 所需。
BINLOG MONITORGlobalREPLICATION CLIENT 重命名而来;允许监控 binlog。
REPLICATION SLAVEGlobal允许读取 binlog event。
REPLICATION SLAVE ADMINGlobal允许管理复制状态(例如 SHOW SLAVE STATUS)。
REPLICATION MASTER ADMINGlobal允许监控主库(例如 SHOW SLAVE HOSTS)。

要授予这些权限,请执行以下语句:

GRANT PROCESS, RELOAD, BINLOG MONITOR, REPLICATION SLAVE, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN ON *.* TO 'your_user'@'your_wildcard_of_host'; GRANT SELECT ON `db1`.* TO 'your_user'@'your_wildcard_of_host';

MariaDB 10.5.9 或更高版本

MariaDB 10.5.9 开始,SHOW SLAVE STATUSSHOW REPLICA STATUS 需要 REPLICA MONITOR 权限。MariaDB 在 SHOW GRANTS 中将此权限显示为 SLAVE MONITOR。请授予 MariaDB 10.5.2 到 10.5.8 中列出的权限,并额外授予 REPLICA MONITOR

GRANT PROCESS, RELOAD, BINLOG MONITOR, REPLICATION SLAVE, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, REPLICA MONITOR ON *.* TO 'your_user'@'your_wildcard_of_host'; GRANT SELECT ON `db1`.* TO 'your_user'@'your_wildcard_of_host';

下游数据库用户权限

下游数据库 (TiDB) 用户必须拥有以下权限:

权限作用域
SELECTTables
INSERTTables
UPDATETables
DELETETables
CREATEDatabases,tables
DROPDatabases,tables
ALTERTables
INDEXTables

对要执行迁移操作的数据库或表执行下面的 GRANT 语句:

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,INDEX ON db.table TO 'your_user'@'your_wildcard_of_host'; GRANT ALL ON dm_meta.* TO 'your_user'@'your_wildcard_of_host';

处理单元所需的最小权限

下表列出了 MySQL 和早于 10.5.2 的 MariaDB 版本中,各处理单元所需的最小权限。对于 MariaDB 10.5.2 及更高版本,请参见前一节中的权限表。

处理单元最小上游 (MySQL/MariaDB) 权限最小下游 (TiDB) 权限最小系统权限
Relay logREPLICATION SLAVE (读取 binlog)
REPLICATION CLIENT (SHOW MASTER STATUS, SHOW SLAVE STATUS)
本地读/写磁盘
DumpSELECT
RELOAD (FLUSH TABLES WITH READ LOCK)
PROCESS(仅 MariaDB,用于查询 InnoDB 元信息)
本地写磁盘
LoadSELECT(查询 checkpoint 历史)
CREATE(创建数据库或表)
DELETE(删除 checkpoint)
INSERT(插入 dump 数据)
读/写本地文件
Binlog replicationREPLICATION SLAVE (reads the binlog)
REPLICATION CLIENT (SHOW MASTER STATUS, SHOW SLAVE STATUS)
SELECT(显示索引和列)
INSERT (DML)
UPDATE (DML)
DELETE (DML)
CREATE(创建数据库或表)
DROP(删除数据库或表)
ALTER(修改表)
INDEX(创建或删除索引)
本地读/写磁盘

文档内容是否有帮助?