1. 程式人生 > >MySQL 增量備份與還原

MySQL 增量備份與還原

mar mysql 結果 row 錯誤 進入 roo decode image

說明:
所謂增量備份,就是備份自上一次備份之後增加或改變的文件或內容。然而MySQL沒有提供直接的增量備份方法,但是卻可以通過MySQL的二進制日誌間接實現增量備份。下面有關操作方法進行測試。
.
.
實驗環境:裝有MySQL 5.7 數據庫的CentOS7虛擬機一臺
.
.
實驗步驟如下:
.
.
1 .進入配置文件添加二進制日誌
vim /etc/my.cnf
[mysqld]
在其中插入二進制日誌
log_bin=mysql-bin #二進制日誌

技術分享圖片
.
.
2 . 然後重啟數據庫,到日誌文件目錄下查看一下
技術分享圖片
.
.
3 . 新建數據庫,並在其中新建數據表,寫入數據
技術分享圖片
.
.
4 .重新生成一個日誌文件,這樣剛才的操作步驟都會保存在第一個二進制文件中
mysqladmin -u root -p flush-logs#重新生成二進制文件

技術分享圖片
.
.
5 . 將剛才新建的數據庫刪除,然後使用恢復命令恢復數據庫
mysqlbinlog --no-defaults mysql-bin.000001 | mysql -u root -p #日誌文件恢復

技術分享圖片
技術分享圖片
.
.
6 . 可以查看到數據庫已經被恢復好
技術分享圖片
.
.
7 .接下來,測試誤操作之後的恢復(兩種方法,一是利用時間點,二是利用位置點)先進行時間點的操作
在表中插入數據
下一步,刪除表中一條數據(誤操作)
然後再插入一條數據
這樣,誤操作的一條命令已經被覆蓋

技術分享圖片
.
.
8 . 重新生成一個二進制日誌
mysqladmin -u root -p flush-logs#創建新日誌

技術分享圖片
.
.
9 . mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002#64位解碼查看日誌文件,防亂碼
在其中需要找到兩個時間點
(1) 刪除數據的時間點
(2) 刪除之後下一步正確操作時間點

技術分享圖片
技術分享圖片
.
.
10 . 找到兩個時間點之後,用這兩個時間點進行恢復
mysqlbinlog --no-defaults --stop-datetime=‘2018-09-03 16:38:08‘ /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p#恢復到錯誤時間點
mysqlbinlog --no-defaults --start-datetime=‘2018-09-03 16:39:08‘ /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p#從下一個正確時間點恢復

技術分享圖片
.
.
11 . 這樣被誤刪除的數據就恢復好了
技術分享圖片
.
.
12 . 下面根據位置點,再進行恢復
同樣把數據恢復到誤刪除

技術分享圖片
.
.
13 . mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 #64位解碼查看日誌文件,防亂碼
找到錯誤點執行的命令後,復制上一次可正確執行的位置(at後面就是位置號)
然後找到下一次可執行的命令,同樣復制上一次可正確執行的位置

技術分享圖片
技術分享圖片
.
.
14 . 利用位置點進行恢復
mysqlbinlog --no-defaults --stop-datetime=‘1950‘ /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p#恢復到錯誤時間點
mysqlbinlog --no-defaults --start-datetime=‘2223‘ /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p#從下一個正確時間點恢復
最後查看結果,測試完成

技術分享圖片

MySQL 增量備份與還原