当前位置: 首页 > news >正文

【运维笔记】数据库无法启动,数据库炸后备份恢复数据

事情起因

在做docker作业的时候,把卷映射到了宿主机原来的mysql数据库目录上,宿主机原来的mysql版本为8.0,docker容器版本为5.6,导致翻车。

具体操作

备份目录

将/var/lib/mysql备份到~/mysql_backup:cp /var/lib/mysql ~/mysql_backup -r

重装mysql

教程

第一次恢复数据

尝试根据备份文件进行恢复。

把备份的数据库guess_word_game拷贝到新的数据库文件目录中:

# 关闭mysql服务 systemctl stop mysqld
mkdir /var/lib/mysql/guess_word_game cp ~/mysql_backup/guess_word_game/* /var/lib/mysql/guess_word_game/ -r
# 修改所有者
chown -R mysql:mysql /var/lib/mysql
# 启动mysql服务
systemctl start mysqld

重启mysql服务后,发现没有guess_word_game数据库。

覆盖ibdata1到数据目录中:

# 关闭mysql服务 systemctl stop mysqld
cp ~/mysql_backup/ibdata1 /var/lib/mysql
# 修改所有者
chown -R mysql:mysql /var/lib/mysql

重启mysql服务,发现启动失败

查看日志less /var/log/mysqld.log

file

又炸了–,重装吧,原因可能是我用hyperf的migrate建表了,然后导致数据不对。

第二次恢复数据

查阅文档,终于找到解决方法:博客网址,只需把备份目录中的文件迁移到数据库目录中即可,然后再把需要恢复的数据库文件夹迁移进去。

file

  • ibdata1:保存表中元信息,mysql8把表中元信息整合到了.ibd中了
  • ib_logfile0/1:redo日志
  • ib_buffer_pool:缓冲池
  • auto.cnf:存储了server-uuid的值,集群模式下有用
  • mysql.ibd:存储着一些MySQL服务器内部的元数据信息,例如用户权限、存储引擎、字符集等等

迁移完后,嗯,不出意外的话,又出意外了。

file

这里说mysql版本号太旧,新建的文件是80032版本的,而数据库版本是80031版本的,尼玛这也不兼容,好烦,只能重装新版mysql了。

重装之后,数据恢复了555555

file

有可能是我在/etc/my.cnf中写了innodb_force_recovery=8,删掉再重启试试

file

嗯,我又把redo_log迁移过去了,一夜回到解放前。吐了。。。

第三次恢复数据

不用重装mysql,直接删除/var/lib/mysql目录,这次只迁移ibdata1、mysql.ibd和对应数据库文件夹,更改文件夹权限,然后重启mysqld服务,发现不报错了,并且数据得到恢复。

file

可以发现,密码没有重置、且对数据库操作权限都在,所以判断这些内容都存在mysql.ibd中

总结

  • mysql无法启动时,立即将数据文件备份,数据文件目录默认在:/var/lib/mysql中。
  • innodb_force_recovery:故障时候强制恢复,使用这个的时候可以忽略错误正常启动mysql,具体见官方文档(文档中有数字1-6的具体解释,我也不知道数字8代表什么,我就不知道在哪个博客看到8我就照搬了–,没自己脑子)
  • 各个文件的意义
    • ibdata1:保存表中元信息,mysql8把表中元信息整合到了.ibd中了
    • ib_logfile0/1:redo日志
    • ib_buffer_pool:缓冲池
    • auto.cnf:存储了server-uuid的值,集群模式下有用
    • mysql.ibd:存储着一些MySQL服务器内部的元数据信息,例如用户权限、存储引擎、字符集等等
    • .ibd:储存了表中的数据信息,B+树

其他

其实恢复还有几种方法,比如说:

  • 通过innodb_force_recovery参数强制启动mysql服务后,对数据库数据进行转储sql(适用于无bin log的情况)
  • 通过binlog进行数据恢复(没试过,下次试一下)
  • 通过备份进行数据恢复(最差方法)

在数据恢复中犯的错误

照搬内容,不了解别人为什么这么做,比如说照搬第二次恢复数据中别人的操作步骤,导致把redolog二次迁移,而这次故障原因就是redolog的问题

参考资料

innodb_force_recovery

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 深入理解JS中的发布订阅模式和观察者模式
  • Windows系统设置暂停更新,暂停时间可达3000天,“永久”暂停更新,亲测有效
  • 企业产品网络安全建设日志0725
  • 商场导航系统:从电子地图到AR导航,提升顾客体验与运营效率的智能解决方案
  • 政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署LivePortrait :通过缝合和重定向控制实现高效的肖像动画制作
  • 无人机制造工艺流程详解
  • 深入探索SemiDrive E3系列的MCU SSDK
  • 算法 定长按组翻转链表
  • 合作伙伴中心Partner Center中添加了Copilot预览版
  • 探索 IT 领域的新宠儿:量子计算
  • CTF-NSSCTF题单[GKCTF2020]
  • 为什么有了MAC还需要IP?
  • Linux 大页修改
  • 【C++】深度解析:用 C++ 模拟实现 list 类,探索其底层实现细节
  • vue3响应式转换常用API
  • [LeetCode] Wiggle Sort
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • conda常用的命令
  • express + mock 让前后台并行开发
  • javascript数组去重/查找/插入/删除
  • Python进阶细节
  • scala基础语法(二)
  • tab.js分享及浏览器兼容性问题汇总
  • 浮动相关
  • 让你的分享飞起来——极光推出社会化分享组件
  • 温故知新之javascript面向对象
  • 线上 python http server profile 实践
  • 用jQuery怎么做到前后端分离
  • 正则与JS中的正则
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • # dbt source dbt source freshness命令详解
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • #预处理和函数的对比以及条件编译
  • (Java数据结构)ArrayList
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (八十八)VFL语言初步 - 实现布局
  • (二)fiber的基本认识
  • (分布式缓存)Redis持久化
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • ***检测工具之RKHunter AIDE
  • .md即markdown文件的基本常用编写语法
  • .NET Core 2.1路线图
  • .net Stream篇(六)
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .Net 代码性能 - (1)
  • .NET 分布式技术比较
  • .net2005怎么读string形的xml,不是xml文件。
  • @EnableConfigurationProperties注解使用