MySQL增量備份與恢復

上篇講的完全備份我們現在總結出完全備份會有大量的重複數據,並且完全備份的時間與恢復的時間很長。解決完全備份存在的問題就是使用增量備份的方式,增量備份就是備份自上一次備份之後增加或改變的文件或者內容。

增量備份的特點:

優點:沒有重複數據,備份量不大,時間短。
缺點:需要上次完全備份及完全備份之後所有的增量備份才能恢復,
MySQL沒有提供直接的增量備份方法,但是可以通過mysql的二進制文件(binarylogs)間接實現增量備份。二進制日誌對備份的意義如下:
(1)二進制日誌文件保存了所有更新或者可能更新數據庫的操作。
(2)二進制日誌在啓動MySQL服務器後開始記錄,並在文件達到max_binlog_size所設置的大小或者接收到flush logs命令後重新創建新的日誌文件。
(3)只需要定時執行flush logs方法重新創建新的日誌,生成二進制文件序列,並及時把這些日誌保存到安全的地方就完成了一個時間段的增量備份。

增量備份與恢復實驗:

(1)先進MySQL的配置文件,配置二進制日誌,重啓服務:
[root@localhost ~]# vim /etc/my.cnf
MySQL增量備份與恢復
[root@localhost ~]# systemctl restart mysqld.service //配置完重啓服務
MySQL增量備份與恢復
(2)接下來登錄MySQL數據庫,創建數據庫並建表寫入內容:
MySQL增量備份與恢復
MySQL增量備份與恢復
(3)數據庫、表創建好之後做一個完全備份:
[root@localhost ~]# mysqldump -uroot -p company > /opt/company$(date +%F).sql
MySQL增量備份與恢復
(4)創建數據庫 表的所有數據和操作將完整記錄在第一個二進制文件(mysql-bin.000001)中:
[root@localhost data]# mysqlbinlog --no-defaults mysql_bin.000001
MySQL增量備份與恢復
(5)使用flush logs命令生成一個二進制文件:
[root@localhost data]# mysqladmin -uroot -p flush-logs
MySQL增量備份與恢復
(6)接下來修改表內容,會在第二個二進制文件mysql_bin.000002中記錄增量數據及操作:
MySQL增量備份與恢復
(7)查看新生成的二進制日誌文件 [root@localhost data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql_bin.000002
MySQL增量備份與恢復
(8)接下來將增量備份的文件恢復到數據庫company中的表中:
[root@localhost data]# mysqlbinlog --no-defaults mysql-bin.000001 | mysql -uroot -p
[root@localhost data]# mysqlbinlog --no-defaults mysql-bin.000002 | mysql -uroot -p //使用二進制文件進行恢復操作(需要注意:恢復的順序,要先恢復最先生成的二進制文件,然後依次執行)


(9) 接下來是基於時間點恢復:
通過查看二進制日誌文件: 180903 15:31:56 錯誤操作時間點 --stop-datetime
[root@localhost data]# mysqlbinlog --no-defaults --stop-datetime='2018-09-03 15:31:56' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p
通過查看二進制日誌文件:180903 15:32:10 下一個正確操作的時間點 --start-datetime
[root@localhost data]# mysqlbinlog --no-defaults --start-datetime='2018-09-03 15:32:10' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p


(10) 接下來是基於位置點恢復:
通過查看二進制日誌文件: At 833 上一次可以被正確執行的位置 --stop--position
[root@localhost data]# mysqlbinlog --no-defaults --stop-position='833' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p
通過查看二進制日誌文件:At 930 下一次可以被正確執行的位置 --start--position

[root@localhost data]# mysqlbinlog --no-defaults --start-position='930' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p


本篇總結:

MySQL沒有直接提供增量備份的工具,需要藉助二進制日誌文件進行操作。

使用分割日誌的方式進行增量備份。
增量恢復需要根據日誌文件的時間先後,逐個執行。
使用基於時間和位置的方式進行恢復,可以更精確地恢復數據。
大企業應每週做一次全備,每天做一次增量備份;中小企業應每天進行一次全備。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章