检查详情
- 建议源数据库环境变量参数
innodb_stats_on_metadata设置为OFF。 - 目标库为 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 无法修改成功,则初次校验任务不通过。用户可评估影响后跳过该参数检查,然后重新校验。
- 目标端为 MySQL 8.0版本,DTS 可以成功修改目标端上会话级别的参数为
是否可跳过
出现校验不通过时,用户可评估影响后自行决定是否修改参数,如确认不需要修改,可跳过参数检查。
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,不存在问题。
登录源数据库。
修改
innodb_stats_on_metadata为OFF。set global innodb_stats_on_metadata = OFF;查看配置是否生效。
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)重新执行校验任务。
修改 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