一、 使用說明
1. 備份
InnoDB配置說明:
innodb_data_home_dir = ./
innodb_data_file_path = ibdata1:50M:autoextend
innodb_log_group_home_dir = ./
innodb_log_files_in_group = 4
innodb_log_file_size = 104857600
備份命令:
$xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/u01/xtrabackup/1/ $cd /u01/xtrabackup/1/ && ls
ibdata1 test xtrabackup_checkpoints xtrabackup_logfile
2. 恢復
需要執行兩次xtrabackup --prepare
$xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/u01/xtrabackup/1/ $xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/u01/xtrabackup/1/ $cd /u01/xtrabackup/1/ && ls
ibdata1 ib_logfile0 ib_logfile1 ib_logfile2 ib_logfile3 test xtrabackup_checkpoints xtrabackup_logfile
這時候,InnoDB的全部數據文件就已經恢復了。將這些數據文件,拷貝回你的MySQL數據文件的位置就可以了。需要注意的 是,xtrabackup只備份數據文件,並不備份數據表結構(.frm),所以使用xtrabackup恢復的時候,你必須有對應表結構文件 (.frm)。
二、 增量備份
對比innobackupex和xtrabackup我們可以看到,innobackupex操作起來更方便,但是innobackupex會有短 暫的鎖表(時間依賴於MyISAM大小)。xtrabackup備份還有另一個重要特性:增量備份。(未來的版本innobackupex也可能增長該功 能)
1. 全量備份
$xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/u01/xtrabackup/2/ $ls /u01/xtrabackup/2/
ibdata1 test xtrabackup_checkpoints xtrabackup_logfile
2. 增量備份
$xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/u01/xtrabackup/2.1/ --incremental-basedir=/u01/xtrabackup/2/ $ls /u01/xtrabackup/2.1/
ibdata1.delta test xtrabackup_checkpoints xtrabackup_logfile
在增量備份的目錄下,數據文件都是以.delta結尾的。增量備份只備份上一次全量備份之後被修改過的page,所以增量備份一般只暫用較少的空間。
$cd /u01/xtrabackup/ && du --max-depth=1 -h
428K ./2.1
935M ./2
3. 增量備份恢復
我們需要分別對全量、增量備份各做一次prepare操作。
$xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/u01/xtrabackup/2/ $xtrabackup --prepare --target-dir=/u01/xtrabackup/2/ --incremental-dir=/u01/xtrabackup/2.1/ $xtrabackup --prepare --target-dir=/u01/xtrabackup/2/ #這一步不是必須的
這樣,/u01/xtrabackup/2/下的數據文件就可以直接放到你的MySQL數據目錄下,恢復數據了。
再次提醒,xtrabackup只備份InnoDB數據文件,表結構是不備份的,所以恢復的時候,你必須有對應表結構文件(.frm)。
參考文獻
[1]. http://www.percona.com/docs/wiki/percona-xtrabackup:start
[2].http://www.orczhou.com/index.PHP/2009/10/xtrabackup-2/