欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

禁用 MYISAM 引擎的 MySQL 插件

程序员文章站 2022-06-11 22:48:59
...

在无法控制最终用户使用 MySQL 时,就可能出现混合使用 InnoDB 和 MYISAM 的情况。这时就需要考虑为两种引擎各自配置缓存等资源,即使最后实际只会用 InnoDB 的时候也是如此,这就造成了无法充分利用资源,也增加了资源限制的难度。同时由于 MYISAM 引擎的稳

在无法控制最终用户使用 MySQL 时,就可能出现混合使用 InnoDB 和 MYISAM 的情况。这时就需要考虑为两种引擎各自配置缓存等资源,即使最后实际只会用 InnoDB 的时候也是如此,这就造成了无法充分利用资源,也增加了资源限制的难度。同时由于 MYISAM 引擎的稳定性问题,为了减少运维工作,通常也不希望用户去使用 MYISAM 引擎。这时候就想禁用掉它。但是 MYISAM 引擎被 MySQL 系统表使用,还可能用于内部临时表,所以不可能直接禁用,因此 mysqld 也没有 –skip-myisam 这样的参数。所以只能想别的办法。比如,只禁止创建新的 MYISAM 表,对于原有的表则没有影响。于是就做了这么一个插件

https://github.com/xiezhenye/mysql-plugin-disable-myisam

其实这个插件很简单,只是替换了 MYISAM 引擎的 create 入口,改为返回一个包装过的,替换了 create 方法的 ha_myisam 对象。在试图创建表的时候直接错误返回。

按装插件后,就无法再创建任何新的 MYISAM 表了

mysql> CREATE TABLE `test4` (
  `id` int(11) AUTO_INCREMENT,
  `value` varchar(30),
  PRIMARY KEY (`id`)
) ENGINE=MyISAM;
ERROR 1030 (HY000): Got error 1 from storage engine