今天把自己的一個伺服器的資料 誤操作删除了一個重要的資料表,心想,嗯,真特麼的想扇自己個耳光,哈哈哈
好,事不宜遲,進入正文
事情是這樣的。我執行了TRUNCATE操作,導緻表清空了,那麼靜下心來想
所有線上伺服器,資料庫一定要每天淩晨定一個時間段進行備份,不然後果真的會很嚴重
好了,正文繼續
1.先查找binlog
指令行輸入
mysql -uroot -p
進入mysql指令行後輸入
show master status

這裡能看到有一個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去恢複的,但是發現這個問題
就提示第一行的問題,這個很明顯是提示我編碼格式的問題,然後前前後後折騰了1個小時去嘗試解決這個問題,發現都沒用,後來想我可以使用binlog指令導出一份sql檔案去操作,應該就能解決,是以我的第三部是
3.binlog檔案導出成一份sql檔案
mysqlbinlog /www/server/mysql/mysql-bin.000005 > ~/005.sql
通過這個指令導出一份sql檔案到根目錄,這時候我們回到mysql指令行,輸入
show binlog events\G
這時候就能看到我們最後操作的節點了
然後打開剛剛導出的005.sql檔案我們把27722後面的操作都删除掉,重新儲存一下
4.恢複資料到資料庫
最好是建立一個新的資料庫來恢複備份的資料,然後新庫跟舊庫做一個同步,以免新資料被覆寫,但是這是因為這是我自己的伺服器,我是關閉了網站操作的,是以資料都是比較固定,不怕出問題,接下來進入mysql指令行 輸入
source ~/005.sql
然後一堆神奇的sql代碼過後,在檢視資料庫 發現,咦!資料回來了!
資料庫恢複資料是萬不得已的操作,是以每次删資料清空資料庫的時候最好都是先備份一份再操作,還有一定每天都要備份一份資料庫資料,以免造成不必要的損失
最後寫這份部落格更多的是提醒自己不要再誤操作,不備份資料庫了