本文为墨天轮数据库管理服务团队第182期技术分享,内容原创,作者为技术顾问孙文龙,如需转载请联系小墨(VX:modb666)并注明来源。如需查看更多文章可关注【墨天轮】公众号。
一、概述
数据库版本: MySQL 5.7
部署架构: 一主两从 增强半同步复制
故障现象:主节点异常宕机且启动失败
解决方案:使用备份恢复数据库
二、故障分析
2.1、现象
突然收到告警, mysql主节点异常,且发生主从切换。
启动日志如下:
mysqld got signal 6
2.2、原因分析
查看宕机时的日志:
从日志中看到,db1.tb1 表的主键索引的某个页面上field1 和 field2 两个校验字段中存储的 checksum 和计算得出的checksum 不匹配。因此数据库认为页面损坏,触发了数据库的保护机制导致数据库宕机并无法重启。
2.3、数据库恢复
使用备份进行恢复
1)从备库中备份数据(如果已经有备份则忽略)
创建备份,并使用stream将备份直接发送到待恢复的主机上
2)恢复
prepare
copy back
启动数据库并重建主从
三、如果没有备份
3.1、 尝试以恢复模式启动
在配置文件的 [mysqld]部分添加
innodb_force_recovery = 1如果级别1无法启动,按顺序尝试:
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; doecho "导出数据库: $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"
done3.3 恢复
将上述逻辑备份导入到一个新初始化的实例中
墨天轮从乐知乐享的数据库技术社区蓄势出发,全面升级,提供多类型数据库管理服务。墨天轮数据库管理服务旨在为用户构建信赖可托付的数据库环境,并为数据库厂商提供中立的生态支持。
墨天轮数据库服务官网:https://www.modb.pro/service
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。