AWS EC2上MySQL数据库丢失如何恢复?实例类型变更后数据失踪
问题分析与恢复步骤
1. 优先检查RECOVER_YOUR_DATA目录
这个目录是异常信号,先查看其中内容:
ls -al /var/lib/mysql/RECOVER_YOUR_DATA cat /var/lib/mysql/RECOVER_YOUR_DATA/*
如果存在勒索提示,说明数据库被加密,优先用备份恢复;若无有效提示,继续排查。
2. 确认MySQL数据目录配置
检查MySQL配置文件中的datadir参数,确认当前MySQL加载的是否为预期的数据目录:
grep datadir /etc/my.cnf # 不同系统配置路径可能为/etc/mysql/my.cnf
同时查看MySQL启动日志验证加载目录:
journalctl -u mysqld | grep datadir
如果datadir指向非/var/lib/mysql的路径,原spring数据库可能在该路径下。
3. 验证EBS卷挂载正确性
从df -h输出看,当前仅根卷/dev/xvda1挂载,若原MySQL数据在独立EBS卷上,需排查挂载状态:
- 列出所有块设备,确认是否有未挂载的数据卷:
lsblk
- 检查
/etc/fstab的持久化挂载配置,看是否有未生效的挂载项:
cat /etc/fstab
- 若发现未挂载卷,临时挂载验证:
mkdir /tmp/old_mysql mount /dev/xvdb /tmp/old_mysql # 替换为实际未挂载卷的设备名 ls -al /tmp/old_mysql
如果此处能看到spring目录,说明之前挂载错误,重新配置挂载即可恢复数据。
4. 检查InnoDB数据文件完整性
InnoDB的ibdata1存储表空间数据,可通过工具检测残留数据:
- 先停止MySQL服务:
systemctl stop mysqld
- 备份当前数据目录(避免操作损坏现有文件):
cp -r /var/lib/mysql /var/lib/mysql_backup
- 使用
innochecksum检测ibdata1完整性:
innochecksum /var/lib/mysql/ibdata1
若检测到spring库的表信息,可尝试通过专业工具提取恢复。
5. 排查备份与快照
- 检查本地是否存在
mysqldump备份文件:
find / -name "*.sql" | grep spring
- 登录AWS控制台查看对应EBS卷的历史快照,若有快照可创建新卷挂载到实例,提取原数据。
6. 分析异常日志
查看实例切换前后的系统与MySQL日志,定位异常触发点:
cat /var/log/messages | grep -i mysql journalctl -u mysqld --since "2024-07-08 13:00" --until "2024-07-08 22:00"
重点关注MySQL崩溃、权限变更、异常启动的记录。
内容的提问来源于stack exchange,提问作者HyeonKyeong Park
相关产品推荐
相关产品推荐

