sql怎么还原数据库:依托备份文件执行精准恢复操作
上周值班赶项目上线,凌晨三点突然碰到测试库数据被误删的事故,当时慌得手都在抖,急着查sql怎么还原数据库,硬生生靠着仅有的备份文件,一步步摸索完成了数据恢复,全程都是实打实的实操操作,没有半点虚的。
最开始完全乱了阵脚,只记得数据库有备份,却不知道该用哪条语句、哪个方式恢复。随手在数据库客户端点了还原按钮,随便选了一个备份包,等着进度条走完,结果打开数据库一看,数据不仅没恢复完整,还把最新的部分测试数据给覆盖了,等于雪上加霜。那一刻真的烦躁到极致,本来熬夜就疲惫,还因为自己的盲目操作把问题搞得更复杂。
折腾好久才搞明白,sql还原数据库,第一步绝对不能直接无脑点击图形化工具还原,最先要做的是确认备份文件的类型和备份时间。当时服务器里存着三种备份,完整备份、差异备份还有日志备份,之前一直分不清区别,随便混用就是出错的根源。完整备份是全量数据快照,差异备份只记录两次全备之间的变更数据,而日志备份可以精准恢复到任意时间点,这是后续精准恢复的关键。
停下盲目的操作后,先锁定了事故发生前一小时的完整备份文件,文件名和存储路径都核对了两遍,确认没有损坏、没有被篡改。然后断开了所有客户端的数据库连接,这点真的很关键,之前出错就是因为还有程序在读写数据库,还原进程被干扰,直接导致数据错乱。关闭连接的操作很简单,执行对应的语句锁定数据库,禁止新的读写请求,给还原操作创造干净的环境。
接着用标准sql语句执行全量备份还原,没有再依赖图形界面的一键操作。手动输入还原语句,指定备份文件路径、目标数据库名称,同时勾选覆盖现有数据库的参数,等待全量数据恢复完成。这一步耗时比较久,几十G的备份文件,足足跑了二十多分钟,全程不敢关闭客户端,一直盯着执行日志,生怕出现报错中断操作。
全量备份还原结束后,发现数据还是少了一部分,因为那次全备是当天下午五点的,而事故发生在凌晨两点,中间十几个小时的新增数据全部缺失。这时候才想起还有事务日志备份,之前一直忽略了这个小东西,以为全备就能解决所有问题。
紧接着叠加日志备份进行增量还原,按照时间顺序依次导入间隔一小时的日志备份文件,每执行一次就等待日志恢复完成,最终精准把数据库恢复到了误操作之前的最后一秒。整个过程没有任何花哨技巧,就是一步步核对文件、执行语句、排查报错,没有跳过任何一个细碎步骤。
中间还踩了一个很蠢的坑,没有提前修改数据库恢复状态,导致日志备份导入一直报错。默认情况下,数据库还原全备后会处于可操作状态,没办法继续叠加日志,必须手动设置为还原状态,才能衔接增量备份数据。这个细节卡了我十几分钟,反复查语句、改参数,才彻底解决报错问题。
折腾完所有操作、核对完数据的时候,天已经蒙蒙亮了。所有丢失的表单数据、测试记录全部恢复完毕,数据库运行状态完全正常,没有出现数据缺失、乱码、重复的问题。
最后盯着服务器屏幕发呆,只觉得最可惜的是,之前一直懒得整理备份还原的实操流程,总觉得出问题再搜就行,白白浪费了大量时间在试错上。