概览

最近更新时间:2025-08-08 16:51:21

我的收藏
本文汇总了 MySQL 系列前置校验中需要校验的参数供您参考。

源库

参数类型
参数
校验内容
说明
常规参数
部分实例参数检查/警告项检查
max_allowed_packet
目标库 max_allowed_packet 参数的取值需大于源库。推荐设置为1GB。
max_allowed_packet 为最大允许的传输包。设置太大,会使用更多内存导致丢包,无法捕捉异常大事务包 SQL;设置太小,可能会导致程序报错,备份失败,也会导致频繁的收发网络包,影响系统性能。
具体修改方法请参见 部分实例参数检查
常规参数
警告项检查
character_set_database
源库和目标库的字符集需保持一致。
character_set_database 是 MySQL 数据库中的一个系统变量,用于表示当前默认数据库的字符集。在 DTS 中,该参数常作为前置校验项,用于确保源库和目标库的字符集一致。
常规参数
警告项检查
character_set_server
源库和目标库的字符集需保持一致。
源库和目标库的字符集不一致可能会导致乱码。建议将源库和目标库字符集修改为一致。
具体修改方法请参见 警告项检查
常规参数
警告项检查
sql_mode
源库和目标库的 sql_mode 取值需保持一致。
源库和目标库的 sql_mode 取值需保持一致,否则会出现同步结果异常。
具体修改方法请参见 警告项检查
常规参数
警告项检查
explicit_defaults_for_timestamp
目标库 explicit_defaults_for_timestamp 参数需设置为 ON。
explicit_defaults_for_timestamp 用于控制 MySQL 如何处理 TIMESTAMP 列的默认值。取值说明如下:
OFF:MySQL 会将 TIMESTAMP 列的默认值设置为 CURRENT_TIMESTAMP。插入数据时,如果没有指定 TIMESTAMP 列的值,则该值会被设置为 CURRENT_TIMESTAMP。
ON:MySQL 不会自动将 TIMESTAMP 列的默认值设置为 CURRENT_TIMESTAMP。
DTS 在迁移/同步过程中,为了保证数据的一致性,建议目标端设置为 ON;如果目标端为 OFF 并且未按照提示修改参数,则选择同步含有 TIMESTAMP 列的数据后,可能会导致源和目标的表结构不一致。
具体修改方法请参见 周边检查
常规参数
部分实例参数检查
lower_case_table_names
源库和目标库 lower_case_table_names 参数必须一致。
lower_case_table_names 是 MySQL 设置大小写是否敏感的一个参数,不同的取值情况如下:Windows 或 macOS 环境对大小写是不敏感的,但是 Linux 环境却是敏感的,为了保证不同系统的兼容性,需要将大小写敏感规则设置统一。
0:表名存储为给定的大小写,比较的时候区分大小写。
1:表名存储在磁盘是小写的,比较的时候不区分大小写。
2:表名存储为给定的大小写,比较的时候是小写的。
具体修改方法请参见 部分实例参数检查
常规参数
Binlog 参数检查
server_id
server_id 参数需要手动设置,且值不能设置为0。
server_id 参数需要手动设置,且值不能设置为0。该参数系统预设值为1,如果查询该参数显示为1不一定正确,需要手动进行配置。
具体修改方法请参见 Binlog 参数检查
常规参数
Binlog 参数检查
binlog_format
binlog_format 参数必须设置为 ROW。
binlog_format 为 binlog 的记录模式,有以下三种:
STATEMENT:每一条会修改数据的 SQL 都会记录到 master 的 binlog 中,slave 在复制的时候,会执行和原来 master 端相同的 SQL。该模式可以减少 binlog 日志量,但是对某些特定的函数进行复制时,slave 端不能正确复制。
ROW:binlog 日志中会记录成每一行数据修改的形式,然后在 slave 端再对相同的数据进行修改。该模式会保证 master 和 slave 的正确复制,但是 binlog 日志量会增加。
MIXED:前两种模式的结合,MySQL 会根据执行的每一条具体的 SQL 语句来区分对待记录的日志形式,在 STATEMENT 和 ROW 之间选择一种。
综上,为了保证 master 和 slave 的正确复制,binlog_format 参数需要设置为 ROW。
具体修改方法请参见 Binlog 参数检查
常规参数
Binlog 参数检查
log_bin
log_bin 参数必须设置为 ON。
log_bin 是 binlog 的开关控制参数,需要将 binlog 打开,以便记录所有的数据库表结构和表数据变更日志。
具体修改方法请参见 Binlog 参数检查
常规参数
Binlog 参数检查
gtid_mode
源数据库为 MySQL/MariaDB/Percona/TDSQL-C MySQL 时,gtid_mode 只支持设置为 ON 和 OFF,建议将 gtid_mode 设置为 ON,设置为 OFF 会报警告,设置为 ON_PERMISSIVE 和 OFF_PERMISSIVE 会报错。
源数据库为 TDSQL MySQL 时,gtid_mode 必须设置为 ON,否则会报错。
GTID(Global Transaction Identifier, 全局事务标识),用于在 binlog 中唯一标识一个事务,使用 GTID 可以避免事务重复执行导致数据混乱或者主从不一致。
GTID 是 MySQL 5.6 的新特性,所以 MySQL 5.6 及之后版本存在此问题。
开启 GTID 后,在增量数据同步阶段,如果源实例发生 HA 切换,DTS 服务切换重连,任务几乎无感知;未开启 GTID,源实例发生 HA 切换,任务会因位点不续接而中断,且不可恢复。
gtid_mode 的取值如下,在修改 gtid_mode 的值时,只能从以下四个值逐级修改,例如,需要从 OFF 修改为 ON,则 gtid_mode 修改顺序为 OFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ON。
OFF:主库所有新启的事务以及从库的事务都要求是匿名事务。
OFF_PERMISSIVE:主库新启的事务是匿名事务,但从库事务允许是匿名的或者是 GTID 事务,但不允许只是 GTID 模式。
ON_PERMISSIVE:主库新启的事务是 GTID 事务,从库事务允许是匿名的或者是 GTID 事务。
ON:主库新启的事务是 GTID 事务,从库的事务也要求是 GTID 事务。
具体修改方法请参见 Binlog 参数检查
常规参数
Binlog 参数检查
binlog_row_value_options
不支持任何的 binlog 优化,binlog_row_value_options 参数值只能为空。
binlog_row_value_options 控制 binlog 行事件的存储格式(如 PARTIAL_JSON 仅记录 JSON 字段的修改部分),影响增量同步的数据完整性和效率。
常规参数
Binlog 参数检查
binlog_transaction_compression

