首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到正在回滚的事务

如何找到正在回滚的事务
EN

Database Administration用户
提问于 2021-11-12 05:57:05
回答 2查看 612关注 0票数 0

我的MariaDB服务器今天早些时候崩溃了,目前还在恢复中。错误日志显示

InnoDB:回滚:1项事务,519345行

从日志条目来看,回滚大约需要4小时才能完成。而且我的网站几乎没有响应,因为服务器忙着回滚。

根据受回滚事务影响的行数,我怀疑服务器试图回滚涉及日志表的事务。如果是这样的话,我不介意丢失数据。

如何找到受回滚事务影响的表?如果它确实是一个非关键的表,我如何跳过回滚?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2021-11-12 14:10:13

..。我的网站几乎没有响应,因为服务器忙于回滚。

坦率地说,我很惊讶这个数据库除了执行回滚之外,还会响应其他任何东西。

如果您有多个数据库,那么是的,它们都会受到严重影响。

在我看来,一个影响519k记录的事务听起来不像是一个“日志表”问题,或者,如果是的话,那么它是由一个似乎从未发出提交的进程更新的!(可能只在进程关闭时?)。

事务,包括其日志记录,应该尽可能短(即快速)。

对我来说,这听起来更像是一个中断的批次作业。

我怎么能找到受影响的桌子..。

我不确定你能不能。

如果它确实是一个非关键的表,我如何跳过回滚?

简短的回答-你不能。

回滚是实例恢复的一个基本部分,数据库在失败后必须通过回滚才能使数据恢复到良好的“已知状态”。

您可能可以对“未登录”的特定表进行更改(我不记得MariaDB是否支持这种更改),但这样做可能会给数据库恢复领域带来其他“有趣”的问题。

票数 2
EN

Database Administration用户

发布于 2021-11-12 07:02:49

我建议不要这样做,但是在启动过程中跳过回滚的唯一方法是通过强制innodb恢复。我们需要的选项是#3 (SRV_FORCE_NO_TRX_UNDO)。

您必须将以下内容添加到cnf的[mysqld]部分并重新启动:

代码语言:javascript
复制
innodb_force_recovery=3

参考:https://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html

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

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

复制
相关文章

相似问题

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