You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Aurora MySQL创建MyISAM表被自动改为InnoDB问题咨询

问题解答

关于RDS Aurora MySQL的引擎限制

是的,你使用的AWS Aurora MySQL 5.7.mysql_aurora.2.10.2版本强制仅支持InnoDB引擎,这是Aurora的底层设计决定的:

  • Aurora基于InnoDB深度优化,完全依赖其事务、日志和存储架构,不兼容MyISAM、MEMORY等非InnoDB引擎;
  • 无论你显式指定ENGINE=MYISAM创建表,还是用ALTER TABLE尝试修改引擎,RDS都会自动将表转换为InnoDB,且无法通过参数配置更改这一行为。

解决SIGNAL回滚INSERT日志的方案

因为InnoDB是事务型引擎,SIGNAL抛出异常会触发整个事务回滚,导致之前的日志插入操作被撤销。要实现“记录日志后抛出异常且日志不丢失”的需求,只需将日志插入操作放在独立的事务中提交,再执行SIGNAL即可。

直接执行的示例代码

-- 独立事务插入日志并提交
START TRANSACTION;
INSERT INTO Log(type, info, date) VALUES("ERROR", "Error happened...!", CURRENT_TIMESTAMP());
COMMIT;

-- 抛出异常,此时不会回滚已提交的日志
SIGNAL CUSTOM_EXCEPTION SET MESSAGE_TEXT = "Error happened...";

存储过程中的示例代码

如果是在存储过程中使用,需要显式控制事务边界:

DELIMITER //
CREATE PROCEDURE record_error_and_throw()
BEGIN
    -- 插入日志并提交
    START TRANSACTION;
    INSERT INTO Log(type, info, date) VALUES("ERROR", "Error happened...!", CURRENT_TIMESTAMP());
    COMMIT;
    
    -- 抛出异常
    SIGNAL CUSTOM_EXCEPTION SET MESSAGE_TEXT = "Error happened...";
END //
DELIMITER ;

这样日志会被持久化保存,后续的异常抛出不会影响已提交的日志记录。

内容的提问来源于stack exchange,提问作者Savo Simeunovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:15:36