第6章 星期三的隐藏技能

星期三,是一周之中最让人绝望的岭线。前不见周末的影子,后还有两天的苦海。但在职场上,星期三往往也是各种积压矛盾集中爆发的日子。

上午十点,陈雅正在核对下个月的办公用品预算表,放在键盘旁边的手机突然震动了起来。屏幕上跳动着两个字:“老妈”。

陈雅深吸了一口气,拿起手机,猫着腰快步走出了开放式办公区,躲进了走廊尽头的楼梯间。楼梯间里有一股淡淡的烟味,通常是男同事们摸鱼抽烟的圣地,但现在刚好没人。

“喂,妈。”陈雅压低了声音。

“雅雅啊,上班呢?”电话那头传来母亲中气十足的声音,背景音里还夹杂着菜市场讨价还价的嘈杂声。

“嗯,在对预算表呢。怎么了妈?”

“没怎么就不能给你打电话了?我问你,你跟那个小李,就是上个月你张阿姨介绍的那个程序员,最近聊得怎么样了?”

陈雅的脑海里瞬间浮现出那只闭着眼睛吹鼻涕泡的胖海豹。她揉了揉眉心,感到一阵头痛。“没怎么聊,大家都挺忙的。”

“忙忙忙,天天就知道说忙!你一个做行政的,他一个敲电脑的,能有多忙?国家总理也没你们忙!”老妈的语气立刻拔高了八度,“雅雅,你今年二十七了,不是十七!张阿姨说那小伙子人挺老实的,工资也不低,就是不太会说话。不会说话有什么关系?过日子又不是靠嘴皮子!”

“妈……”陈雅试图打断。

“你别插嘴。你是不是又给人家甩脸色了?我跟你说,你这个温吞吞、对什么都不上心的性格得改改。你总是等别人走九十九步,自己连一步都不肯迈,哪有天上掉馅饼的好事?”

听着母亲在电话里的数落,陈雅靠在楼梯间冰冷的防火门上,视线落在台阶角落里的一个烟头上。她突然觉得有点委屈。她不是不想迈出那一步,她只是害怕迈出之后,踩空了,摔得很难看。

“妈,我没甩脸色。”陈雅的声音不自觉地柔和了下来,甚至带上了一点她自己都没察觉的维护,“他……其实人还可以。只是程序员嘛,性格比较内向,工作压力也大,经常加班到半夜。我们只是需要一点时间慢慢适应,您就别跟着瞎操心了,行吗?”

电话那头的老妈似乎没料到女儿会帮对方说话,愣了一下,语气缓和了不少:“行行行,你心里有数就行。我这不是怕你一个人在外面孤单嘛。行了,你忙吧,记得按时吃饭。”

挂断电话,陈雅在楼梯间里静静地站了一分钟。她刚才为什么要帮李明说话?她自己也说不清楚。也许是因为,在这个充满压迫感的世界里,她潜意识里觉得,那个只会发海豹表情包的笨拙男人,和她是一类人。

陈雅推开防火门,刚回到办公区,就听到一阵压抑的抽泣声。

声音是从茶水间传来的。陈雅走过去一看,是上个月刚入职的实习生林林。林林正趴在吧台上,哭得肩膀一抽一抽的,面前放着一份已经签过字的采购合同。

“怎么了林林?”陈雅走过去,递给她一张纸巾。

林林抬起头,眼睛红肿得像两个核桃。她看到陈雅,像抓住了救命稻草一样,带着哭腔说:“雅姐,我闯大祸了……我死定了,经理肯定会开除我的……”

“别急,慢慢说。”陈雅的声音很平稳,有一种能让人瞬间安静下来的力量。

“公司下个月十周年庆典,不是要定制五百个带公司 Logo 的高端保温杯作为伴手礼吗……”林林抽噎着,把那份合同推到陈雅面前,“我刚才复核确认件的时候才发现,我把公司 Slogan 里的‘至诚’,打成了‘致诚’。但是……但是我昨天下午就已经把最终确认的矢量图发给工厂,并且付了定金了。”

陈雅的眉头微微一皱。五百个高端保温杯,光成本就是好几万。如果在十周年庆典上发给客户和员工带有错别字的纪念品,这绝对是严重的行政事故。按照部门经理那个暴躁的脾气,不仅林林要被开除,连带着整个行政部都要跟着挨骂扣奖金。

