技术分享 | MySQL数据文件坏快导致数据库无法启动
本文为墨天轮数据库管理服务团队第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]部分添加 如果级别1无法启动,按顺序尝试: 3.2、逻辑导出 或者逐个数据库导出 echo "导出数据库: $db" 如果导出失败, 则排除失败的表 3.3 恢复 将上述逻辑备份导入到一个新初始化的实例中 墨天轮从乐知乐享的数据库技术社区蓄势出发,全面升级,提供多类型数据库管理服务。墨天轮数据库管理服务旨在为用户构建信赖可托付的数据库环境,并为数据库厂商提供中立的生态支持。一、概述
二、故障分析
三、如果没有备份
innodb_force_recovery = 1mysqldump --all-databases --single-transaction --routines --triggers --events > /tmp/full_backup_$(date +%Y%m%d).sqlmysql -e "SHOW DATABASES;" | grep -v "Database" | grep -v "information_schema" | grep -v "performance_schema" | grep -v "sys" | while read db; domysqldump --single-transaction "$db" > "/tmp/${db}backup.sql" 2>/tmp/dump${db}.log
donemysql -e "SHOW TABLES FROM your_database" | grep -v "损坏的表名" | while read table; do
mysqldump --single-transaction your_database "$table" > "/tmp/your_database_${table}.sql"
done
墨天轮数据库服务官网:https://www.modb.pro/service