更新时间:2024-06-07 GMT+08:00

数据库参数innodb_strict_mode一致性检查

检查源数据库和目标数据库的innodb_strict_mode参数是否一致性,若不一致,可能会导致任务失败,建议将参数变为一致。

数据库参数innodb_strict_mode用来设置是否开启严格检查模式。innodb_strict_mode=ON,表示执行时使用严格模式,当创建表(CREATE TABLE)、更改表(ALTER TABLE)和创建索引(CREATE INDEX)语句有错误时,不会触发警告信息,而是直接抛出错误。innodb_strict_mode=OFF,表示执行时使用非严格模式,即宽松的语法检查,遇到错误的语法时会使用默认的语法去替换。例如,MySQL 5.7.34版本,如果设置了innodb_strict_mode=ON,然后再执行建表语句CREATE TABLE t1(c1 int, c2 varchar(32)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED,会有报错Table storage engine for 't1' doesn't have this option。

如果在DRS任务中,源数据库innodb_strict_mode=OFF,目标数据库的innodb_strict_mode=ON,当执行的DDL有语法错误时,在源库执行不会报错,同步到目标库的时候会报错,导致任务失败

不通过原因

源数据库和目标数据库的innodb_strict_mode参数不一致。

处理建议

修改源数据库或者目标数据库的innodb_strict_mode参数,使其保持一致。
  • 如果为自建的MySQL数据库,可通过命令行方式修改。
    1. 通过以下命令查看参数值。
      SHOW VARIABLES LIKE "innodb_strict_mode";
    2. 使用命令修改参数。
      SET GLOBAL innodb_strict_mode = <value>;

      如果想将该选项关闭,则可以将<value>设置为0;若想打开严格模式,则将<value>设置为1。

  • 如果为RDS for MySQL实例,可通过修改数据库innodb_strict_mode参数实现,详情请参考修改实例参数章节。

更多其他类型数据库修改innodb_strict_mode的方法,可参考对应数据库的使用说明。