“工厂那边怎么说?”陈雅问。

“我刚才打电话问了,那个对接的业务员说,昨天晚上下单,今天早上生产线就已经开模准备排期印刷了。如果现在改,要承担三成的违约金,还要重新排期,可能赶不上十周年庆典了……”林林说着,眼泪又吧嗒吧嗒地掉了下来。

陈雅没有说话。她拿起那份合同,看了一眼供应商的名字:瑞达工艺品制造厂。

她认识这家厂。前两年公司有一批加急的展会物料,是陈雅硬生生在车间里守了两个通宵,帮着厂里的工人一起打包,才按时交上货的。那次之后,她和厂里的生产主管老赵加了微信,逢年过节还会互相问候一句。

陈雅叹了口气。她原本是个极其讨厌麻烦别人、也讨厌卷入是非的人。她大可以把这件事直接上报给经理,让林林自己去承担后果,这样最符合她一贯的“安全生存法则”。

但看着眼前这个哭得瑟瑟发抖的应届生,陈雅仿佛看到了刚毕业时的自己——因为弄丢了一份快递回执单,在洗手间里躲着哭了一中午。

陈雅拿出了自己的手机,翻到了老赵的微信。她没有发文字,而是直接拨通了语音电话。

“哎哟,小陈啊!今天怎么有空给我打电话?”电话那头传来老赵爽朗的声音。

“赵哥,忙着呢?”陈雅的语气一改平时的温吞,变得异常熟络且干脆,“不跟您绕弯子了,小妹今天遇到点急事,得求您帮个忙。”

“一家人不说两家话,什么事你说。”

“我们公司昨天在您那下了五百个保温杯的单子,对接的是个新来的实习生,她把 Slogan 的字打错了。我知道这事儿不合规矩,但您能不能帮我去车间看一眼,印花那道工序开始了吗?”

“五百个保温杯?我查查排期……哦,看到了。这批货确实是今天早上的单子,不过今天上午三号线机器出了点小故障,停了两个小时,这会儿刚把素杯送进烤漆房,印花的丝网板还没上呢!”

陈雅在心里猛地松了一口气,但语气依然保持着紧迫感:“赵哥,那太好了!您赶紧让师傅停一下,我十分钟之内把修改好的正确矢量图发给您。您就当这图是昨天最后一次修改的,别走撤单重排的流程了,算我欠您一个人情,等我这周末去厂里请您吃顿好的!”

“哎呀,多大点事,还吃什么饭。行,我这就去车间给他们说一声,你赶紧把图发过来,别耽误了下午的进度。”

“好嘞,谢谢赵哥!”

挂断电话,陈雅长长地舒了一口气。她转过头,看着已经呆若木鸡的林林。

“别哭了。”陈雅把桌上的合同推回给林林,顺手拍了拍她的肩膀,“去把正确的源文件找出来,五分钟内发到我的邮箱。另外,去洗手间把脸洗干净,经理快开完会回来了。这件事,以后谁也别提。”

林林的眼泪还挂在脸上,但眼神里已经充满了不可思议的光芒。在她的眼里,这个平时在办公室里存在感极低、总是穿着灰暗颜色衣服的陈雅姐,此刻简直像是一位从天而降的女战神。

“雅姐,谢谢你……真的谢谢你!”林林深深地鞠了一躬,转身跑回了工位。

陈雅看着林林的背影,轻轻摇了摇头。她走到咖啡机前,给自己接了一杯温水。喝水的时候,她的嘴角不自觉地微微上扬了一个很小的弧度。虽然解决别人的麻烦很累,但这种偶尔掌控局面的感觉,似乎也不赖。

而在城市另一端的一座写字楼里,星期三的下午,同样上演着一场惊心动魄的“生死时速”。

下午两点半,正是程序员们刚吃完午饭、脑部供血不足、最容易犯困的时候。李明正戴着降噪耳机,靠在人体工学椅上闭目养神。

突然,他感觉到旁边有人在剧烈地摇晃他的胳膊。

李明摘下耳机,不悦地睁开眼,却看到坐在他旁边的初级开发工程师小刘,正满头大汗、脸色惨白地盯着电脑屏幕,嘴唇都在哆嗦。

