<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          臥槽!新來的妹紙rm -rf把公司整個(gè)數(shù)據(jù)庫刪沒了,整個(gè)項(xiàng)目組慌了~

          共 1941字,需瀏覽 4分鐘

           ·

          2020-12-25 08:08

          往期熱門文章:

          1、用了3年CAT,這次我想選擇SkyWalking,老板反手就是一個(gè)贊!

          2、為什么MySQL不推薦使用uuid或者雪花id作為主鍵?

          3、簡單、易用的 MySQL 官方壓測工具,建議收藏!

          4、臥槽?運(yùn)行 ping 命令執(zhí)行結(jié)果的卻是 rm -rf,我太難了……

          5、為什么我決定要放棄 okhttp、httpClient?


          經(jīng)歷了兩天不懈努力,終于恢復(fù)了一次誤操作刪除的生產(chǎn)服務(wù)器數(shù)據(jù)。


          對本次事故過程和解決辦法記錄在此,警醒自己,也提示別人莫犯此錯(cuò)。
          也希望遇到問題的朋友能找到一絲靈感解決問題。
          01
          事故背景

          安排一個(gè)妹子在一臺生產(chǎn)服務(wù)器上安裝 Oracle,妹子邊研究邊安裝,感覺裝的不對,準(zhǔn)備卸載重新安裝。

          從網(wǎng)上找到卸載方法,其中要執(zhí)行一行命令刪除 Oracle 的安裝目錄,命令如下:

          rm?-rf?$ORACLE_BASE/*??

          如果 ORACLE_BASE 這個(gè)變量沒有賦值,那命令就變成了:

          rm?-rf?/*??
          等等,妹子使用的可是 Root 賬戶啊。就這樣,把整個(gè)盤的文件全部刪除了,包括應(yīng)用 Tomcat、MySQL 數(shù)據(jù)庫 and so on……
          MySQL 數(shù)據(jù)庫不是在運(yùn)行嗎?Linux 能刪除正在執(zhí)行的文件?反正是徹底刪除了,最后還剩一個(gè) Tomcat 的 Log 文件,估計(jì)是文件過大,一時(shí)沒有刪除成功。
          看著妹子自責(zé)的眼神,又是因?yàn)檫@事是我安排她做的,也沒有跟她講清厲害關(guān)系,沒有任何培訓(xùn),責(zé)任只能一個(gè)人背了,況且怎么能讓美女背負(fù)這個(gè)責(zé)任呢?
          打電話到機(jī)房,將盤掛到另一臺服務(wù)器上,SSH 上去查看文件全部被清,這臺服務(wù)器運(yùn)行的可是一個(gè)客戶的生產(chǎn)系統(tǒng)啊,已經(jīng)運(yùn)行大半年了,得盡快恢復(fù)啊。
          于是找來脫機(jī)備份的數(shù)據(jù)庫,發(fā)現(xiàn)備份文件只有 1KB,里面只有幾行熟悉的 mysqldump 注釋(難道是 Crontab 執(zhí)行的備份腳本有問題),最接近的備份也是 2013 年 12 月份的了,真是屋漏偏逢連夜雨啊。
          想起來一位領(lǐng)導(dǎo)說過的案例:當(dāng)一個(gè)生產(chǎn)系統(tǒng)掛掉以后,發(fā)現(xiàn)所有備份都有問題,刻錄的光盤也有劃痕,磁帶機(jī)也壞了(一個(gè)業(yè)界前輩,估計(jì)以前還用光盤做備份了),沒想到今天真的應(yīng)驗(yàn)到我的身上了,怎么辦?
          部門領(lǐng)導(dǎo)知道情況后,已經(jīng)做了最壞的 B 計(jì)劃:領(lǐng)導(dǎo)親自帶隊(duì)和產(chǎn)品 AA 周日趕到客戶所在的地市,星期一去領(lǐng)導(dǎo)層溝通;BB 和 CC 去客戶管理員那邊想辦法說服客戶……
          02
          救命稻草:ext3grep
          趕快到網(wǎng)上去查資料進(jìn)行誤刪數(shù)據(jù)恢復(fù),還真找到一款 ext3grep 能夠恢復(fù)通過 rm -rf 刪除的文件,我們磁盤也是 ext3 格式,且網(wǎng)上有不少的成功案例。
          于是燃起了一絲希望,趕快對盤 umount,防止重新寫入補(bǔ)刪文件扇區(qū)。下載 ext3grep,安裝(編譯安裝過程艱辛?xí)呵也槐恚?/span>
          先執(zhí)行掃描文件名命令:
          ext3grep?/dev/vgdata/LogVol00?--dump-names??
          打印出了所有被刪除文件及路徑,心中狂喜,不用執(zhí)行 B 計(jì)劃了,文件都在呢。
          這款軟件不能按目錄恢復(fù)文件,只能執(zhí)行恢復(fù)全部命令:
          ext3grep?/dev/vgdata/LogVol00?--restore-all??
          結(jié)果當(dāng)前盤空間不足,沒辦法只能恢復(fù)文件,嘗試了幾個(gè)文件,居然部分成功部分失敗:
          ext3grep?/dev/vgdata/LogVol00?--restore-file?var/lib/mysql/aqsh/tb\_b\_attench.MYD??
          心里不禁一涼,難道是刪除磁盤上被寫過文件了?恢復(fù)機(jī)率不大了啊,能恢復(fù)幾個(gè)算幾個(gè)吧,說不定重要數(shù)據(jù)文件剛好在能恢復(fù)的 MYD 文件中。
          于是先將所有文件名重定向到一個(gè)文件文件中:
          ext3grep?/dev/vgdata/LogVol00?--dump-names?>/usr/allnames.txt??
          過濾出來所有 MySQL 數(shù)據(jù)庫的文件名存成 mysqltbname.txt。
          編寫腳本恢復(fù)文件:
          while?read?LINE??
          do??
          ????echo?"begin?to?restore?file?"?$LINE??
          ????ext3grep?/dev/vgdata/LogVol00?--restore-file?$LINE??
          ????if?\[?$??!=?0?\]??
          ????then??
          ????????echo?"restore?failed,?exit"??
          ????fi??
          done?
          執(zhí)行,大概運(yùn)行了 20 分鐘,恢復(fù)了 40 多個(gè)文件,但不夠啊,我們將近 100 張表,每張表 frm,myd,myi 三個(gè)文件,怎么說也有 300 多個(gè)左右?。?/span>
          將找回來的文件附到現(xiàn)有數(shù)據(jù)庫上,更要文件權(quán)限為 777 后,重啟 MySQL,也算是找回一部分?jǐn)?shù)據(jù)了,但客戶重要的考勤簽到數(shù)據(jù)、手機(jī)端上報(bào)數(shù)據(jù)(據(jù)說客戶按這些數(shù)據(jù)做員工績效的)還沒找回來啊。
          咋辦?中間又試了另一款工具 extundelete,跟 ext3grep 語法基本一致,原理應(yīng)該也一樣了,但是據(jù)說能按目錄恢復(fù)。
          好吧,試一試:
          extundelete?/dev/vgdata/LogVol00?--restore-directory?var/lib/mysql/aqsh??

          果然不出所料,恢復(fù)不出來?。。。。。。。∧切┪募驯黄茐牧?。跟領(lǐng)導(dǎo)匯報(bào),執(zhí)行 B 計(jì)劃吧……無奈之下下班回家。(周末了,回去休息一下,想想辦法吧)

          03

          靈機(jī)一動:Binlog

          第二天早晨一早就醒了(心里有事?。成想娔X,去公司(這個(gè)周末算是報(bào)銷了,不挨批,通報(bào),罰款,開除就不錯(cuò)了,還過什么周末?。?。
          依舊運(yùn)行 ext3grep,extundelete,也就那幾招啊,把系統(tǒng)架到測試服務(wù)器上,看看數(shù)據(jù)能不能想辦法補(bǔ)一補(bǔ)吧。
          在測試服務(wù)器上進(jìn)行 mysqldump,恢復(fù)文件,覆蓋恢復(fù)回來的文件,給文件加權(quán)限,重啟 MySQL。
          Wait,Wait,不是有 Binlog 嗎?我們服務(wù)都要求開啟 Binlog,說不定能通過 Binlog 里恢復(fù)數(shù)據(jù)呢?
          于是從 Dump 出來的文件名里找到 Binlog 的文件,一共三個(gè):
          • mysql-binlog0001
          • mysql-bin.000009
          • mysql-bin.000010
          恢復(fù)一下 0001:
          ext3grep?/dev/vgdata/LogVol00?--restore-file?var/lib/mysql/mysql-bin.000001??
          居然失敗了……再看另兩個(gè)文件,mysql-bin.000010 大概幾百 MB,應(yīng)該靠譜一點(diǎn),執(zhí)行還原命令,居然成功了!
          趕快 SCP 到測試服務(wù)器。執(zhí)行 Binlog 還原:
          mysqlbinlog?/usr/mysql-bin.000010?|?mysql?-uroot?-p??
          輸入密碼,卡住了(好現(xiàn)象),經(jīng)過漫長的等待,終于結(jié)束了。打開應(yīng)用,哦,感謝 CCTV,MTV,數(shù)據(jù)回來了!

          04

          后記

          也希望謹(jǐn)記此次事故,以后不再犯同樣的錯(cuò)誤。事故反思如下:
          • 本次安排 MM 進(jìn)行服務(wù)器維護(hù)時(shí)沒有提前對她進(jìn)行說明厲害情況,自己也未重視,管理混亂,流程混亂。一個(gè)在線的生產(chǎn)系統(tǒng),任何一個(gè)改動一定要先謀而后動。
          • 自動備份出現(xiàn)問題,沒有任何人檢查。脫機(jī)備份人員每次從服務(wù)器上下載 1K 的文件卻從未重視。需要明確大家在工作崗位上的責(zé)任。
          • 事故發(fā)生后,沒有及時(shí)發(fā)現(xiàn),造成部分?jǐn)?shù)據(jù)寫入磁盤,造成不可恢復(fù)問題。需要編寫應(yīng)用監(jiān)控程序,服務(wù)一旦有異常,短信告警相關(guān)責(zé)任人。
          • 根據(jù)評論提醒,再加一條:不能使用 Root 用戶來操作。應(yīng)該在服務(wù)器上開設(shè)不同權(quán)限級別的用戶。

          通過本次事故,分享下本文所用到的工具鏈接:
          • https://code.google.com/p/ext3grep

          • http://extundelete.sourceforge.net

          功能跟 ext3grep 差不多,原理應(yīng)該也差不多。編譯安裝依賴包比較多,可以到網(wǎng)上搜索如何安裝。
          最后,希望各位同行的小伙伴們能謹(jǐn)記本文事件,開心敲代碼,永遠(yuǎn)不出錯(cuò)~
          最近熱文閱讀:

          1、用了3年CAT,這次我想選擇SkyWalking,老板反手就是一個(gè)贊!
          2、為什么MySQL不推薦使用uuid或者雪花id作為主鍵?
          3、簡單、易用的 MySQL 官方壓測工具,建議收藏!
          4、臥槽?運(yùn)行 ping 命令執(zhí)行結(jié)果的卻是 rm -rf,我太難了……
          5、為什么我決定要放棄 okhttp、httpClient?
          6、再見了SpringMVC,這個(gè)框架有點(diǎn)厲害,甚至干掉了Servlet!
          7、推薦一款國產(chǎn)開源監(jiān)控系統(tǒng),太強(qiáng)大了??!
          8、把 Spring Cloud 給拆了!詳解每個(gè)組件的作用
          9、牛逼了!這款軟件幾乎可以操作所有數(shù)據(jù)庫!
          10、Feed流系統(tǒng)設(shè)計(jì)
          關(guān)注公眾號,你想要的Java都在這里

          瀏覽 36
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品白丝Jk白祙 | 黄色a一级片免费看 | 成人啪啪视频在线 | 国产内射视频免费观看 | 中文字幕之中文字幕 |