上篇講的徹底備份咱們如今總結出徹底備份會有大量的重複數據,而且徹底備份的時間與恢復的時間很長。解決徹底備份存在的問題就是使用增量備份的方式,增量備份就是備份自上一次備份以後增長或改變的文件或者內容。mysql
增量備份的特色:sql
優勢:沒有重複數據,備分量不大,時間短。
缺點:須要上次徹底備份及徹底備份以後全部的增量備份才能恢復,
MySQL沒有提供直接的增量備份方法,可是能夠經過mysql的二進制文件(binarylogs)間接實現增量備份。二進制日誌對備份的意義以下:
(1)二進制日誌文件保存了全部更新或者可能更新數據庫的操做。
(2)二進制日誌在啓動MySQL服務器後開始記錄,並在文件達到max_binlog_size所設置的大小或者接收到flush logs命令後從新建立新的日誌文件。
(3)只須要定時執行flush logs方法從新建立新的日誌,生成二進制文件序列,並及時把這些日誌保存到安全的地方就完成了一個時間段的增量備份。數據庫
增量備份與恢復實驗:vim
(1)先進MySQL的配置文件,配置二進制日誌,重啓服務:
[root@localhost ~]# vim /etc/my.cnf
[root@localhost ~]# systemctl restart mysqld.service //配置完重啓服務
(2)接下來登陸MySQL數據庫,建立數據庫並建表寫入內容:
(3)數據庫、表建立好以後作一個徹底備份:
[root@localhost ~]# mysqldump -uroot -p company > /opt/company$(date +%F).sql
(4)建立數據庫 表的全部數據和操做將完整記錄在第一個二進制文件(mysql-bin.000001)中:
[root@localhost data]# mysqlbinlog --no-defaults mysql_bin.000001
(5)使用flush logs命令生成一個二進制文件:
[root@localhost data]# mysqladmin -uroot -p flush-logs
(6)接下來修改表內容,會在第二個二進制文件mysql_bin.000002中記錄增量數據及操做:
(7)查看新生成的二進制日誌文件 [root@localhost data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql_bin.000002
(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--positionide[root@localhost data]# mysqlbinlog --no-defaults --start-position='930' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p工具
MySQL沒有直接提供增量備份的工具,須要藉助二進制日誌文件進行操做。
rest
使用分割日誌的方式進行增量備份。
增量恢復須要根據日誌文件的時間前後,逐個執行。
使用基於時間和位置的方式進行恢復,能夠更精確地恢復數據。
大企業應每週作一次全備,天天作一次增量備份;中小企業應天天進行一次全備。日誌