天天看點

記一次Linux伺服器 誤删資料的恢複操作所有線上伺服器,資料庫一定要每天淩晨定一個時間段進行備份,不然後果真的會很嚴重1.先查找binlog2.備份binlog檔案,以便恢複資料操作使用3.binlog檔案導出成一份sql檔案4.恢複資料到資料庫

今天把自己的一個伺服器的資料 誤操作删除了一個重要的資料表,心想,嗯,真特麼的想扇自己個耳光,哈哈哈

好,事不宜遲,進入正文

事情是這樣的。我執行了TRUNCATE操作,導緻表清空了,那麼靜下心來想

所有線上伺服器,資料庫一定要每天淩晨定一個時間段進行備份,不然後果真的會很嚴重

好了,正文繼續

1.先查找binlog

指令行輸入 

mysql -uroot -p
           

進入mysql指令行後輸入

show master status
           
記一次Linux伺服器 誤删資料的恢複操作所有線上伺服器,資料庫一定要每天淩晨定一個時間段進行備份,不然後果真的會很嚴重1.先查找binlog2.備份binlog檔案,以便恢複資料操作使用3.binlog檔案導出成一份sql檔案4.恢複資料到資料庫

這裡能看到有一個binlog檔案了,那麼我們下面接下來的操作都是跟這個檔案有關的,但是這個作為原始檔案,不能執行,因為線上伺服器随時都會産生新資料,會改變binlog檔案,是以我們應該copy一份出來  那麼不知道這個檔案在哪裡怎麼辦呢?這時候find指令就非常有用了,這時候就不要在mysql指令行裡操作了

find / -type f -name mysql-bin.000005
           

2.備份binlog檔案,以便恢複資料操作使用

這樣我們就能找到我們這個log檔案的位置 然後我們複制一份到根目錄下,友善後續操作

cp /www/server/data/mysql-bin.000005 ~/
           

根據自己的路徑操作就好,然後我們就得到這個備份的檔案了

這裡插一個自己的小插曲,之前是想直接操作binlog檔案,把錯誤節點的那句  TRUNCATE語句删除,然後重新導入這份binlog去恢複的,但是發現這個問題

記一次Linux伺服器 誤删資料的恢複操作所有線上伺服器,資料庫一定要每天淩晨定一個時間段進行備份,不然後果真的會很嚴重1.先查找binlog2.備份binlog檔案,以便恢複資料操作使用3.binlog檔案導出成一份sql檔案4.恢複資料到資料庫

就提示第一行的問題,這個很明顯是提示我編碼格式的問題,然後前前後後折騰了1個小時去嘗試解決這個問題,發現都沒用,後來想我可以使用binlog指令導出一份sql檔案去操作,應該就能解決,是以我的第三部是

3.binlog檔案導出成一份sql檔案

mysqlbinlog /www/server/mysql/mysql-bin.000005 > ~/005.sql
           

通過這個指令導出一份sql檔案到根目錄,這時候我們回到mysql指令行,輸入

show binlog events\G
           

這時候就能看到我們最後操作的節點了

記一次Linux伺服器 誤删資料的恢複操作所有線上伺服器,資料庫一定要每天淩晨定一個時間段進行備份,不然後果真的會很嚴重1.先查找binlog2.備份binlog檔案,以便恢複資料操作使用3.binlog檔案導出成一份sql檔案4.恢複資料到資料庫

然後打開剛剛導出的005.sql檔案我們把27722後面的操作都删除掉,重新儲存一下

4.恢複資料到資料庫

最好是建立一個新的資料庫來恢複備份的資料,然後新庫跟舊庫做一個同步,以免新資料被覆寫,但是這是因為這是我自己的伺服器,我是關閉了網站操作的,是以資料都是比較固定,不怕出問題,接下來進入mysql指令行  輸入

source ~/005.sql
           

然後一堆神奇的sql代碼過後,在檢視資料庫 發現,咦!資料回來了!

資料庫恢複資料是萬不得已的操作,是以每次删資料清空資料庫的時候最好都是先備份一份再操作,還有一定每天都要備份一份資料庫資料,以免造成不必要的損失

最後寫這份部落格更多的是提醒自己不要再誤操作,不備份資料庫了

繼續閱讀