6月20日(2)
xtrbackup只能用於備份innodb引擎的數據庫,而innobackex 既可以備份innodb引擎的數據庫,也可以備份myisam引擎的數據庫。備份時也可分為全量備份和增量備份
[TOC]
一、安裝innobackex
1.1、安裝yum拓展源percona-release
rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
1.2、安裝percona-xtrabackup
yum install percona-xtrabackup
二、全量備份mysql
2.1、創建並授權備份用戶
我們可以直接授權all權限,但是不符合安全原則
mysql -uroot -pallen
> grant reload,lock tables,replication client on *.* to ‘backupuser‘@‘localhost‘ identified by ‘allen‘;
> flush privileges;
權限為reload,lock tables,replication client。
2.2、創建備份保存目錄
mkdir /data/backup
2.3、備份mysql
innobackupex --defaults-file=/etc/my.cnf --user=backupuser --password=‘allen‘ -S /tmp/mysql.sock /data/backup
–defaults-file=/etc/my.cnf指定配置文件位置是為了獲得datadir位置
備份完成後,會在指定的保存目錄中生成一個時間戳目錄,該時間戳目錄名稱也是恢復時的apply-log。
三、全量備份恢復
模擬故障,此時mysql的數據損毀。而之前我們已經全量備份。
3.1、停止mysql服務
/etc/init.d/mysqld stop ps aux |grep "mysqld"
#不允許mysql進程存在
3.2、刪除mysql原有數據
mv /data/mysql /data/mysql.bak
mkdir /data/mysql
3.3、恢復mysql
首先,需要初始化(初始化的叫法不夠嚴謹)
innobackupex --use-memory=512M --apply-log /備份的時間戳目錄/
# innobackupex --use-memory=512M --apply-log /data/backup/2017-08-23_10-24-06/
–use-memory=512M指定備份時使用的內存為512M,註意單位。默認為字節
初始化完成後,進行恢復
innobackupex --defaults-file=/etc/my.cnf --copy-back /備份的時間戳目錄/
#innobackupex --defaults-file=/etc/my.cnf --copy-back /data/backup/2017-08-23_10-24-06/
使用–copy-back參數恢復
設置權限
chown -R mysql:mysql /data/mysql
四、增量備份
之前我們已經進行了全量備份,經過操作,一段時間後重新全量備份的話,需要耗費的資源較多,這時我們就可以使用增量備份了。
本次實驗將執行一次全量備份,兩次增量備份
4.1、進行一次全量備份
增量備份是基於全量備份的,所以在增量備份操作之前我們需要先進行全量備份
# innobackupex --defaults-file=/etc/my.cnf --user=backuser --password=‘allen‘ -S /tmp/mysql.sock /data/backup
/data/backup/2017-08-24_23-05-09/就是我們全量備份的時間戳目錄
4.2、進行增量備份
4.2.1、進行數據庫操作
#創建測試庫test1_backup
mysql -uroot -pallen -e ‘create database test1_backup;‘
#導入數據
mysql -uroot -pallen test1_backup < /tmp/1.sql
模擬數據庫數據發生改變,進行增量備份
4.2.2、進行第一次增量備份
innobackupex --defaults-file=/etc/my.cnf --user=backuser --password=‘allen‘ -S /tmp/mysql.sock --incremental /data/backup --incremental-basedir=/data/backup/全量備份時間戳目錄/
–incremental表示增量備份,–incremental-basedir指定全量備份時間戳目錄,因為本次增量備份是基於全量備份。
本次增量備份的時間戳目錄為/data/backup/2017-08-24_23-15-19
4.2.3、進行數據庫操作
#創建測試庫test2_backup
mysql -uroot -pallen -e ‘create database test2_backup;‘
#導入數據
mysql -uroot -pallen test2_backup < /tmp/1.sql
4.2.4、進行第二次增量備份
innobackupex --defaults-file=/etc/my.cnf --user=backuser --password=‘allen‘ -S /tmp/mysql.sock --incremental /data/backup --incremental-basedir=/data/backup/第一次增量備份時間戳目錄/
–incremental-basedir指定第一次增量備份時間戳目錄,因為本次增量備份是基於第一次增量備份。
本次增量備份的時間戳目錄為/data/backup/2017-08-24_23-21-16/
經過以上操作,我們的增量備份就完成了
4.3、增量備份指定的INCREMENTAL-BASEDIR如何確定
在上面的實驗中,我們進行增量操作時。第一次增量的incremental-basedir是全量備份時間戳目錄,第二次增量的incremental-basedir是第一次增量備份的時間戳目錄,這是為什麽呢?
在每個備份的時間戳目錄下面都有一個文件,裏面記錄了本次備份的檢查點。
from_lsn為起始檢查點,to_lsn為終止檢查點
全量備份的from_lsn為0,to_lsn為第一次增量備份的from_lsn,而第一次增量備份的to_lsn為第二次增量備份的from_lsn。剛好組成0-1863060。
如果上面的檢查點不是依次連續的,那麽在後面的增量恢復時容易出現錯誤。
如果每一次都是使用全量備份時間戳目錄作為incremental-basedir,那麽會出現以下情況
第二次增量備份的to_lsn會覆蓋第一次增量備份的to_lsn。
如果是這樣,那麽我們在恢復時只需要初始化全量備份和第二次增量備份的時間戳目錄
五、增量備份恢復
模擬故障,此時mysql的數據損毀。而之前我們已經進行全量和增量備份。
5.1、停止mysql服務
/etc/init.d/mysqld stop
ps aux |grep "mysqld"
#不允許mysql進程存在
5.2、刪除mysql原有數據
mv /data/mysql /data/mysql.bak
mkdir /data/mysql
5.3、增量備份合並步驟
1、先初始化全量
innobackupex --apply-log --redo-only /data/backup/全量備份目錄
2、初始化第一次增量
innobackupex --apply-log --redo-only /data/backup/全量備份目錄 --incremental-dir=/data/backup/第一次增量備份目錄
3、innobackupex --apply-log /data/backup/全量備份目錄 --incremental-dir=/data/backup/第二次增量備份目錄
4、再初始化一次全量
innobackupex --apply-log /data/backup/全量備份目錄
–redo-only參數是增量備份必須的參數,第一步和最後一步初始化都是初始化全量備份,但是最後一步不需要–redo-only參數。(因為全部數據都在最後一步的全量目錄中)
除了第一步和最後一步,其余步驟都是初始化增量備份,最後一次增量備份也不需要–redo-only參數
使用–use-memory可以設置執行時使用的內存大小
5.4、增量備份恢復
進行初始化,執行恢復時與全量備份恢復一樣,都是指定全量備份目錄
innobackupex --copy-back /bakdir/全量備份目錄
#為了避免權限問題,導致mysql無法啟動
chown -R mysql:mysql /data/mysql
所以,增量備份恢復在本次實驗的步驟如下。
#停止mysql服務
/etc/init.d/mysqld stop
#模擬數據庫損毀
mv /data/mysql /data/mysql.bak
mkdir /data/mysql
chown mysql:mysql /data/mysql
#初始化全局
innobackupex --apply-log --redo-only /data/backup/2017-08-24_23-05-09
#初始化第一次增量
innobackupex --apply-log /data/backup/2017-08-24_23-05-09 --incremental-dir=/data/backup/2017-08-24_23-21-16
#初始化第二次增量,這是最後一次增量,所以不需要--redo-only參數
innobackupex --apply-log /data/backup/2017-08-24_23-05-09 --incremental-dir=/data/backup/2017-08-24_23-21-16
#再初始化全量,不使用--redo-only
innobackupex --apply-log /data/backup/2017-08-24_23-05-09
#恢復mysql
innobackupex --copy-back /data/backup/2017-08-24_23-05-09
#設置權限,避免啟動mysql出錯
chown -R mysql:mysql /data/mysql
5.5、查看是否成功
啟動test1_backup和test2_backup是做完全量備份才創建的測試庫,說明恢復成功
ps:在進行增量備份時,每一次的–incremental-basedir都指定全量備份時間戳。那麽在恢復時,只需要初始化全量備份時間戳目錄和最後一次增量備份的時間戳目錄 。
1、先初始化全量
innobackupex --apply-log --redo-only /data/backup/全量備份目錄
2、初始化最後一次增量
innobackupex --apply-log /data/backup/全量備份目錄 --incremental-dir=/data/backup/最後一次增量備份目錄
3、再初始化一次全量,不需要--redo-only
innobackupex --apply-log /data/backup/全量備份目錄
4、恢復
innobackupex --copy-back /data/backup/全量備份目錄
相關視頻
鏈接:http://pan.baidu.com/s/1miFpS9M 密碼:86dx
鏈接:http://pan.baidu.com/s/1o7GXBBW 密碼:ue2f
6月20日(2)