“明哥……明、明哥……你救救我……”小刘的声音里带着明显的颤音,仿佛刚看到了鬼。

“怎么了?见鬼了?”李明坐直了身体,皱着眉头问。

“比见鬼还可怕……”小刘结结巴巴地说,“我……我刚才本来想清理一下测试环境里的一张废弃用户表,结果……结果终端窗口开得太多,我……我切错窗口了。我把生产环境里的 user_assets 表,给……给 DROP(删除)了。”

李明的大脑在听到 DROP 和生产环境这两个词的瞬间,仿佛被一盆冰水当头浇下,瞬间清醒了。

user_assets 是用户资产表,里面记录着所有用户在平台上的积分、余额和虚拟物品。把这张表删了,这意味着平台上几十万用户现在登录进去,会发现自己的钱和东西全部清零。

如果这个问题在十分钟内不解决,客服部的电话会被打爆;如果半小时不解决,老板会直接冲出来砍人;如果导致数据无法恢复,小刘不仅会被立刻开除,甚至可能面临法律责任。

李明看了一眼周围。部门主管正在隔壁玻璃会议室里和产品经理吵架,暂时没有发现外面的异样。

“你先别慌。”李明的声音出奇的冷静,没有平时那种浑水摸鱼的慵懒,“距离你敲下回车键,过去几分钟了?”

“大、大概三分钟……”

“有备份吗?”

“凌晨两点有一次全量备份。但是从凌晨两点到现在产生的几万条增量流水……都没了……”小刘已经快要哭出来了。

对于这种级别的灾难,最理智、最安全的做法是立刻上报主管,启动公司的紧急应急预案,让 DBA(数据库管理员)来接手。如果李明现在上报,他没有任何责任,这是小刘的锅。

但李明看着小刘那张充满绝望、像白纸一样的脸,突然想起了自己刚毕业第一年的时候。那年,他也因为一个愚蠢的配置错误,导致公司服务器宕机了半小时。当时的组长没有骂他,而是默默地站在他身后,手把手教他如何排查、如何回滚。那个组长后来离职了,但在李明心里,一直记得那份没有被戳穿的恩情。

李明叹了一口气。他知道,如果现在上报,小刘的试用期绝对过不了了,职业生涯的履历上也会留下极其难看的一笔。

“起开。”李明站起身,一把将小刘从椅子上拉开,自己坐了上去。

“明哥,你要干嘛?”小刘愣住了。

“救你的命。闭上嘴,去门口给我放风,别让主管这个时候出来。”李明头也不回地盯着屏幕,双手已经搭在了键盘上。

李明的眼神完全变了。那个平时看起来对什么都漠不关心、敲代码像是在完成任务的“咸鱼”,此刻散发出一种极其专注且冷峻的气场。

他迅速打开了终端。既然是误删,而且是在三分钟前,那么依靠凌晨的全量备份已经不够了,必须通过 MySQL 的 Binlog(二进制日志)来进行精准的时间点恢复。

李明的手指在键盘上飞速跳跃,键盘发出急促而有节奏的“哒哒哒”声。

第一步:立刻锁定业务。他飞速切入负载均衡的配置文件,将指向数据库的写请求全部暂时挂起,防止新的数据写入造成日志覆盖。

第二步:定位 Binlog。他输入指令 SHOW MASTER STATUS;,找到了当前正在写入的日志文件。

第三步:导出并解析日志。这也是最难的一步。由于数据库一直在高频读写,这一天的日志文件极大。李明直接使用了 mysqlbinlog 工具,附带上精确到秒的时间戳参数,将从凌晨两点到刚才小刘误删那一刻的所有的 SQL 语句过滤出来,重定向到一个文本文件中。

“哒哒哒哒……”

汗水从李明的额头上渗了出来,顺着鼻尖滑落。他必须在海量的日志文件中,剔除掉那个致命的 DROP TABLE 语句,然后将前面所有的合法操作重新执行一遍。这就像是在一堆错综复杂的毛线球里,精准地抽走一根致命的引线。

时间一分一秒地过去。会议室里,主管和产品经理的争吵声似乎小了一些,随时可能推门出来。

站在门口放风的小刘,腿已经软得快站不住了。

“找到了。”李明低声说了一句。他的眼神死死盯着屏幕上一行被高亮的 SQL 语句,毫不犹豫地敲下了删除键,去掉了那条该死的删除命令。

