我目前正在协助将当前针对 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)