不支持任何的事务压缩配置,binlog_transaction_compression 参数值只能为 OFF。
binlog_transaction_compression 是控制 binlog 事务压缩的开关参数,启用后会对事务数据进行压缩以减少存储和传输开销。
常规参数
Binlog 参数检查
binlog_legacy_event_pos
binlog_legacy_event_pos 参数需设置为 ON。
binlog_legacy_event_pos 是控制是否使用旧版 binlog 事件位置记录方式(以兼容 MySQL 复制链路)的参数,启用后会影响增量同步的位点解析逻辑,参数值需保持为 ON。
常规参数
Binlog 参数检查
binlog_row_image
binlog_row_image 参数必须设置为 FULL。
binlog_row_image 参数决定了 binlog 是如何记录前镜像(记录修改前的内容)和后镜像(记录修改后的内容)的,这会直接影响到数据闪回、主从复制等功能。binlog_row_image 参数只在 binlog_format 配置为 ROW 模式下生效。具体取值影响如下:
FULL:在 ROW 模式下,binlog 会记录前镜像和后镜像的所有列的数据信息。
MINIMAL:在 ROW 模式下,当表没有主键或唯一键时,前镜像记录所有列,后镜像记录被修改的列;如果存在主键或唯一键,不管是前镜像还是后镜像,都只记录有影响的列。
综上,binlog_row_image 需要配置为 FULL,源数据库的 binlog 记录全镜像。
具体修改方法请参见 Binlog 参数检查
常规参数
Binlog 参数检查
binlog_do_db、binlog_ignore_db
不允许设置 binlog_do_db、binlog_ignore_db。
binlog 会记录数据库所有执行的 DDL 和 DML 语句,而 do_db,ignore_db 则是设置 binlog 记录的过滤条件。
binlog_do_db:只记录指定数据库的二进制日志,默认全部记录。
binlog_ignore_db:不记录指定的数据库的二进制日志。
设置 do_db,ignore_db 后,会导致一些跨库操作 binlog 记录不全,主从复制出现异常,因此不建议设置。
具体修改方法请参见 Binlog 参数检查
常规参数
Binlog 参数检查
log_slave_updates
对于源实例为从库的情况,log_slave_updates 参数必须设置为 ON。
在主从复用结构中,从库开启 log-bin 参数,直接在从库操作数据时,可以记录在 binlog 中,但是从库从主库上复制数据时,不能记录在 binlog 中,所以从库作为其他从库的主库时,需要打开 log_slave_updates 参数。
具体修改方法请参见 Binlog 参数检查
常规参数
周边检查
innodb_stats_on_metadata
innodb_stats_on_metadata 参数需设置为 OFF。
innodb_stats_on_metadata 参数开启时,每当查询 information_schema 元数据库里的表,Innodb 就会更新 information_schema.statistics 表,导致访问时间变长。关闭后可加快对于 schema 库表的访问。
MySQL 5.6.6 之前版本 innodb_stats_on_metadata 参数预设值为 ON,需要修改为 OFF。MySQL 5.6.6 及其以后的版本预设值为 OFF,不存在问题。
具体修改方法请参见 周边检查
常规参数
部分实例参数检查
row_format
row_format 不能设置为 FIXED。
数据库中表的 row_format 的取值为 FIXED 时,表格中每行的存储长度超过限制值时会溢出,发生报错。因此需要修改为其他模式,如 DYNAMIC,使每行的存储长度会随内容的长度而变化。
具体修改方法请参见 部分实例参数检查
常规参数
部分实例参数检查
connect_timeout
connect_timeout 参数值必须大于10。
connect_timeout 为数据库的连接时间,超过 connect_timeout 设置值的连接请求将会被拒绝。如果设置过小,会导致数据库连接频繁断开,影响处理效率,因此建议该参数取值大于10。
具体修改方法请参见 部分实例参数检查
常规参数
部分实例参数检查
innodb_strict_mode
innodb_strict_mode 参数需设置为 OFF。
目标端为 MySQL8.0.26及之后版本,DTS 会检查 innodb_strict_mode 参数,建议在迁移/同步任务阶段将 innodb_strict_mode 参数设置为 OFF,若不为 OFF,DTS 会在前置校验给出提示。目标端为 MySQL8.0.26之前的版本,或者其他数据库类型时,DTS 会对该参数进行 session 级别的修改,改为 OFF。
参数说明:innodb_strict_mode 用于控制 InnoDB 存储引擎对一些不规范数据是否启用严格模式。
innodb_strict_mode=ON,InnoDB 存储引擎会执行严格的数据验证模式。如创建表(CREATE TABLE)、更改表(ALTER TABLE)和创建索引(CREATE INDEX)时,语法有错误,直接抛出错误。
innodb_strict_mode=OFF,InnoDB 存储引擎对数据验证放宽,遇到如上的错误语法不会报错,并且使用默认的语法替代错误的语法。
设置建议:如果源端数据库本身有不规范的数据,建议在迁移/同步任务阶段将 innodb_strict_mode 参数设置为 OFF,这样可以将数据可以正常同步到目标端。
具体修改方法请参见 部分实例参数检查
常规参数
视图检查
SQL SECURITY
源库中 DEFINER 对应的 user1( [DEFINER = user1])和执行任务账号 user2 需保持一致。
在导出视图结构时,DTS 会检查源库中 DEFINER 对应的 user1( [DEFINER = user1])和执行任务账号 user2 是否一致。
如果一致则迁移后不做改动。
如果不一致,则迁移后修改 user1 在目标库中的 SQL SECURITY 属性,由 DEFINER 转换为 INVOKER( [INVOKER = user1]),同时设置目标库中 DEFINER 为执行任务账号 user2([DEFINER = 执行任务账号 user2])。
SQL SECURITY 参数用来表示用户访问指定视图时,系统按照谁的权限来执行。
DEFINER:表示只有定义者才能执行。
INVOKER:表示拥有权限的调用者可以执行。默认情况下,系统指定为 DEFINER。

