mysql - 更改默认存储引擎 Amazon RDS MariaDB

标签 mysql amazon-web-services mariadb myisam rds

我有数百个大表,已从我的 MySQL 数据库(使用亚马逊迁移服务)迁移到 RDS MariaDB。所有的存储引擎都从 MyISAM 转到了 InnoDB。这会对性能造成灾难性影响。

简而言之,我希望将默认存储引擎更改为 MyISAM,然后重新迁移所有表。我也愿意接受有关如何执行此操作的任何其他想法(例如在迁移工具中使用某种设置)。我真的不想创建一个脚本来更改它们,因为这意味着我每次导入数据时都需要这样做。

我已经尝试更改参数组 default_storage_engine,但是当我进入我正在运行的实例的参数组时,默认存储引擎显示为只读。 AWS Console Screenshot

我也尝试过创建一个新的参数组,结果也是如此。该值显示为“可修改:false”。

非常感谢任何帮助。我查看了其他答案,但我认为修改 my.cnf 与 RDS 无关。如果是,请告诉我。

最佳答案

显然 RDS 不允许您更改该参数。

您可以将每个表更改为 MyISAM,一次一个:

ALTER TABLE MyTable ENGINE=MyISAM;

您可以获得需要更改的表的列表:

SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE='InnoDB';

对于 future 的表格,不要依赖默认引擎。使用在 CREATE TABLE 语句中明确指定的引擎创建表。

不过,我要提醒您:MyISAM 正在被 MySQL 淘汰。它不支持并发写入、行级锁定、事务或原子更改。 InnoDB 一再被证明在性能上优于 MyISAM,除了极少数情况:

  • SELECT COUNT(*) FROM MyTable; 因为 MyISAM 将此统计信息内置到每个表中。不可否认,这是 InnoDB 或任何 MVCC 架构的一大弱点。
  • 表格扫描。但是无论如何你不应该进行表扫描,你应该进行索引查找。针对 InnoDB 的优化查询通常比针对 MyISAM 的表扫描在性能方面要好得多。

我鼓励您找出查询优化并坚持使用 InnoDB。

关于mysql - 更改默认存储引擎 Amazon RDS MariaDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46381942/

相关文章:

mysql - 为什么 phpmyadmin 会明显快于 mysql 命令行?

mysql - MariaDB 在 MySQL 上运行时创建函数时出错

mysql - 根据某些条件返回行,如果没有行符合条件,则返回 mariadb sql 中的所有行

java - 从循环线程返回多个值而不用Java杀死它

mysql - 试图将一些传感器信息从 mysql 绘制到 grafana

php - 复制(更新)同一张表中的某些内容

node.js - 多个 AWS 实例和 Node 事件

php - SQLSTATE[HY000] : General error: 1364 Field 'name' doesn't have a default value laravel 5. 5

json - 解析仪表板为空

java - AWS Elastic Beanstalk 上的 Spring Boot/Tomcat 仅显示 404 页面