MYSQL异常崩溃后启动失败处理
  IE5LYMWlmdvL 2023年11月02日 54 0

故障概述

接到运维人员信息,研发MYSQL数据库无法启动。经过分析得出是数据目录存放在操作系统根目录,由于数据量不断增大,根目录爆满,导致数据库异常崩溃。尝试重新启动后发现err日志显示8个XA事务丢失,引发数据不一致。通过添加--tc-heuristic-recover=roolback重启mysqld进程,回滚异常事务。同时在配置文件添加innodb_fore_recovery=3后强制重启数据库成功。

故障分析和恢复    

由于根目录爆满,首先将mysql数据文件拷贝到lvdata目录,同时对err日志文件清空 ,执行cat /dev/null>mysqld.log ,腾出部分可用空间。

MYSQL异常崩溃后启动失败处理_innodb_fore_recovery

修改my.cnf文件datadir参数为/lvdata/mysql。重启数据库后发现日志报以下错误:

[ERROR] Found 8 prepared transactions! It means that mysqld was not shut down properly last time and critical recovery information (last binlog or tc.log file) was manually deleted after a crash. You have to start mysqld with --tc-heuristic-recover switch to commit or rollback pending transactions.

提示数据库崩溃后,存在8个异常事务。需要使用--tc-heuristic-recover参数重启mysqld进程。执行以下命令:

mysqld  --user=mysql  --tc-heuristic-recover=rollback &

此时日志提示以下错误:

MYSQL异常崩溃后启动失败处理_heuristic_02

查询官方文档:

MYSQL异常崩溃后启动失败处理_heuristic_03

按照官方说明 这个参数 tc-heuristic-recover 用 rollback  或则 commit 之后 ,会执行一次恢复。同时会存在以上错误。因此,只需要执行一次tc-heuristic-recover启动即可。在配置文件中添加innodb_force_recovery=3参数,进行重启后,此时数据库能强制拉起来。

 由于此时数据库处于不一致状态,因此需要对数据进行逻辑导出:

nohup mysqldump -uroot -p --all-databases --triggers --routines --events > /lvdata/alldbnew.sql &

该服务器为单节点的PXC,并未构成集群的条件。因此删除PXC集群软件,采用单实例来重建数据库

yum remove -y percona-xtrabackup* Percona-XtraDB-Cluster*

数据库安装完后,导入数据:

SET GLOBAL foreign_key_checks=0;
SET GLOBAL unique_checks=0;
SET GLOBAL innodb_flush_log_at_trx_commit=0;
SET GLOBAL sync_binlog=0;
source /lvdata/alldbnew.sql
SET GLOBAL foreign_key_checks=1;
SET GLOBAL unique_checks=1;
SET GLOBAL innodb_flush_log_at_trx_commit=1;
SET GLOBAL sync_binlog=1;FLUSH PRIVILEGES;

  至此,数据库恢复完成。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
IE5LYMWlmdvL