数据安全是一件极其重要的事情,作为互联网一员,务必要知道数据的重要性,务必。
一段不堪回首的往事:
周三(2023年3月15日),再次体验了一把数据丢失的痛苦经历,安装Discourse在线社区(公司任务)时莫名其妙把docker中的数据库容器删掉了,里面存储着近两年自己写过的所有文章,整个人都不好了。
悔恨当时没有对数据库做备份,从那天下午到晚上一直在做数据恢复的工作。还好的是找回来了,并没有删除。这种情况已经是第二次发生了。
上一次是Docker服务部署在树莓派上,导致所有数据都已经丢失掉。由于叠加了数据丢失的痛苦经历,越发的觉得非常有必要对自己的数据进行有效的管理。
1. 如何恢复
对于linux服务器上的MySQL数据库,最终核心的问题是解决如何恢复ibd文件,这种必须有的前提:
- 你知道数据库叫什么、表结构也知道(必须是表结构)
- 文件还在(如果在磁盘上删了,就可以不用往下看了)
MySQL会给不同的数据库创建不同的文件夹,如:数据库名:packager_server,则对应package_server文件夹,数据库中表则对应着一个个的ibd文件,例如:
恢复的逻辑主要是针对每个表进行discard,然后import要恢复的文件,步骤为:
修改MySQL配置,增加强制恢复参数:
vim /etc/my.cnf
#添加一些字段:
innodb_force_recovery=1
这个字段主要是让MySQL绕过出错的表,进行恢复功能:Forcing InnoDB Recovery
创建一个新的数据库,参照要恢复的数据库,创建好数据库名、表结构,如上述要恢复的mindoc数据库
对每个表执行以下步骤:
执行discard命令:
alter table md_books discard TABLESPACE # 删除了md_books.ibd文件
复制需要恢复的表到mindoc文件夹中:复制md_books.ibd
- 修改复制过来的文件的权限,和其它文件权限一致:
chown -R systemd-coredump testTable.ibd
- 执行import命令:
alter table md_books import TABLESPACE # 删除了md_books.ibd文件
2. Docker容器如果被删除,应该怎么找到相应的备份文件
Docker使用rm删除容器后一般是会保存容器资源的,路径是在:/var/lib/docker/volumes
这里保存所有创建过的容器
3. 恢复后的备份
- 数据库的备份比较好做,主要的方案是生成相应的sql文件。备份的重要性一定不能忽略,出问题时就有的难受了。
- 还需注意的点,与数据库相关的一些资源文件,如图片也要及时备份
4. 后续的一些思考
汇总自己日常需要备份的数据进行统一管理。
- 对于数据库资源:结合github、gitree等公共平台,搭建仓库,所有使用的数据库统一部署在一个服务上
- 自建平台相关的资源同上,统一使用公共平台搭建,风险系数相对较低
- 开发以上功能相应的服务,支持对后续各种资源的统一配置备份等
- 个人数据暂不考虑,等后续有想法了再说