数据库参数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参数不一致。
处理建议
- 如果为自建的MySQL数据库,可通过命令行方式修改。
- 通过以下命令查看参数值。
SHOW VARIABLES LIKE "innodb_strict_mode";
- 使用命令修改参数。
SET GLOBAL innodb_strict_mode = <value>;
如果想将该选项关闭,则可以将<value>设置为0;若想打开严格模式,则将<value>设置为1。
- 通过以下命令查看参数值。
- 如果为RDS for MySQL实例,可通过修改数据库innodb_strict_mode参数实现,详情请参考修改实例参数章节。
更多其他类型数据库修改innodb_strict_mode的方法,可参考对应数据库的使用说明。