-
1 # 吻蝶之殤
-
2 # MineMine丶
首先看看是什麼丟失,是db 還是drop/truncate table ,如果這樣可以用備份來恢復,如果是delete table 有備份可以用備份恢復,沒有備份可以透過binlog 反項解析來進行恢復
-
3 # 小小猿愛嘻嘻
這裡介紹一種簡單的方法,就是開啟binlog二進位制日誌,記錄使用者對MySQL資料庫的所有操作(除了查詢),然後透過mysqlbinlog命令匯出為SQL檔案(剔除drop語句),最後再恢復就行,下面我簡單介紹一下操作過程,實驗環境Win10+MySQL5.5,感興趣的朋友可以嘗試一下:
1.首先,開啟binlog功能,這個需要修改MySQL安裝目錄下的my.ini配置檔案,在[mysqld]下面新增一行設定“log-bin = mysql-bin”就行,如下:
接著重啟MySQL服務,就可以在MySQL資料目錄下看到生成的日誌記錄檔案—mysql-bin.000001和mysql-bin.index,其中mysql-bin.000001是日誌檔案,會自動順序遞增,記錄每次資料庫重啟後用戶的所有操作記錄,mysql-bin.index是日誌索引檔案,記錄所有的日誌檔名稱:
2.接著我們就可以模擬資料庫誤刪的過程了,這裡我先新建了一個db資料庫,然後建立了一個test資料表,依次insert插入3條數,如下:
3.接著就是資料庫恢復的過程,開啟cmd視窗,執行“mysqlbinlog --no-defaults binlog日誌檔案路徑(這裡換成你的binlog檔案)”命令,就可以看到我們重啟資料庫後所有的資料庫操作記錄,如下,每個操作都有唯一的對應位置,這裡我們需要剔除掉drop語句,也就是恢復到958這個位置:
直接執行“mysqlbinlog --no-defaults --stop-position="958" binlog日誌檔案路徑 > D:\test.sql”命令,就可以匯出958位置之前的所有資料庫記錄,並重定向為一個sql檔案,如下,這裡你也可以使用start-position引數指定匯出的起始位置:
4.最後我們再連線MySQL資料庫,匯入這個sql指令碼就可以正常恢復資料了,如下,和原始插入的資料一樣:
至此,我們就完成了MySQL資料庫的自動恢復。總的來說,整個過程非常簡單,只要你熟悉一下上面的操作過程,很快就能掌握的,對於一些簡單的資料恢復來說,完全夠用,不過建議還是在日常開發過程中做好資料庫備份,在生產環境中慎重使用drop等刪除語句,網上也有相關教程和資料,介紹的非常詳細,感興趣的話,可以搜一下,希望以上分享的內容能對你有所幫助吧,也歡迎大家評論、留言進行補充。
回覆列表
先分析一下,為啥丟失資料,因為操作刪,還是資料庫掛了,因為操作刪,可以做備份,做備份的原理就是,資料庫主從複製,有mycat外掛,原理就是用日誌。達到主從複製,其次,如果是資料庫掛了。首先mysql是持久化儲存,重啟就行,但是會丟失掛了未提交的事物。這得需要資料庫意外的資料來支援資料庫恢復資料。系統日誌啊,所以個人覺得,日誌很重要。