本文为墨天轮数据库管理服务团队第182期技术分享,内容原创,作者为技术顾问孙文龙,如需转载请联系小墨(VX:modb666)并注明来源。如需查看更多文章可关注【墨天轮】公众号。

一、概述

数据库版本: MySQL 5.7

部署架构: 一主两从 增强半同步复制

故障现象:主节点异常宕机且启动失败

解决方案:使用备份恢复数据库

二、故障分析

2.1、现象

突然收到告警, mysql主节点异常,且发生主从切换。

启动日志如下:

image.png

image.png

mysqld got signal 6

2.2、原因分析

查看宕机时的日志:

image.png

image.png

从日志中看到,db1.tb1 表的主键索引的某个页面上field1 和 field2 两个校验字段中存储的 checksum 和计算得出的checksum 不匹配。因此数据库认为页面损坏,触发了数据库的保护机制导致数据库宕机并无法重启。

2.3、数据库恢复

使用备份进行恢复

1)从备库中备份数据(如果已经有备份则忽略)

image.png

创建备份,并使用stream将备份直接发送到待恢复的主机上

2)恢复

prepare

image.png

copy back

image.png

启动数据库并重建主从

image.png

三、如果没有备份

3.1、 尝试以恢复模式启动

在配置文件的 [mysqld]部分添加

innodb_force_recovery = 1

如果级别1无法启动,按顺序尝试:

image.png

3.2、逻辑导出

mysqldump --all-databases --single-transaction --routines --triggers --events > /tmp/full_backup_$(date +%Y%m%d).sql

或者逐个数据库导出

mysql -e "SHOW DATABASES;" | grep -v "Database" | grep -v "information_schema" | grep -v "performance_schema" | grep -v "sys" | while read db; do

echo "导出数据库: $db"

mysqldump --single-transaction "$db" > "/tmp/${db}backup.sql" 2>/tmp/dump${db}.log
done

如果导出失败, 则排除失败的表

mysql -e "SHOW TABLES FROM your_database" | grep -v "损坏的表名" | while read table; do
mysqldump --single-transaction your_database "$table" > "/tmp/your_database_${table}.sql"
done

3.3 恢复

将上述逻辑备份导入到一个新初始化的实例中


墨天轮从乐知乐享的数据库技术社区蓄势出发,全面升级,提供多类型数据库管理服务。墨天轮数据库管理服务旨在为用户构建信赖可托付的数据库环境,并为数据库厂商提供中立的生态支持。
墨天轮数据库服务官网:https://www.modb.pro/service

标签: none

添加新评论