我的MariaDB服务器今天早些时候崩溃了,目前还在恢复中。错误日志显示
InnoDB:回滚:1项事务,519345行
从日志条目来看,回滚大约需要4小时才能完成。而且我的网站几乎没有响应,因为服务器忙着回滚。
根据受回滚事务影响的行数,我怀疑服务器试图回滚涉及日志表的事务。如果是这样的话,我不介意丢失数据。
如何找到受回滚事务影响的表?如果它确实是一个非关键的表,我如何跳过回滚?
发布于 2021-11-12 14:10:13
..。我的网站几乎没有响应,因为服务器忙于回滚。
坦率地说,我很惊讶这个数据库除了执行回滚之外,还会响应其他任何东西。
如果您有多个数据库,那么是的,它们都会受到严重影响。
在我看来,一个影响519k记录的事务听起来不像是一个“日志表”问题,或者,如果是的话,那么它是由一个似乎从未发出提交的进程更新的!(可能只在进程关闭时?)。
事务,包括其日志记录,应该尽可能短(即快速)。
对我来说,这听起来更像是一个中断的批次作业。
我怎么能找到受影响的桌子..。
我不确定你能不能。
如果它确实是一个非关键的表,我如何跳过回滚?
简短的回答-你不能。
回滚是实例恢复的一个基本部分,数据库在失败后必须通过回滚才能使数据恢复到良好的“已知状态”。
您可能可以对“未登录”的特定表进行更改(我不记得MariaDB是否支持这种更改),但这样做可能会给数据库恢复领域带来其他“有趣”的问题。
发布于 2021-11-12 07:02:49
我建议不要这样做,但是在启动过程中跳过回滚的唯一方法是通过强制innodb恢复。我们需要的选项是#3 (SRV_FORCE_NO_TRX_UNDO)。
您必须将以下内容添加到cnf的[mysqld]部分并重新启动:
innodb_force_recovery=3参考:https://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html
https://dba.stackexchange.com/questions/302511
复制相似问题