任务前置检查
为了使数据迁移任务顺利进行,DM 在启动迁移任务时会自动触发任务前置检查,并返回检查结果。只有当前置检查通过后,DM 才开始执行迁移任务。
如果你想要手动触发前置检查,运行 命令即可。
例如:
当任务前置检查被触发时,DM 会按照配置的迁移模式对相应的检查项进行检查。
本小节列出了前置检查中的所有检查项。
对于任何一种迁移模式,前置检查都会包含以下通用检查项:
数据库版本
- MySQL 版本 > 5.5
MariaDB 版本 >= 10.1.2
上游 MySQL 表结构的兼容性
- (必须)检查字符集是否存在兼容性差异,详见 。
- (必须)检查上游表中是否存在主键或唯一键约束(从 v1.0.7 版本引入)。
对于全量数据迁移模式(task-mode: full
),除了,前置检查还会包含以下检查项:
(必须)上游数据库的 dump 权限
- 检查是否有 INFORMATION_SCHEMA 和 dump 表的 SELECT 权限。
- 如果 consistency=flush,将检查是否有 RELOAD 权限。
- 如果 consistency=flush/lock,将检查是否有 dump 表的 LOCK TABLES 权限。
(必须)上游 MySQL 多实例分库分表的一致性
悲观协调模式下,检查所有分表的表结构是否一致,检查内容包括:
- Column 数量
- Column 名称
- Column 顺序
- Column 类型
- 主键
- 唯一索引
乐观协调模式下,检查所有分表结构是否满足乐观协调兼容。
如果曾经通过
start-task
命令成功启动任务,那么将不会对一致性进行检查。
对于增量数据迁移模式(task-mode: incremental
),除了通用检查项,前置检查还会包含以下检查项:
(必须)上游数据库的 REPLICATION 权限
- 检查是否有 REPLICATION CLIENT 权限。
- 检查是否有 REPLICATION SLAVE 权限。
-
- 上游数据库必须设置数据库 ID
server_id
(非 AWS Aurora 环境建议开启 GTID)。
- 上游数据库必须设置数据库 ID
(必须)MySQL binlog 配置
- 检查 binlog 是否开启(DM 要求 binlog 必须开启)。
- 检查是否有
binlog_format=ROW
(DM 只支持 ROW 格式的 binlog 迁移)。 - 检查是否有
binlog_row_image=FULL
(DM 只支持binlog_row_image=FULL
)。 - 如果配置了
binlog_do_db
或者 ,那么检查需要迁移的库表,是否满足binlog_do_db
和binlog_ignore_db
的条件。
(必须)检查上游是否处于 过程中,即创建了
ghost
表,但还未执行rename
的阶段。如果处于 online-DDL 中,则检查报错,请等待 DDL 结束后重试。
对于全量加增量数据迁移模式(task-mode: all
),除了,前置检查还会包含全量数据迁移检查项,以及。
一般情况下前置检查项用于提前发现环境中可能存在的风险,不建议忽略。如果你的数据迁移任务面临特殊场景,你可以通过 来跳过部分检查项。
任务前置检查支持多线程并行。即使分表数目达到万级别,检查也可以在分钟级完成。
你可以通过数据迁移任务配置文件里 mydumpers
字段中的 参数指定线程的数量。
mydumpers: # dump 处理单元的运行配置参数
global: # 配置名称
threads: 4 # dump 处理单元从上游数据库实例导出数据和执行前置检查时访问上游的线程数量,默认值为 4
chunk-filesize: 64 # dump 处理单元生成的数据文件大小,默认值为 64,单位为 MB