一、检查详情
·目标端为 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