上云无忧 > 文档中心 > 百度智能云云数据库RDS disabled_storage_engines参数实现表引擎自动转换
云数据库 RDS
百度智能云云数据库RDS disabled_storage_engines参数实现表引擎自动转换

文档简介:
disabled_storage_engines参数是5.7.8版本新引入的参数,它用来设置在CREATE TABLE时被禁用的存储引擎。 举例:创建新表时禁用MyISAM和MEMORY引擎。 [mysqld] disabled_storage_engines="MyISAM,MEMORY" for MySQL 版
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

背景

disabled_storage_engines参数是5.7.8版本新引入的参数,它用来设置在CREATE TABLE时被禁用的存储引擎。 举例:创建新表时禁用MyISAM和MEMORY引擎

[mysqld]
disabled_storage_engines="MyISAM,MEMORY"

问题现象

借助disabled_storage_engines参数,可以在建表时实现存储引擎自动转换。例如:执行如下建表SQL

CREATE TABLE tb_01 (
id int(11) NOT NULL AUTO_INCREMENT,
age int(11) NOT NULL DEFAULT '0',
name varchar(64) NOT NULL DEFAULT '',
PRIMARY KEY (id)
) ENGINE=MyISAM;

创建完成后有warnings返回,并且表的存储引擎自动转换成为InnoDB引擎:

原因分析

当在sql_mode中不设置NO_ENGINE_SUBSTITUTION,且CREATE TABLE中的ENGINE子句指定的存储引擎被参数disabled_storage_engines禁用,MySQL会把新建表的引擎改为默认存储引擎(InnoDB)。

解决方案

按照下面三个步骤设置参数,新建表时可以把指定的存储引擎转换成InnoDB引擎:

  1. 设置被禁用的存储引擎,例如:禁用MyISAM和MEMORY引擎:
[mysqld]
disabled_storage_engines="MyISAM,MEMORY"

  1. sql_mode设置中不含NO_ENGINE_SUBSTITUTION:
SET sql_mode='';

  1. 设置默认存储引擎是InnoDB:
SET GLOBAL default_storage_engine=InnoDB;

结论建议

  • 从稳定性和性能多方面考虑,针对MySQL数据库中的存储引擎,推荐使用InnoDB引擎
  • 建议设置disabled_storage_engines参数,把MyISAM、MEMORY等存储引擎禁用,并且能够建表时自动转换成InnoDB引擎
  • MySQL5.7.23之前的版本存在Bug,disabled_storage_engines参数设置后不会实现自动转换,Bug说明如下:

Bug #27502530
With the NO_ENGINE_SUBSTITUTION SQL mode disabled, an error (rather than substitution) occurred for
 CREATE TABLE and ALTER TABLE if the desired engine was disabled using the disabled_storage_engines system variable.

  • 分区表无法实现自动引擎转换功能,创建被禁用引擎的分区表会报错,原因是MySQL只能对分区表的主表进行引擎转换,但不能对分区表的子表进行转换,导致报错:
ERROR 1497 (HY000): The mix of handlers in the partitions is not allowed in this version of MySQL
相似文档
  • 客户反馈,应用程序经常会报连接失效需要重新建立连接。连接超时主要由interactive_timeout和wait_timeout影响,本篇文章针对这两个参数进行详细介绍。 for MySQL 版
  • 百度云支持更改数据库innodb_strict_mode设置参数,也可以session级别更改,该参数修改后立即生效,不需要重启实例: innodb_strict_mode=ON,表示使用严格模式,当创建表(CREATE TABLE)、更改表(ALTER TABLE)和创建索引(CREATE INDEX)语句时,如果写法有错误,不会有警告信息,而是直接抛出错误。 for MySQL 版
  • 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 版
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部