我做了快三年前端,平时眼里基本只有 Vue 和那套组件库。数据库对我来说一直是个黑盒,项目上线前运维同事说备份每天都会自动跑,我就点点头,以为那份文件安静躺在磁盘上,就是安全感了。直到上个月我们测试环境真的要回滚一次脏数据,我才发现,我连这份备份到底能不能还原回来都没把握。
我这种想法其实挺典型。组里前端谁都觉得数据库有运维兜底,平时连 show tables 都懒得敲。直到那次回滚,我才意识到所谓兜底,是建立在有人一直盯着、而且那套脚本真能跑通的前提上的。可这个前提我从来没验证过,甚至没想过要去验证。
一份备份文件让我第一次心虚
那天测试同学手滑把一张表清了一半,群里喊了一声要回滚。leader 看向我,说你不是会点数据库吗,你来还原一下吧。我当场就懵了。我其实只会写几行 SELECT,备份脚本是别人写的,还原命令我连在哪执行都不知道。
我赶紧翻运维留的文档,照着里面那条恢复命令,把备份文件指过去,敲了回车。屏幕滚了一堆日志,最后停在一个报错上,说某个表的字符集对不上。我盯着那行红字,第一次觉得备份这两个字离我好远。原来备份能生成,和备份能救场,根本是两件事。
那一刻我有点羞,也挺慌。我做前端这么久,页面崩了至少知道去 console 看报错,可数据库一旦闹脾气,我连门都摸不着。更难受的是,如果这是生产环境,用户的数据真没了,我那点前端本事一点都派不上用场。事后我偷偷问了运维,他说备份确实每天都跑,但他也快半年没真还原过了。两个人都在靠对方,结果谁也没实际验过。
我决定自己把还原跑通
下班之后我没走,把测试环境的备份文件拷到本地,起了一个空的临时库,逼自己从头把还原走一遍。第一次当然又失败了,还是那个字符集的问题。我才去认真看备份脚本里导出的参数,发现它用的是默认字符集,而我们的库早就统一成了 utf8mb4。之前一直没出事,只是因为没人真的还原过。
文档里那行命令我以前从没认真看过,这次它成了我的救命绳:
mysql -u root -p target_db < backup_202608xx.sql
失败之后我加上字符集又跑了一遍:
mysql --default-character-set=utf8mb4 -u root -p target_db < backup.sql
这次日志一路到底,最后提示恢复完成。我手抖着连上那个临时库,SELECT 了一下那张被清掉的表,数据真的回来了。那种踏实感,比上线一个新页面强烈多了。
起临时库那步也费了点劲。我先用 create database verify_tmp 建了个空库,又给本地账号补了权限,才敢往里导。平时这些事都是别人配好的,我连自己库的账号密码都存在哪都得翻半天,最后还是从同事发我的截图里认出来的。
后来我养成了一个习惯,每隔一阵就把最近的备份拉到临时库里还原一次,不为别的,就为确认它真的能救场。这件事很小,但每次成功我都会松口气,像是给自己的底气续了一次费。
顺手踩的几个坑
第一次完整跑通之后,我又撞上几个之前没想过的问题。比如备份文件是压缩包,我本地解压工具和服务器上的版本不一样,解出来多了一层目录,路径指错又白等十分钟。还有一次临时库的空间不够,还原跑到一半直接挂了,报错信息藏得很深,我是翻了半天才在系统日志里看到的。第三个坑最蠢,我把自己本地的库当成了测试库,差点把上周刚导的一份数据覆盖了,还好手快按了 ctrl c。
这些坑没有一个是高深的,但每一个都只有在你真正动手还原的时候才会冒出来。平时备份脚本在定时任务里悄悄跑,绿勾看着很安心,可绿勾只代表它执行了,不代表它救得了你。
我以前特别依赖那种一键脚本,觉得把命令丢进去就完事了。现在想想,一键的背后藏着多少我没去理解的东西,真到出事那天,那些没理解的部分就会一个个跳出来咬我。
又想起 AI 这件事
写到这还是没绕开 AI。现在写业务代码,我十次有八次是先让 AI 出个方案,我再改。数据库这块我也试过,把报错丢给它,它几秒就给我一段修复命令,我复制粘贴确实跑通了。
可我还是慌,和之前学原生 HTML、试 ThreeUI 时一模一样那种慌。AI 能告诉我怎么修,但它不会替我在凌晨三点被报警叫醒,也不会替我承担数据没了的责任。更具体的怕是,如果我一直只在表层让它递命令,哪天它给的方案我根本看不懂,出了怪事我连怀疑它都不对。上次那次字符集报错,AI 给的回复里其实也带了字符集参数,可我那会儿压根不知道字符集是个什么东西,自然也没往那想。
所以我现在的笨办法是,先自己把还原流程摸熟,卡死了再问 AI,而且一定让它讲清楚每一步在干什么,而不是只给我一段能跑的命令。这样至少我在学,不是在搬运。
我说点实在的
我不是劝大家都去当 DBA,前端写好本职就很不容易了。只是如果你也像我一样,项目里数据库的事一直甩给别人的脚本,我真心建议找个测试库,自己把备份还原走一遍。那种你终于能对自己说这下备份真的有用了的踏实,挺值钱的。
如果你也想试,不用搞多复杂。找个不重要的测试库,先把 mysqldump 出来的文件存好,再新建一个空库导进去,能查到数据就算过关。我一般是每月挑一个周末做一遍,顺手记一下耗时,哪天发现备份文件比上周小得离谱,八成就是哪儿断了。真等出事再第一次还原,那个时间点往往最不适合现学。
说真的,我也想找几个同样写前端、但被 AI 卷得有点迷茫的朋友。你如果也写过越用 AI 越不敢手底下没活那种心情,咱们评论区聊聊,互相壮个胆也好。