使用xtrabackup對MySQL innodb表熱備份,增量備份

一、MySQL備份方式

對於數據庫的備份重要性沒必要多言,爲了防止數據以各類方式丟失,損壞,必須對數據庫進行按期備份。mysql

  • 首先考慮備份的時候對數據庫業務的影響sql

    • 熱備:讀寫操做都可進行的狀態下進行備份數據庫

    • 溫備:可讀但不可寫狀態下進行的備份安全

    • 冷備:讀寫操做均不可進行的狀態下所作的備份bash

  • 再者若是按期進行備份,若是每次都進行全量備份,顯然一部分數據是重複,浪費大量磁盤空間app

    • 徹底備份工具

    • 差別備份:僅備份自上一次徹底備份以來變化的那部數據spa

    • 增量備份:僅備份自上一次徹底備份或 增量備份以來變化的那部分數據日誌

差別備份是按徹底備份那一刻的備份數據爲起點,進行備份
增量備份是按上一次備份那一刻的備份數據爲起點,進行備份
差別備份比增量備份消耗更大的空間,可是增量備份恢復步驟比較多,須要按順序依次恢復code

  • 備份數據兩種方法

    • 物理備份:複製數據文件進行備份

    • 邏輯備份:從數據庫中導出數據到文件中

這兩種方式比較,物理備份更加效率,對數據庫運行影響低一些;邏輯備份方式可選擇的備份數據粒度更精細。

二、備份利器-xtrabackup

邏輯備份使用mysqldump,用法簡單,這裏再也不詳述;
物理備份方法首選xtrabackup開源工具。此款工具由percona開發,對使用Innodb引擎的表可進行熱備,增量備份。對MyISAM引擎就不支持這些特性了。

2.1 安裝

本文環境:CentOS7.2 ,percona-xtrabackup-2.3.2-1
官方下載傳送
安裝完成,rpm -ql percona-xtrabackup
查看安裝文件,主程序爲xtrabackup,另外有已腳本封裝工具innobackupex,主要使用它。

2.2 備份

Usage:

innobackupex [--defaults-file=] --user=  --password=  --host=  /PATH/TO/BACKUP_DIR

示例:
數據庫正常運行的狀況下,咱們便可備份,容許遠程備份
受權最小權限備份
mysql >grant reload,lock tables,replication client on . to 'user'@'host';

#進行全庫備份,工具根據mysql配置,自動尋找數據路徑
innobackupex --user=root --password=cutemysql /tmp/backup

clipboard.png

看到OK! 標識即成功完成備份,數據存放路徑也可看到
打包壓縮,把數據copy到安全的地方去吧!

2.3 恢復

若是某一天數據庫數據丟失了,還好咱們有備份,冷靜地恢復數據
Usage:

innobackupex --apply-log  /PATH/TO/BACKUP_DIR #準備恢復數據
innobackupex --copy-back  /PATH/TO/BACKUP_DIR #正式恢復數據

示例:
恢復的時候,要求數據庫服務關閉,而且在本地執行操做,數據庫數據路徑爲空
而且在/etc/my.cnf 中明確指定當前數據庫事務日誌的大小

  • innodb_log_file_size=5242880

首先進行備份數據準備處理
$ innobackupex --apply-log /tmp/backup/2016-11-22-11-22-20
看到OK ! 標識即爲成功

恢復數據準備完成後,便可正式恢復數據
$ innobackupex --copy-back /tmp/backup/2016-11-22_11-22-20

數據庫數據路徑下已恢復數據,再更改文件屬主以後,數據庫便可正常啓動!
$ chown -R mysql.mysql /var/lib/mysql

熱備方式中,備份過程當中數據庫中產生的事務都會被xtrabackup記錄,是爲log sequence number(LSN)。在上面執行準備恢復數據語句後,innodb表的數據已經前滾至備份結束那一刻狀態。若是要恢復啓動備份結束後發生變化的數據,須要結合二進制日誌進一步恢復
那麼從哪一位置開始恢復二進制日誌呢?在備份數據目錄中,xtrabackup_binlog_info文件有記錄

2.4 增量備份與恢復

2.4.1 增量備份

增量備份以前須要一個全量備份,全量備份目錄爲2016-11-22_15-59-24

#第一次增量備份
innobackupex --user=root --password=cutemysql  --incremental ./ --incremental-basedir=./2016-11-22_15-59-24
#第二次增量備份,爲了看出差別,自行提交一個事務
innobackupex --user=root --password=cutemysql  --incremental ./ --incremental-basedir=./2016-11-22_17-08-42

查看兩個目錄中記錄的lsn,可見增量是在按lsn來記錄的

clipboard.png

2.4.2 增量恢復

增量恢復的準備階段須要注意

  • 按時間順序進行備份合成

  • 除最後一次追加增量數據時,必須帶上--redo-only 選項

  • incremental-dir 使用絕對路徑

#對全量數據準備
innobackupex --apply-log --redo-only ./2016-11-22_15-59-24
#追加第一次增量數據
innobackupex --apply-log --redo-only ./2016-11-22_15-59-24 --incremental-dir=/tmp/backup/2016-11-22_17-08-42
#追加第二次增量數據,也是最後一次,不帶--redo-only
innobackupex --apply-log  ./2016-11-22_15-59-24 --incremental-dir=/tmp/backup/2016-11-22_17-20-25
#恢復數據
innobackupex --copy-back fullbak
chown -R mysql.mysql /var/lib/mysql

至此完成!

2.5 備份壓縮

xtrabackup 支持stream流壓縮

#備份時開啓stream選項壓縮
innobackupex --stream=tar ./ | gzip - > backup.tar.gz
innobackupex --stream=tar ./ | bzip2 - > backup.tar.bz2
#解壓時注意帶上-i 選項
tar -xizf backup.tar.gz -C backup

--- EOF ---

相關文章
相關標籤/搜索