首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在提交查询期间丢失到数据库的连接:事务是否成功?

在提交查询期间丢失到数据库的连接:事务是否成功?
EN

Database Administration用户
提问于 2023-05-20 16:47:05
回答 1查看 29关注 0票数 1

问题

最近,我在MySql (查询期间丢失到MySQL服务器的连接)为事务执行COMMIT语句(前面的update语句成功)时遇到了2013年的错误。这是由于提交期间发生了网络停机错误。

然后,我启动了一个新的连接,在检查事务效果之后,我可以看到事务确实已成功提交,并且没有错误(应用了更改)。

问题

COMMIT查询期间出现错误时,如何100%确保提交成功?有没有人发现类似的问题?当这种模棱两可的情况出现时,最好的方法是什么?有没有办法避免这种“提交歧义”?

以前的研究

我在这里发现了一些与其他数据库和MySql相关的问题:

但似乎没有办法避免这个问题?

谢谢!

EN

回答 1

Database Administration用户

发布于 2023-05-20 22:50:48

立即想到的是二进制日志。

COMMIT;命令总是记录在二进制日志中。您可以通过对二进制日志运行mysqlbinlog程序来证明这一点,您应该会看到一些。

有人在是在二进制日志之前还是之后回复客户端有关事务提交的信息?上发布了这个例子

代码语言:javascript
复制
# at 1016
[..]
SET TIMESTAMP=1458127130/*!*/;
create table tr (i int) engine=innodb
[...]
# at 1281
[..]
SET TIMESTAMP=1458127136/*!*/;
BEGIN
/*!*/;
# at 1384
[..]
SET TIMESTAMP=1458127136/*!*/;
insert into tr values(1),(2),(3)
/*!*/;
# at 1514
[...]
COMMIT/*!*/;

请注意什么是MySQL文档在“二进制日志”中写道

二进制日志记录是在语句或事务完成后,但在释放任何锁或完成任何提交之前立即完成的。这确保日志按提交顺序登录。

这意味着,即使COMMIT;没有进入二进制日志,更改也会在COMMIT;之前记录在二进制日志中。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/327326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档