检查详情
1. 建议源数据库环境变量参数
innodb_stats_on_metadata
设置为 OFF
。2. 目标库为 MySQL/MariaDB/Percona/TDSQL-C MySQL/TDSQL TDStore 时,建议目标库
explicit_defaults_for_timestamp
设置为ON
。如果目标库为 OFF
,DTS 会尝试修改目标端上该参数设置为ON
,仅在会话级别。目标端为 MySQL 8.0版本,DTS 可以成功修改目标端上会话级别的参数为
ON
。目标端为 MySQL 8.0以下的版本,或者其他数据库类型,DTS 无法修改成功,则初次校验任务不通过。用户可评估影响后跳过该参数检查,然后重新校验。
3. 目标端为腾讯云 MySQL 且为 RocksDB 引擎时,需要检查
rocksdb_skip_unique_check_tables
参数,推荐设置为 NULL
,否则校验任务会失败。如果设置为
.*
,表示所有表在插入或更新数据时将跳过唯一键检查;使用 DTS 进行传输任务,需要设置为 NULL
,表示所有表在插入或更新数据时不会跳过唯一键检查。当校验任务失败时,请 提交工单 申请,由腾讯云运维人员协助修改。
是否可跳过
出现校验不通过时,用户可评估影响后自行决定是否修改参数,如确认不需要修改,可跳过参数检查。
innodb_stats_on_metadata
:可跳过校验。explicit_defaults_for_timestamp
:可跳过校验。修复方法
修改 innodb_stats_on_metadata 参数
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,不存在问题。1. 登录源数据库。
2. 修改
innodb_stats_on_metadata
为 OFF
。set global innodb_stats_on_metadata = OFF;
3. 查看配置是否生效。
show global variables like '%innodb_stats_on_metadata%';
系统显示结果类似如下:
mysql> show global variables like '%innodb_stats_on_metadata%';+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| innodb_stats_on_metadata | OFF |+--------------------------+-------+1 row in set (0.00 sec)
4. 重新执行校验任务。
修改 explicit_defaults_for_timestamp 参数
参数说明
explicit_defaults_for_timestamp
用于控制 MySQL 如何处理 TIMESTAMP 列的默认值。取值说明如下:OFF:MySQL 会将 TIMESTAMP 列的默认值设置为 CURRENT_TIMESTAMP。插入数据时,如果没有指定 TIMESTAMP 列的值,则该值会被设置为 CURRENT_TIMESTAMP。
ON:MySQL 不会自动将 TIMESTAMP 列的默认值设置为 CURRENT_TIMESTAMP。
参数影响
该参数为 MySQL 5.6.6之后的版本特性,DTS 在迁移/同步过程中,为了保证数据的一致性,建议目标端设置为 ON;如果目标端为 OFF 并且未按照提示修改参数,则选择同步含有 TIMESTAMP 列的数据后,可能会导致源和目标的表结构不一致。
如果评估后要修改参数,请参考如下命令。
说明:
该参数修改需要重置数据库上的所有连接才能生效,建议不要在 session 级别设置该参数,否则可能无法查询到参数状态。
set global explicit_defaults_for_timestamp = ON