目标库

类别
参数
校验内容
说明
性能参数
警告项检查
thread_handling
thread_handling 参数未设置为 one-thread-per-connection。
MySQL 的配置文件中,thread_handling 参数没有设置为 one-thread-per-connection 表示开启线程池功能。
性能参数
警告项检查
thread_pool_size
目标库的 thread_pool_size 参数需大于等于16。
MySQL 8.0 版本开始支持线程池功能(Thread Pool),如果目标库开启了线程池功能,则需要目标库的 thread_pool size 参数大于等于16,以提升并发写入性能,小于16该检查项会报警告,提醒用户可能导致的写入性能问题。
常规参数
部分实例参数检查
lower_case_table_names
源库和目标库 lower_case_table_names 参数必须一致。
lower_case_table_names 是 MySQL 设置大小写是否敏感的一个参数,不同的取值情况如下:Windows 或 macOS 环境对大小写是不敏感的,但是 Linux 环境却是敏感的,为了保证不同系统的兼容性,需要将大小写敏感规则设置统一。
0:表名存储为给定的大小写,比较的时候区分大小写。
1:表名存储在磁盘是小写的,比较的时候不区分大小写。
2:表名存储为给定的大小写,比较的时候是小写的。
具体修改方法请参见 部分实例参数检查
常规参数
周边检查
rocksdb_skip_unique_check_tables
rocksdb_skip_unique_check_tables 参数需设置为 NULL。
目标端为腾讯云 MySQL 且为 RocksDB 引擎时,需要检查 rocksdb_skip_unique_check_tables 参数,推荐设置为 NULL,否则校验任务会失败。
如果设置为 .* ,表示所有表在插入或更新数据时将跳过唯一键检查;使用 DTS 进行传输任务,需要设置为 NULL,表示所有表在插入或更新数据时不会跳过唯一键检查。
当校验任务失败时,请 提交工单 申请,由腾讯云运维人员协助修改。
常规参数
高级对象检查
log_bin_trust_function_creators
log_bin_trust_function_creators 需设置为 ON。
log_bin_trust_function_creators 用于控制是否信任用户将存储函数写入 binlog 日志中。设置为 OFF ,仅 SUPER 权限的用户可将创建的存储函数操作写入 binlog 日志,设置为 ON ,非 SUPER 权限的用户也可将创建的存储函数操作写入 binlog 日志中。
具体修改方法请参见 高级对象检查
常规参数
TDSQL Proxy 检查
gateway.mode.multi_query.open
gateway.mode.multi_query.open 参数需设置为1。
目标库 TDSQL MySQL 使用 Proxy 方式连接的场景中,DTS 在目标库执行 SQL 的时候,是将多条语句放到一个 SQL 里去执行,需要将 gateway.mode.multi_query.open 参数设置为1,以支持多个 SQL 合并执行。参数如未打开,预校验任务会报错。
用户无法自行修改,请 提交工单 进行修改。