標籤:
xtrabackup是一種支援InnoDB和xtradb儲存引擎的的物理備份工具,它有以下幾個特點:
(1)備份過程快速、可靠;
(2)備份過程不會打斷正在執行的事務;
(3)能夠基於壓縮等功能節約磁碟空間和流量;
(4)自動實現備份檢驗;
(5)還原速度快。
需要安裝的軟體包:
percona-xtrabackup可以從官網https://www.percona.com/software/mysql-database/percona-xtrabackup擷取相應版本
xtrabackup備份策略:
一、完全備份
xtrabackupex --user=DBUSER --passwd=DBUSERPASSWD /path/to/backup_dir/
使用innobakupex備份時,它會調用xtrabackup備份所有的InnoDB表,複製所有關於表結構定義的相關檔案(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關檔案,同時還會備份觸發器和資料庫配置資訊相關的檔案。這些檔案會被儲存至一個以時間命名的目錄中。
在備份的同時,innobackupex還會在備份目錄中建立如下檔案:
(1)xtrabackup_checkpoints —— 備份類型(如完全或增量)、備份狀態(如是否已經為prepared狀態)和LSN(記錄序號)範圍資訊;
每個InnoDB頁(通常為16k大小)都會包含一個記錄序號,即LSN。LSN是整個資料庫系統的系統版本號碼,每個頁面相關的LSN能夠表明此頁面最近是如何發生改變的。
(2)xtrabackup_binlog_info —— mysql伺服器當前正在使用的二進位記錄檔及至備份這一刻為止二進位日誌事件的位置。
(3)xtrabackup_binlog_pos_innodb —— 二進位記錄檔及用於InnoDB或XtraDB表的二進位記錄檔的當前position。
(4)xtrabackup_binary —— 備份中用到的xtrabackup的可執行檔;
(5)backup-my.cnf —— 備份命令用到的配置選項資訊;
2、準備(prepare)一個完全備份
一般情況下,在備份完成後,資料尚且不能用於恢複操作,因為備份的資料中可能會包含尚未提交的事務或已經提交但尚未同步至資料檔案中的事務。因此,此時資料檔案仍處理不一致狀態。“準備”的主要作用正是通過復原未提交的事務及同步已經提交的事務至資料檔案,使得資料檔案處於一致性狀態。
實現方式加參數--appy-log
# innobackupex --apply-log /path/to/backup_dir
在實現“準備”的過程中,innobackupex通常還可以使用--use-memory選項來指定其可以使用的記憶體的大小,預設通常為100M。如果有足夠的記憶體可用,可以多劃分一些記憶體給prepare的過程,以提高其完成速度。
3、從一個完全備份中恢複資料 (注意:恢複不用啟動MySQL)
innobackupex命令的--copy-back選項用於執行恢複操作,其通過複製所有資料相關的檔案至mysql伺服器DATADIR目錄中來執行恢複過程。innobackupex通過backup-my.cnf來擷取DATADIR目錄的相關資訊。
# innobackupex --copy-back /path/to/BACKUP-DIR
#還原以後預設許可權是root使用者,需要修改為mysql
# chown -R mysql:mysql /mydata/data/
4、使用innobackupex進行增量備份
每個InnoDB的頁面都會包含一個LSN資訊,每當相關的資料發生改變,相關的頁面的LSN就會自動成長。這正是InnoDB表可以進行增量備份的基礎,即innobackupex通過備份上次完全備份之後發生改變的頁面來實現。
以全量為基礎做一次增量備份,可以使用下面的命令進行:
# innobackupex --incremental /backup --incremental-basedir=/backup/2016-05-10_17-18-54
#2016-05-10_17-18-54為全量備份產生的目錄,以此為基礎做增量備份
此命令執行結束後,innobackupex命令會在/backup目錄中建立一個新的以時間命名的目錄以存放所有的增量備份資料。另外,在執行過增量備份之後再一次進行增量備份時,其--incremental-basedir應該指向上一次的增量備份所在的目錄。
註:增量備份僅能應用於InnoDB或XtraDB表,對於MyISAM表而言,執行增量備份時其實進行的是完全備份。
創造環境:
#/etc/init.d/mysqld stop
#cp -a /var/lib/mysql /var/lib/mysql.bak
# rm -fr /var/lib/mysql
“準備”(prepare)增量備份與整理完全備份有著一些不同,尤其要注意的是:
(1)需要在每個備份(包括完全和各個增量備份)上,將已經提交的事務進行“重放”。“重放”之後,所有的備份資料將合并到完全備份上。
(2)基於所有的備份將未提交的事務進行“復原”。
# innobackupex --user=db_user --password=db_password --apply-log --redo-only /backup/2016-05-10_17-18-54
# innobackupex --user=db_user --password=db_password --apply-log --redo-only /backup/2016-05-10_17-18-54 --incremental-dir=/backup/incremental-1
如果有多次增量備份,需要執行多次此操作,將增量備份加入到全量備份中
# innobackupex --user=db_user --password=db_password --apply-log /backup/2016-05-10_17-18-54 復原日誌
# innobackupex --user=db_user --password=db_password --copy-back /backup/2016-05-10_17-18-54
恢複完成,重新啟動mysql即可
#/etc/init.d/mysqld start
使用xtrabackup進行mysqlDatabase Backup