周边检查

最近更新时间: 2026-06-30 15:06:00

检查详情

  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 无法修改成功,则初次校验任务不通过。用户可评估影响后跳过该参数检查,然后重新校验。

是否可跳过

出现校验不通过时,用户可评估影响后自行决定是否修改参数,如确认不需要修改,可跳过参数检查。

  • 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_metadataOFF

    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