第四步:回放日志,恢复数据。李明将修改后的日志文件重新导入数据库。屏幕上开始疯狂滚动起执行进度的百分比。

10%……40%……70%……

李明盯着那个进度条,感觉自己的心跳和那个百分比同步了。

99%……100%。

“执行成功。0 个错误。”终端上跳出了这行绿色的字。

李明长长地吐出一口气。他迅速切回负载均衡配置,重新放开写请求。然后打开测试账号登录前端页面,查看资产余额。

一串熟悉的数字出现在屏幕上。数据,一分不差地回来了。

整个过程,耗时十二分钟。

李明站起身,拔出自己的 U 盘,抽了一张纸巾擦了擦额头上的汗,把位置让了出来。

“行了。”李明的声音恢复了那种懒洋洋的腔调,“数据回来了。这事儿我没看见,你也没做过。以后切生产环境,把终端背景色给我换成刺眼的红色,别再瞎搞了。”

小刘扑到电脑前,看着失而复得的数据,眼泪夺眶而出。他转身看着李明,激动得语无伦次:“明哥……你就是我亲哥!我、我都不知道该怎么谢你,我请你吃饭!请你吃一个月!”

“免了。”李明摆了摆手,重新坐回自己的工位,戴上降噪耳机,“下午帮我点杯冰美式就行,要加个浓缩。刚才烧了太多脑细胞,困死我了。”

下午五点半。下班的打卡声陆续响起。

这是一个极为罕见的好天气。连续阴霾了三天的城市,在傍晚时分突然放晴了。夕阳透过写字楼巨大的落地窗打进来,把整个办公区染成了一种温暖的橘红色。

李明喝着小刘买来的、加了浓缩的冰美式,看着窗外像燃烧一样的云彩,心里突然觉得有些轻松。他看了一眼手机。

微信里,陈雅的对话框依然停留在昨天那只海豹上。

其实这几天,他好几次想发点什么,但总是因为不知道如何开口而作罢。但今天,或许是成功化解了一场危机带来的成就感,又或许是这杯冰美式给了他一点咖啡因的冲动,他突然觉得,那只海豹看起来简直蠢透了。

生活已经够无聊了,大家都在小心翼翼地维持着安全的距离,生怕多走一步就会惹上麻烦。但他今天救了小刘一命,这说明,偶尔多管闲事,偶尔打破安全距离,其实感觉也不错。

李明深吸了一口气,手指在键盘上敲击起来。他删删改改,最终没有发表情包,而是发了一段实实在在的文字:

“前天晚上开会开得头晕,随手回了个表情包,后来觉得好像有点敷衍,抱歉啊。这两天上班是不是还是那么无聊?”

在这条消息发出去的同时,陈雅正坐在下班的公交车上。

公交车在夕阳的余晖中平稳地行驶。陈雅靠在车窗上,看着外面染上一层金色的街道和熙熙攘攘的人群。今天她帮林林解决了一个大麻烦,虽然没有得到任何上级的表扬,但林林那充满感激的眼神,让她觉得这枯燥的一天,似乎有了一点点价值。

手机在包里震动了一下。

陈雅拿出来一看。是李明发来的消息。

她盯着那两行字看了很久。没有了阴阳怪气的试探,没有了莫名其妙的表情包。这只是一句非常普通的、甚至有些笨拙的道歉和问候,但却透着一种真实的、属于成年人的疲惫和真诚。

陈雅原本想要继续冷战的防线,在这句略显诚恳的话语面前,突然就松动了。她想起上午在楼梯间里对母亲说的那句话:“他其实人还可以。”

她微微调整了一下坐姿,手指在屏幕上轻快地敲击着。夕阳照在她的脸上,给她平时总是带着几分疲惫的面容,平添了一抹温柔的亮色。

“确实很无聊。不过今天稍微有点不一样,我今天在办公室,顺手救了一个实习生的职业生涯。你呢,今天有什么特别的吗?”

消息发送成功。

两个在这个庞大城市中拼命维持着温吞和麻木的年轻人,终于在星期三的黄昏,向对方小心翼翼地递出了一张真实的、属于他们自己的名片。

< 上一章 目录 下一章 >
×
明雅淡淡
连载中匿名 /