預防誤操作導致檔案/資料丟失不成熟的建議:

欲洗掉檔案時,將rm命令改成mv,可在系統層面將rm命令做個alias(或參考Windows / Mac OSX做法,洗掉檔案時先進回收站),
洗掉資料庫、表時,不要用drop命令,而是rename到一個專用歸檔庫里;
洗掉表中資料時,不要直接用delete或truncate命令,尤其是truncate命令,目前不支持事務,無法回滾,
用delete命令洗掉資料時,應當先顯式開啟事務,這樣誤操作時,還有機會進行回滾,
要大批量洗掉資料時,可以將這些資料insert...select到一個新表,確認無誤后再洗掉,或者反其道行之,把要保留的資料寫到新表,然后將表重命名對掉,
執行重要命令之前,先準備好相關命令,再三確認無誤才之行,對于新鳥而言,最好請你的boss坐你旁邊鎮場幾次,否則極有可能會連累大家~
總之,要時刻保持對線上生產環境的敬畏之心,雖說現在大部分操作可以靠平臺來完成了,但平臺也不是萬能的,
不也發生過平臺本身的缺陷造成資料丟失、代碼回滾、部署失誤等事故嘛,

做好備份,不管是物理備份還是邏輯備份!
說完預防措施,我們再說萬一發生誤操作時,怎么以最快速度進行補救, 我們分別列舉幾種常見的情況:
執行DROP DATABASE / DROP TABLE命令誤刪庫表,如果碰巧采用共享表空間模式的話,還有恢復的機會,如果沒有,
請直接從備份檔案恢復吧,神馬,你連備份檔案都沒有?那麻煩退出DBA屆吧,一個連備份都懶得做的人,不配成為DBA的,
接上,采用共享表空間模式下,誤刪后立刻殺掉(kill -9)mysql相關行程(mysqld_safe、mysqld),然后嘗試從ibdataX檔案中恢復資料,
誤洗掉正在運行中的MySQL表ibd或ibdataX檔案,請立即申請對該實體進行維護,當然,不是指把實體關閉,而是把業務暫停,
或者把該實體從線上環境摘除,不再寫入新資料,然后利用linux系統的proc檔案特點,把該ibd檔案從記憶體中拷出來,

再進行恢復,因為此時mysqld實體在記憶體中是保持打開該檔案的,切記這時不要把mysqld實體關閉了,
接上,把復制出來的ibdataX或ibd檔案拷貝回datadir后,重啟mysqld進入recovery模式,innodb_force_recovery 選項從 0 - 6 逐級測驗,
直至能備份出(整個實體或單表的)所有資料后,再重建實體(或單表),恢復資料,
未開啟事務模式下,執行delete誤刪資料,意識到后立即將mysqld(以及mysqld_safe)行程殺掉(kill -9),不要任何猶豫,
然后再用工具將表空間資料讀取出來,因為執行delete洗掉后,實際資料并沒被物理清除,只是先打上deleted-mark標簽,后續再統一清理,因此還有時間差,

另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~
分享(原始碼、專案實戰視頻、專案筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
免費學習書籍:

免費學習資料:

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/262022.html
標籤:其他
下一篇:oracle表空間擴容
