- 关于 TiDB
- 快速上手
- 部署标准集群
- 数据迁移
- 运维操作
- 监控与告警
- 故障诊断
- 性能调优
- 系统调优
- 软件调优
- SQL 性能调优
- SQL 性能调优概览
- 理解 TiDB 执行计划
- SQL 优化流程
- 控制执行计划
- 教程
- 同城多中心部署
- 两地三中心部署
- 同城两中心部署
- 读取历史数据
- 使用 Stale Read 功能读取历史数据(推荐)
- 使用系统变量
tidb_snapshot
读取历史数据
- 最佳实践
- Placement Rules 使用文档
- Load Base Split 使用文档
- Store Limit 使用文档
- TiDB 工具
- 功能概览
- 适用场景
- 工具下载
- TiUP
- 文档地图
- 概览
- 术语及核心概念
- TiUP 组件管理
- FAQ
- 故障排查
- TiUP 命令参考手册
- 命令概览
- TiUP 命令
- TiUP Cluster 命令
- TiUP Cluster 命令概览
- tiup cluster audit
- tiup cluster check
- tiup cluster clean
- tiup cluster deploy
- tiup cluster destroy
- tiup cluster disable
- tiup cluster display
- tiup cluster edit-config
- tiup cluster enable
- tiup cluster help
- tiup cluster import
- tiup cluster list
- tiup cluster patch
- tiup cluster prune
- tiup cluster reload
- tiup cluster rename
- tiup cluster replay
- tiup cluster restart
- tiup cluster scale-in
- tiup cluster scale-out
- tiup cluster start
- tiup cluster stop
- tiup cluster template
- tiup cluster upgrade
- TiUP DM 命令
- TiUP DM 命令概览
- tiup dm audit
- tiup dm deploy
- tiup dm destroy
- tiup dm disable
- tiup dm display
- tiup dm edit-config
- tiup dm enable
- tiup dm help
- tiup dm import
- tiup dm list
- tiup dm patch
- tiup dm prune
- tiup dm reload
- tiup dm replay
- tiup dm restart
- tiup dm scale-in
- tiup dm scale-out
- tiup dm start
- tiup dm stop
- tiup dm template
- tiup dm upgrade
- TiDB 集群拓扑文件配置
- DM 集群拓扑文件配置
- TiUP 镜像参考指南
- TiUP 组件文档
- PingCAP Clinic 诊断服务 (Technical Preview)
- TiDB Operator
- Dumpling
- TiDB Lightning
- TiDB Data Migration
- 关于 Data Migration
- 快速开始
- 部署 DM 集群
- 入门指南
- 进阶教程
- 运维管理
- 参考手册
- 使用示例
- 异常解决
- 版本发布历史
- Backup & Restore (BR)
- TiDB Binlog
- TiCDC
- sync-diff-inspector
- TiSpark
- 参考指南
- 架构
- 监控指标
- 安全加固
- 权限
- SQL
- SQL 语言结构和语法
- SQL 语句
ADD COLUMN
ADD INDEX
ADMIN
ADMIN CANCEL DDL
ADMIN CHECKSUM TABLE
ADMIN CHECK [TABLE|INDEX]
ADMIN SHOW DDL [JOBS|QUERIES]
ADMIN SHOW TELEMETRY
ALTER DATABASE
ALTER INDEX
ALTER INSTANCE
ALTER PLACEMENT POLICY
ALTER TABLE
ALTER USER
ANALYZE TABLE
BACKUP
BEGIN
CHANGE COLUMN
CHANGE DRAINER
CHANGE PUMP
COMMIT
CREATE [GLOBAL|SESSION] BINDING
CREATE DATABASE
CREATE INDEX
CREATE PLACEMENT POLICY
CREATE ROLE
CREATE SEQUENCE
CREATE TABLE LIKE
CREATE TABLE
CREATE USER
CREATE VIEW
DEALLOCATE
DELETE
DESC
DESCRIBE
DO
DROP [GLOBAL|SESSION] BINDING
DROP COLUMN
DROP DATABASE
DROP INDEX
DROP PLACEMENT POLICY
DROP ROLE
DROP SEQUENCE
DROP STATS
DROP TABLE
DROP USER
DROP VIEW
EXECUTE
EXPLAIN ANALYZE
EXPLAIN
FLASHBACK TABLE
FLUSH PRIVILEGES
FLUSH STATUS
FLUSH TABLES
GRANT <privileges>
GRANT <role>
INSERT
KILL [TIDB]
LOAD DATA
LOAD STATS
MODIFY COLUMN
PREPARE
RECOVER TABLE
RENAME INDEX
RENAME TABLE
REPLACE
RESTORE
REVOKE <privileges>
REVOKE <role>
ROLLBACK
SELECT
SET DEFAULT ROLE
SET [NAMES|CHARACTER SET]
SET PASSWORD
SET ROLE
SET TRANSACTION
SET [GLOBAL|SESSION] <variable>
SHOW [BACKUPS|RESTORES]
SHOW ANALYZE STATUS
SHOW [GLOBAL|SESSION] BINDINGS
SHOW BUILTINS
SHOW CHARACTER SET
SHOW COLLATION
SHOW [FULL] COLUMNS FROM
SHOW CONFIG
SHOW CREATE PLACEMENT POLICY
SHOW CREATE SEQUENCE
SHOW CREATE TABLE
SHOW CREATE USER
SHOW DATABASES
SHOW DRAINER STATUS
SHOW ENGINES
SHOW ERRORS
SHOW [FULL] FIELDS FROM
SHOW GRANTS
SHOW INDEX [FROM|IN]
SHOW INDEXES [FROM|IN]
SHOW KEYS [FROM|IN]
SHOW MASTER STATUS
SHOW PLACEMENT
SHOW PLACEMENT FOR
SHOW PLACEMENT LABELS
SHOW PLUGINS
SHOW PRIVILEGES
SHOW [FULL] PROCESSSLIST
SHOW PROFILES
SHOW PUMP STATUS
SHOW SCHEMAS
SHOW STATS_HEALTHY
SHOW STATS_HISTOGRAMS
SHOW STATS_META
SHOW STATUS
SHOW TABLE NEXT_ROW_ID
SHOW TABLE REGIONS
SHOW TABLE STATUS
SHOW [FULL] TABLES
SHOW [GLOBAL|SESSION] VARIABLES
SHOW WARNINGS
SHUTDOWN
SPLIT REGION
START TRANSACTION
TABLE
TRACE
TRUNCATE
UPDATE
USE
WITH
- 数据类型
- 函数与操作符
- 聚簇索引
- 约束
- 生成列
- SQL 模式
- 表属性
- 事务
- 垃圾回收 (GC)
- 视图
- 分区表
- 临时表
- 缓存表
- 字符集和排序
- Placement Rules in SQL
- 系统表
mysql
- INFORMATION_SCHEMA
- Overview
ANALYZE_STATUS
CLIENT_ERRORS_SUMMARY_BY_HOST
CLIENT_ERRORS_SUMMARY_BY_USER
CLIENT_ERRORS_SUMMARY_GLOBAL
CHARACTER_SETS
CLUSTER_CONFIG
CLUSTER_HARDWARE
CLUSTER_INFO
CLUSTER_LOAD
CLUSTER_LOG
CLUSTER_SYSTEMINFO
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
DATA_LOCK_WAITS
DDL_JOBS
DEADLOCKS
ENGINES
INSPECTION_RESULT
INSPECTION_RULES
INSPECTION_SUMMARY
KEY_COLUMN_USAGE
METRICS_SUMMARY
METRICS_TABLES
PARTITIONS
PLACEMENT_POLICIES
PROCESSLIST
REFERENTIAL_CONSTRAINTS
SCHEMATA
SEQUENCES
SESSION_VARIABLES
SLOW_QUERY
STATISTICS
TABLES
TABLE_CONSTRAINTS
TABLE_STORAGE_STATS
TIDB_HOT_REGIONS
TIDB_HOT_REGIONS_HISTORY
TIDB_INDEXES
TIDB_SERVERS_INFO
TIDB_TRX
TIFLASH_REPLICA
TIKV_REGION_PEERS
TIKV_REGION_STATUS
TIKV_STORE_STATUS
USER_PRIVILEGES
VIEWS
METRICS_SCHEMA
- UI
- CLI
- 命令行参数
- 配置文件参数
- 系统变量
- 存储引擎
- 遥测
- 错误码
- 通过拓扑 label 进行副本调度
- 常见问题解答 (FAQ)
- 版本发布历史
- 术语表
任务前置检查
本文介绍了 DM 的任务前置检查功能。此功能用于提前检测出上游 MySQL 实例配置中可能存在的一些错误。
使用场景
为了使数据迁移任务顺利进行,DM 在启动迁移任务时会自动触发任务前置检查,并返回检查结果。只有当前置检查通过后,DM 才开始执行迁移任务。
如果你想要手动触发前置检查,运行 check-task
命令即可。
例如:
tiup dmctl check-task ./task.yaml
检查项说明
当任务前置检查被触发时,DM 会按照配置的迁移模式对相应的检查项进行检查。
本小节列出了前置检查中的所有检查项。
针对前置检查中必须通过的检查项,本文在检查项名称前标注了(必须)。
- 对于标注了(必须)的检查项,如果检查没有通过,DM 会在检查结束后返回错误并拒绝执行该迁移任务。此时,请依据错误信息修改配置,在满足检查项要求后重试。
- 对于未标注(必须)的检查项,如果检查没有通过,DM 会在检查结束后返回警告。如果检查结果中只有警告没有错误,DM 将自动开始执行该迁移任务。
通用检查项
对于任何一种迁移模式,前置检查都会包含以下通用检查项:
数据库版本
MySQL 版本 > 5.5
MariaDB 版本 >= 10.1.2
警告- 使用 DM 从 MySQL v8.0 迁移数据到 TiDB 目前为实验特性(从 DM v2.0 引入),不建议在生产环境下使用。
- 使用 DM 从 MariaDB 迁移数据到 TiDB 目前为实验特性,不建议在生产环境下使用。
上游 MySQL 表结构的兼容性
- 检查上游表是否设置了外键。TiDB 不支持外键,如果上游表设置了外键,则返回警告。
- (必须)检查字符集是否存在兼容性差异,详见 TiDB 支持的字符集。
- (必须)检查上游表中是否存在主键或唯一键约束(从 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_ignore_db
,那么检查需要迁移的库表,是否满足binlog_do_db
和binlog_ignore_db
的条件。
(必须)检查上游是否处于 Online-DDL 过程中,即创建了
ghost
表,但还未执行rename
的阶段。如果处于 online-DDL 中,则检查报错,请等待 DDL 结束后重试。
全量加增量数据迁移检查项
对于全量加增量数据迁移模式(task-mode: all
),除了通用检查项,前置检查还会包含全量数据迁移检查项,以及增量数据迁移检查项。
可忽略检查项
一般情况下前置检查项用于提前发现环境中可能存在的风险,不建议忽略。如果你的数据迁移任务面临特殊场景,你可以通过 ignore-checking-items
配置项来跳过部分检查项。
值 | 含义 |
---|---|
dump_privilege | 检查上游 MySQL 实例用户的 dump 相关权限 |
replication_privilege | 检查上游 MySQL 实例用户的 replication 相关权限 |
version | 检查上游数据库版本 |
server_id | 检查上游数据库是否设置 server_id |
binlog_enable | 检查上游数据库是否已启用 binlog |
table_schema | 检查上游 MySQL 表结构的兼容性 |
schema_of_shard_tables | 检查上游 MySQL 多实例分库分表的表结构一致性 |
auto_increment_ID | 关闭检查上游 MySQL 多实例分库分表的自增主键冲突 |
6.0 之前的版本支持忽略更多的检查项,但诸如 binlog_row_image
等参数,若配置错误可能导致同步时丢失数据,因此在 6.0 版本中移除了部分与数据安全相关的检查项。
配置检查参数
任务前置检查支持多线程并行。即使分表数目达到万级别,检查也可以在分钟级完成。
你可以通过数据迁移任务配置文件里 mydumpers
字段中的 threads
参数指定线程的数量。
mydumpers: # dump 处理单元的运行配置参数
global: # 配置名称
threads: 4 # dump 处理单元从上游数据库实例导出数据和执行前置检查时访问上游的线程数量,默认值为 4
chunk-filesize: 64 # dump 处理单元生成的数据文件大小,默认值为 64,单位为 MB
extra-args: "--consistency none" # dump 处理单元的其他参数,不需要在 extra-args 中配置 table-list,DM 会自动生成
threads
参数的值决定了上游和 DM 之间的物理连接数。过大的 threads
可能会加大上游的负载,请注意控制 threads
大小。