1.執行全備
innobackupex是對xtrabackup進行封裝過的perl腳本,詳細參數可查看使用手冊
innobackupex --database="database_name" --user=用戶名 --password=密碼
--no-lock --defaults-file=/etc/mysql/my.cnf /bak
執行完以上語句會在/bak目錄下產生一個以備份時間爲文件名的目錄,如下:
drwxr-xr-x 3 root root 4096 8月 21 10:16 2013-08-21_10-15-53/
drwxr-xr-x 3 root root 4096 8月 21 10:41 2013-08-21_10-40-37/
在使用innobackupex進行備份時,還可以使用--no-timestamp選項來阻止命令自動創建一個以時間 命名的目錄;innobackupex命令將會創建一個BACKUP-DIR目錄來存儲備份數據。
2.恢復數據
一般情況下,在備份完成後,數據尚且不能用於恢復操作,因爲備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據文件仍處於不一致狀態--apply-log
主要作用正是通過回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處於一致性狀態。
# innobackupex --apply-log /bak/2013-08-21_10-15-53/
恢復數據時,如果數據庫數據目錄不爲空,恢復會終止,防止意外覆蓋。因此先把datadir目錄更名。數據庫數據目錄可以通過my.cnf查看。
# innobackupex --copy-back /bak/2013-08-21_10-15-53/
3.增量備份
a. 產生第一個增量備份
innobackupex --incremental /data/backups --incremental-basedir=BASEDIR
此時的BASEDIR是一個全備份的目錄,執行後會生成一個新的增量備份目錄如
/data/backups/2013-04-01_23-01-18 我們把這個目錄稱爲INCREMENTAL-DIR-1
b.產生第二個增量備份
innobackupex --incremental /data/backups --incremental-basedir=INCREMENTAL-DIR-1
執行後會生成一個新的增量備份目錄 我們把這個目錄稱爲INCREMENTAL-DIR-2
/data/backups/2013-04-02_23-01-18
c.產生第三個增量備份
innobackupex --incremental /data/backups --incremental-basedir=INCREMENTAL-DIR-2
依次類推
4.增量備份恢復
(2)基於所有的備份將未提交的事務進行“回滾”。
innobackupex --apply-log --redo-only BASE-DIR
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
innobackupex --apply-log BASE-DIR
innobackupex --copy-back BASE-DIR
5.mysql數據恢復的過程
a.首先關閉數據庫
service mysql stop
b.準備並回滾數據庫
innobackupex --apply-log BASE-DIR
innobackupex --copy-back BASE-DIR
c.修改數據庫權限
chown -R mysql:mysql /var/lib/mysql
注:數據目錄/var/lib/mysql 替換成數據恢復的目錄
d.啓動mysql
service mysql start
6.報錯信息
ERROR 1018 (HY000): Can't read dir of '.' (errno: 13)
由於權限問題, 修改數據目錄權限解決
chown -R mysql:mysql /var/lib/mysql
參考博文:
http://blog.chinaunix.net/uid-233544-id-3166703.html