上云无忧 > 文档中心 > 百度智能云云数据库RDS innodb_strict_mode参数使用详解
云数据库 RDS
百度智能云云数据库RDS innodb_strict_mode参数使用详解

文档简介:
百度云支持更改数据库innodb_strict_mode设置参数,也可以session级别更改,该参数修改后立即生效,不需要重启实例: innodb_strict_mode=ON,表示使用严格模式,当创建表(CREATE TABLE)、更改表(ALTER TABLE)和创建索引(CREATE INDEX)语句时,如果写法有错误,不会有警告信息,而是直接抛出错误。 for MySQL 版
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

背景

百度云支持更改数据库innodb_strict_mode设置参数,也可以session级别更改,该参数修改后立即生效,不需要重启实例:

  • innodb_strict_mode=ON,表示使用严格模式,当创建表(CREATE TABLE)、更改表(ALTER TABLE)和创建索引(CREATE INDEX)语句时,如果写法有错误,不会有警告信息,而是直接抛出错误。
  • innodb_strict_mode=OFF,表示使用非严格模式,即使用宽松的语法检查,并且使用默认的语法 替代错误的语法。

参数设置请参考:百度云RDS参数设置指南

问题现象

某百度云RDS用户在将IDC自建数据库迁移上云时,建表失败报错。

ERROR 1031 (HY000): Table storage engine for 'tb_01' doesn't have this option

原因分析

用户查看上游客户的建表SQL语句:

CREATE TABLE `tb_01` (
`id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;

下游云数据库执该sql时报错:因此判断数据库执行drop database命令失败,转而生成drop table操作,由于表名都是小写字母,导致删除含大写字母的表失败。

CREATE TABLE `tb_01` (
`id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;
ERROR 1031 (HY000): Table storage engine for 't_rf' doesn't have this option

得到用户授权后,由百度云工程师对比客户自建数据库和云上数据库的配置参数,发现存在如下差异:

参数 客户IDC 百度云RDS
innodb_strict_mode OFF ON

解决方案

更改百度云数据库全局参数:innodb_strict_mode =OFF后测试,建表成功,但是存在Warning信息:

CREATE TABLE tb_01 ( id int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED; Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show warnings;

Level Code Message
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT

案例复现

当前参数环境innodb_strict_mode=ON(严格模式),在baidu_dba库下创建表,其中一个表名大写、两个表名是小写,SQL语句如下:

CREATE TABLE tb_01 (
   id int(11) NOT NULL AUTO_INCREMENT,
   name varchar(64) DEFAULT NULL,
   PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;
ERROR 1031 (HY000): Table storage engine for 't_01' doesn't have this option

在控制台修改innodb_strict_mode=OFF(非严格模式) 登录数据库重新建表 则建表成功,并报warning:

Level Code Message
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT

总结建议

  • 数据库迁移上云,建议参数 innodb_strict_mode 迁移前后保持一致
  • 云上新建数据库,建议使用严格模式,即 innodb_strict_mode=ON

MySQL官方文档参考:https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_strict_mode

相似文档
  • log_timestamps参数是MySQL在5.7.2版本新引入的参数,这个参数主要是控制MySQL的错误日志、慢查询日志、genera log等记录日志的显示时间参数,但不会影响写到表 (mysql.general_log, mysql.slow_log) 中的显示时间。 for MySQL 版
  • 云数据库 RDS(Relational Database Service)是一种专业、高性能、高可靠的云数据库服务,为您提供可靠的数据备份恢复、完备的安全管理、完善的监控、可轻松扩展等功能支持。相对于自建数据库,云数据库 RDS 具有更经济、更专业、更高效、更可靠、简单易用等特点,使您更专注于核心业务。 for MySQL 版 for SQL Server 版 for PostgreSQL 版
  • 用户在做性能测试时,可以参考以下推荐配置和测试方法自己做,也可以发工单让百度智能云工程师协助做。 下面环境,由客户根据需要选择。如果是跟其他云厂商做性能对比,注意保持多个环境一致。 for MySQL 版 for SQL Server 版 for PostgreSQL 版
  • 云数据库 RDS 资源因为欠费被暂停使用了,充值之后云数据库 RDS 实例会自动恢复吗? 云数据库 RDS 实例欠费后,状态会变成“欠费中”,用户续费后云数据库 RDS 实例会立刻恢复使用。 for MySQL 版
  • 如何登录云数据库 RDS 数据库实例? 请参考操作指南中的使用云数据库 RDS 实例。 云数据库 RDS 目前支持哪几类数据库引擎? 云数据库 RDS 目前支持 MySQL、SQL Server、PostgreSQL 数据库。 目前暂无计划支持 Oracle 数据库,用户可以选择自己申请BCC虚机搭建这些类型的数据库。 for MySQL 版
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部