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

MariaDB 10.11.6启用log_bin后事务提交报错解决方案咨询

问题解决方法

针对你遇到的MariaDB 10.11.6启用log_bin后,因调用未缓存存储过程触发mysql.proc(Aria引擎)查询,导致事务提交报错的问题,可通过以下方案解决:

方案一:将mysql.proc转换为InnoDB引擎(根治)

这是最彻底的解决方法,直接消除引擎不一致的根源:

  1. 先备份mysql系统库,避免操作失误导致数据丢失
  2. 执行SQL语句修改表引擎:
    ALTER TABLE mysql.proc ENGINE=InnoDB;
    
  3. 执行完成后无需重启服务即可生效,后续调用存储过程时,即使触发mysql.proc查询,也因引擎与自定义表一致,不会再触发事务提交错误。

方案二:预加载存储过程到元数据缓存(临时规避)

如果暂时无法修改系统表引擎,可通过预加载方式避免事务内查询mysql.proc:

  • 在数据库服务启动后,手动执行以下操作之一:
    1. 逐个调用所有存储过程(无参数的存储过程可直接执行CALL proc_name();,有参数的可传入合法测试参数)
    2. 执行查询存储过程定义的语句,触发缓存加载:
      SELECT ROUTINE_NAME, ROUTINE_DEFINITION 
      FROM INFORMATION_SCHEMA.ROUTINES 
      WHERE ROUTINE_SCHEMA = '你的数据库名' AND ROUTINE_TYPE = 'PROCEDURE';
      
  • 注意:元数据缓存会在服务重启、存储过程被修改/重建后失效,需重新执行预加载操作。

关于“能否确保mysql.proc始终处于元数据缓存中”的问题

无法永久确保。MariaDB的元数据缓存依赖内存存储,服务重启后缓存会被清空;当存储过程被修改、删除或重建时,对应缓存条目也会失效。只能通过每次服务启动后预加载的方式,让存储过程在大部分时间处于缓存中,但无法做到“始终”有效。

内容的提问来源于stack exchange,提问作者Nate L

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 19:32:08