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 版本,用户必须具有以下权限:
要授予这些权限,请执行以下语句:
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,用户必须具有以下权限:
要授予这些权限,请执行以下语句:
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 STATUS 和 SHOW 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) 用户必须拥有以下权限:
对要执行迁移操作的数据库或表执行下面的 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 及更高版本,请参见前一节中的权限表。