开发者社区 问答 正文

技术运维问题 - MYSQL使用 -RDS MySQL 5.6 版本GTID特性对临时表限制的处理

由于RDS MySQL 5.6 版本引入了GTID特性,因此要求应用不能够在事务中创建和删除临时表。
对应的错误信息:



When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE ca
n be executed in a non-transactional context only, and require that AUTOCOMMIT = 1.


遇到此类问题时可以参考如下两个方法处理:
1、建议



create temporary table
修改为 create table


create table


使用普通表替代临时表,规避这个问题 ;2、修改代码,将临时表的创建和删除操作放在事务外,并且保证会话的参数



autocommit = 1


如果问题还未能解决,请联系 售后技术支持

展开
收起
梨好橙 2018-09-23 10:59:54 2548 分享 版权
阿里云 AI 助理回答

遇到RDS MySQL 5.6版本中因GTID特性导致在事务中无法创建和删除临时表的问题,具体错误信息为:

When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1.

您可以尝试以下两种解决方案来规避此问题:

  1. 使用普通表替代临时表

    • 考虑将应用中的CREATE TEMPORARY TABLE语句修改为CREATE TABLE,使用持久化表来替代临时表。这样可以避免在事务上下文中使用临时表的限制。但请注意,这要求您管理表的生命周期,确保数据的一致性和及时清理以模拟临时表的行为。
  2. 调整代码逻辑与会话设置

    • 如果必须使用临时表,需要调整您的应用程序逻辑,确保CREATE TEMPORARY TABLEDROP TEMPORARY TABLE操作在事务外部执行。同时,确认当前会话的AUTOCOMMIT参数设置为1。这意味着每次SQL语句执行后都会自动提交,保持非事务性操作环境。

操作示例: - 确保会话的AUTOCOMMIT设置正确:

SET SESSION autocommit = 1;
  • 将原本在事务内的临时表操作移出,并检查逻辑的正确性和数据一致性。

如果按照上述建议操作后问题仍未解决,建议联系售后技术支持获取进一步的帮助。

请记得,在进行任何更改之前备份您的数据,以防操作过程中发生意外数据丢失。


参考来源: RDS MySQL 5.6 版本GTID特性对临时表限制的处理方法

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答