mysql實時增量備份
采用binlog日誌的好處
掌控所有更改操作,必要時可用於恢復數據
數據庫主從復制的必要條件
[root@localhost~]# vim /etc/my.cnf [mysqld] .. .. log-bin=mysql-bin //啟用二進制日誌,並指定前綴 .. ..
[root@dbsvr1 ~]# service mysqld restart
確認binlog日誌文件
新啟用binlog後,每次啟動MySQl服務都會新生成一份日誌文件:
[root@localhost~]# ls /var/lib/mysql/mysql-bin.* /var/lib/mysql/mysql-bin.000001/var/lib/mysql/mysql-bin.index
清除binlog日誌
刪除早前指定版本的binlog日誌
RURGE MASTER LOGS TO "binlog日誌"
刪除所有binlog日誌,重新新建日誌
RESET MASTETR
分析binlog日誌
使用mysqlbinlog工具
格式:mysqlbinlog [選項] 日誌文件
常用選項
--start-datatime="YYYY-mm-dd HH:MM:SS"
--stop-datatime="YYYY-mm-dd HH:MM:SS"
--start-position=起止位置
--stop-positon=結束位置
[root@localhost ~]# mysqlbinlog /var/lib/mysql/mysql-bin.000002 [root@localhost ~]# mysqlbinlog --start-datetime="2018-10-20 23:30" /var/lib/mysql/mysql-bin.000002
利用binlog恢復數據
基本方法
使用mysqlbinlog提取歷史SQL操作
通過管道交給mysql命令重做
案例
重做第一份binlog所記錄的更改操作
執行指定Pos節點範圍內的sql命令恢復數據
根據上述日誌分析,只要恢復從2018-10-12 20:40:50到2018-10-20 23:15:50之間的操作即可。可通過mysqlbinlog指定時間範圍輸出,結合管道交給msyql命令執行導入重做:
[root@loclahost ~]# mysqlbinlog --start-datetime="2018-10-12 20:40:50" \ --stop-datetime="2018-10-20 23:15:50" /var/lib/mysql/mysql-bin.000002 | mysql -u root -p Enter password: 若是全部重做 [root@loclahost ~]# mysqlbinlog /var/lib/mysql/mysql-bin.000002 | mysql -u root -p Enter password:
mysql備份工具
mysqlhotcopy不足
僅適用於MyISAM引擎的數據庫
備份過程中,數據插入和更新操作都會被掛起
mysqldump不足
效率較低,備份和還原速度慢
備份過程中,數據插入和更新操作會被掛起
XtraBackup工具
在線熱備份工具
備份過程中不鎖表,適合生產環境適用
支持整體備份和增量備份
組件一xtrabackup:C程序,支持InnoDB和XtraDB
組件二innobackupex:以Perl腳本封裝xtrabackup,還支持MyISAM
xtrabackup基本選項 | |
基本選項 | 解釋 |
--backup | 執行備份操作 |
--target-dir | 備份的目標文件夾 |
--datadir | 備份的原始文件夾(Mysql庫的位置) |
--prepare | 準備恢復數據 |
--increamental-basedir | 增量備份時,指定參照的完整備份路徑 |
--incremental-dir | 準備恢復目錄時,指定增量備份的路徑 |
1)使用XtraBackup執行數據庫備份
[root@localhost~]# mkdir -p /backup/mysql [root@localhost~]# xtrabackup_56 –backup --datadir=/var/lib/mysql/ --target-dir=/backup/mysql/
2)確認備份好的文件數據:
[root@loclahost~]# ls /backup/mysql/
3)做一個增量備份(基於前一步的完整備份)
[root@localhost ~]# xtrabackup_56 --backup \ #xtrabackup_55 是5.5版本,xtrabackup_56是5.6版本 --datadir=/var/lib/mysql/ --target-dir=/backup/inc01/ --incremental-basedir=/backup/mysql/
確認備份好的文件數據:
[root@localhost~]# ls /backup/inc01/
對比完整備份、增量備份的大小:
[root@localhost~]# du -sh /backup/mysql/ /backup/inc01/ 11M /backup/mysql/ //完整備份的大小 264K /backup/inc01/
準備用於恢復的數據庫目錄
以/backup/mysql/可用來重建MySQL服務器。這種情況下,官方建議連做兩次--prepare,以確保數據一致性:
[root@localhost ~]# xtrabackup_56 --prepare --target-dir=/backup/mysql/ [root@localhost ~]# xtrabackup_56 --prepare --target-dir=/backup/mysql/
準備恢復“完整備份+增量備份”
以/backup/mysql/用來重建MySQL服務器,但這種情況下需提前合並相關增量備份的數據:
先準備完整備份目錄,添加--apply-log-only僅應用日誌:
[root@loclahost ~]# xtrabackup_56 --prepare --target-dir=/backup/mysql --apply-log-only
然後整合增量備份的數據,通過--incremental-dir選項指定增量位置:
[root@localhost ~]# xtrabackup_56 --prepare --target-dir=/backup/mysql --apply-log-only --incremental-dir=/backup/inc01
至此,數據庫已經包含增量備份
mysql實時增量備份