小编jar*_*ahl的帖子

在只读事务中创建临时表 - MYSQL 5.7

我目前正在协助将当前针对 mysql 5.5 DB 运行的应用程序迁移到 mysql 5.7 的集成测试。我们遇到了与在 mysql 5.5 中优化的功能相关的问题,通过将某些部分封装在只读事务中现在抛出以下错误,运行速度提高了约 30%:

错误代码:1792 无法在 READ ONLY 事务中执行语句。

我已经在互联网上搜索并没有找到任何解决方案。我知道在 mysql 5.6文档中添加了一个相关的限制,其中提到:

“在只读模式下,仍然可以使用 DML 语句更改使用 TEMPORARY 关键字创建的表。不允许使用 DDL 语句进行更改,就像使用永久表一样。”

这给我们带来了一个主要限制,因为其中一些只读事务调用创建临时表的存储过程,并且我们无法重写应用程序,因为这种只读优化很普遍。

本质上,我们希望找到一种解决方法或一种我们可以调整的配置,以允许下面的示例不给出只读错误。

START TRANSACTION READ only;
CREATE TEMPORARY TABLE IF NOT EXISTS table1 (account_id INT(10) UNSIGNED);
ROLLBACK;
Run Code Online (Sandbox Code Playgroud)

事先创建表不是一个选项,如果需要,下面的 mysql 服务器会话变量。任何帮助将非常感激!

会话变量:

Variable_name   Value
auto_increment_increment    1
auto_increment_offset   1
autocommit  ON
automatic_sp_privileges ON
avoid_temporal_upgrade  OFF
back_log    80
basedir C:\\Program Files\\MySQL\\MySQL Server 5.7\\
big_tables  OFF
bind_address    *
binlog_cache_size   32768
binlog_checksum CRC32
binlog_direct_non_transactional_updates OFF
binlog_error_action …
Run Code Online (Sandbox Code Playgroud)

mysql temp-tables readonly mysql-5.6 mysql-5.7

5
推荐指数
1
解决办法
1535
查看次数

标签 统计

mysql ×1

mysql-5.6 ×1

mysql-5.7 ×1

readonly ×1

temp-tables ×1