天天看點

Xtrabackup增量備份探索

Xtrabackup 簡介:

    Xtrabackup 是percona公司(mysqlperformanceblog)的開源項目,目的是實作類似innodb官方的熱備份工具InnoDB Hot Backup的功能,可以幫助我們對MySQL InnoDB類型的資料庫表進行線上熱備份。 

Xtrabackup中包含兩個工具: 

* xtrabackup - 用于熱備份innodb, xtradb表的工具,不能備份其他表。 

* innobackupex - 對xtrabackup封裝的perl腳本,提供了myisam表備份的能力。(能進行整庫和資料表備份)。本文旨在介紹Xtrabackup工具對資料庫進行增量備份實踐。

優點:

           1、資料庫太大沒有足夠的空間全量備份,作增量備份有效節省空間,且效率高。

           2、支援熱備份。備份過程不鎖表,不受時間限制,不影響使用者使用。

           3、每日備份隻産生少量資料,遠端備份傳輸更友善。同時節省空間。

           4、備份恢複基于檔案操作,降低直接對資料庫操作風險。

           5、備份效率更高,恢複效率更高。

實踐探索:

測試之前先備份好資料庫!

1、下載下傳:

http://www.percona.com/percona-builds/XtraBackup/XtraBackup-1.0/

選擇一個合适的版本。以rpm包為例,xtrabackup-1.0-56.rhel5.x86_64.rpm。

2、安裝(必須先安裝mysql-client):

  1. # rpm -ivh xtrabackup-1.0-56.rhel5.x86_64.rpm 

3、修改資料庫配置檔案:

  1. # vim /etc/my.cnf 
  2.   datadir = /var/lib/mysql/(添加或修改:資料庫目錄)

特别注意:default_table_type = InnoDB (必須改,否則進行增量備份的時候不成功,我測試的時候因為這個折騰了很久)

另外建一個用于資料備份的目錄

  1. # mkdir  /var/backups 

4、重新開機資料庫:

  1. # mysqladmin -u root -p shutdown 
  2. # service mysqld start 
備份政策:

整庫備份直接用innobackupex-1.5.1腳本。

隻對InnoDB或xtradb表,進行備份直接用xtrabackup。

       由于xtrabackup不能備份表結構,是以備份時首先用innobackupex-1.5.1腳本對資料庫進行整庫備份。再用xtrabackup進行表備份。分别進行。恢複時也分别進行恢複。如果發生表結構丢失則先使用innobackupex-1.5.1進行恢複,然後再用xtrabackup恢複增量資料。用生成的檔案ib*覆寫用innobackupex-1.5.1恢複後的ib*檔案。

一、整庫備份及恢複。

   備份

  1. # innobackupex-1.5.1 --user=root --password=cdqd --defaults-file=/etc/my.cnf   /var/backups/ 

(root為資料庫使用者名,cdqd為資料庫密碼,/etc/my.cnf為mysql配置檔案所在位置,/var/backups/為備份檔案存儲目錄,執行後會在)

   恢複

 首先停掉資料庫,然後删除資料庫目錄下的所有資料庫檔案。

首先寫日志檔案,然後恢複,如下。(注:2010-04-17_22-19-30是自動生成的以備份時間命名的檔案夾,恢複時根據情況進行選擇)

  1. # innobackupex-1.5.1 --apply-log --defaults-file=/etc/my.cnf  /var/backups/2010-04-17_22-19-30 
  2. # innobackupex-1.5.1 --copy-back --defaults-file=/etc/my.cnf  /var/backups/2010-04-17_22-19-30 

使用cd或者ls 指令看看你的資料庫目錄下是不是有檔案了?

修改資料庫檔案權限,否則無法啟動。(這步我是cd到原資料庫目錄下進行的)

#chown -R mysql:mysql *

重新開機資料庫,開恢複是否成功。

二、全量備份及恢複

(使用xtrabackup,僅限InnoDB和xtradb表,且注意mysql配置檔案my.cnf中“default_table_type = InnoDB”否則不成功)。

  1. #xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/var/backups/base/ 

  執行兩次:

  1. #xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/var/backups/base 
  2. #xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/var/backups/base 

  将資料庫停掉,删除資料庫下的ib*(ib開頭的所有)檔案。将/var/backups/base目錄下的ib*檔案拷貝到資料庫目錄。

  設定權限:

  1. #chown mysql:mysql ib* 

重新開機資料庫後測試,是否成功。

三、增量備份及恢複

(再次強調,xtrabackup做增量僅限InnoDB和xtradb表,且注意mysql配置檔案my.cnf中“default_table_type= InnoDB”否則不成功)。

做增量前當然要先進行全量備份,在全量的基礎上來進行增量。

首先進行全量備份。

  1. # xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/var/backups/base/ 

在全量備份的基礎上進行增量。

  1. # xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/var/backups/1/ -- 
  2. incremental-basedir=/var/backups/base 

......

(注:/var/backups/1/是每次都需修改的。比如第二次增量就改成/var/backups/2,當然可以寫個腳本進行自動備份,備份腳本将陸續奉上......恢複的時候也是一樣)

增量恢複。(步驟同全量恢複,隻是在執行恢複指令的時候中間多一步)

  1. # xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/var/backups/base 
  2. # xtrabackup --target-dir=/backups/base --prepare --incremental-dir=/var/backups/1 
  3. # xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/var/backups/base 

  将資料庫停掉,删除資料庫下的ib*檔案。将/var/backups/base目錄下的ib*檔案拷貝到資料庫目錄。

  1. #chown mysql:mysql ib* 

重新開機後測試。是否成功。

注:備份前先登入資料庫,打開一個表看看記錄條數,然後進行備份,然後再對表最終的記錄進行修改,然後在備份,再測試。

附圖:

全量備份結果

Xtrabackup增量備份探索

增量結果

Xtrabackup增量備份探索

比較一下增量是不是有效的節省了空間呢?當然我這裡測試用的隻有 10多M 對于大型資料庫則差別就更大了。

繼續閱讀