数据安全是一件极其重要的事情,作为互联网一员,务必要知道数据的重要性,务必。

一段不堪回首的往事:
周三(2023年3月15日),再次体验了一把数据丢失的痛苦经历,安装Discourse在线社区(公司任务)时莫名其妙把docker中的数据库容器删掉了,里面存储着近两年自己写过的所有文章,整个人都不好了。
悔恨当时没有对数据库做备份,从那天下午到晚上一直在做数据恢复的工作。还好的是找回来了,并没有删除。这种情况已经是第二次发生了。
上一次是Docker服务部署在树莓派上,导致所有数据都已经丢失掉。由于叠加了数据丢失的痛苦经历,越发的觉得非常有必要对自己的数据进行有效的管理。

1. 如何恢复

对于linux服务器上的MySQL数据库,最终核心的问题是解决如何恢复ibd文件,这种必须有的前提:

  1. 你知道数据库叫什么、表结构也知道(必须是表结构)
  2. 文件还在(如果在磁盘上删了,就可以不用往下看了)

MySQL会给不同的数据库创建不同的文件夹,如:数据库名:packager_server,则对应package_server文件夹,数据库中表则对应着一个个的ibd文件,例如:

恢复的逻辑主要是针对每个表进行discard,然后import要恢复的文件,步骤为:

  • 修改MySQL配置,增加强制恢复参数:

    1. vim /etc/my.cnf
    2. #添加一些字段:
    3. innodb_force_recovery=1

    这个字段主要是让MySQL绕过出错的表,进行恢复功能:Forcing InnoDB Recovery

  • 创建一个新的数据库,参照要恢复的数据库,创建好数据库名、表结构,如上述要恢复的mindoc数据库

  • 对每个表执行以下步骤:

    • 执行discard命令:

      1. alter table md_books discard TABLESPACE # 删除了md_books.ibd文件
    • 复制需要恢复的表到mindoc文件夹中:复制md_books.ibd

    • 修改复制过来的文件的权限,和其它文件权限一致:
      1. chown -R systemd-coredump testTable.ibd
    • 执行import命令:
      1. alter table md_books import TABLESPACE # 删除了md_books.ibd文件

2. Docker容器如果被删除,应该怎么找到相应的备份文件

Docker使用rm删除容器后一般是会保存容器资源的,路径是在:/var/lib/docker/volumes

这里保存所有创建过的容器

3. 恢复后的备份

  • 数据库的备份比较好做,主要的方案是生成相应的sql文件。备份的重要性一定不能忽略,出问题时就有的难受了。
  • 还需注意的点,与数据库相关的一些资源文件,如图片也要及时备份

4. 后续的一些思考

汇总自己日常需要备份的数据进行统一管理。

  • 对于数据库资源:结合github、gitree等公共平台,搭建仓库,所有使用的数据库统一部署在一个服务上
  • 自建平台相关的资源同上,统一使用公共平台搭建,风险系数相对较低
  • 开发以上功能相应的服务,支持对后续各种资源的统一配置备份等
  • 个人数据暂不考虑,等后续有想法了再说
文档更新时间: 2023-03-17 09:37   作者:admin