建立MySQL資料庫備份的好工具:XtraBackup

junsansi發表於2011-06-14

  說到備份MySQL資料庫,不少人可能會先想到其自帶的命令列工具mysqldump,要說這個工具確實不錯,操作簡單呼叫靈活,不過mysqldump屬於邏輯備份工具,類似ORACLE資料庫中的export,小資料量時效率尚可,當資料量達到一定規模時,使用mysqldump執行備份的時間也許還可接受,但恢復時間基本就不能忍受了。

  這種情況下就需要一種好用又高效的工具,xtrabackup就是其中一款,號稱免費版的InnoDB HotBackup。

Xtrabackup提供了兩種命令列工具:

  • xtrabackup:專用於備份InnoDB引擎的資料;
  • innobackupex:這是一個perl指令碼,在執行過程中會呼叫xtrabackup命令,這樣用該命令即可以實現備份InnoDB,也可以備份MyISAM引擎的物件。

  目前xtrabackup最新版本已經升級到了1.6版本,可以到http://www.percona.com/downloads/xtrabackup/免費下載。

  Xtrabackup提供了Linux下常見的安裝方式,包括RPM安裝,原始碼編譯方式,以及二進位制版本安裝,這裡三思嘗試下載了最新的1.6原始碼包,決定自行編譯安裝。

  1.6版本的原始碼包相較之前大了數十倍,主要是由於原始碼包中同時包含了mysql5.1和mysql5.5的原始碼包,一個2M左右的小軟體,居然內建了兩個各有20餘M的軟體安裝包,這真不是一般人都想的出來的。

  由於1.6版本新推不久,官網中的文件都沒有來的及更新完善,原始碼方式的安裝文件也並不完整,三思也只能連蒙帶猜,下列安裝步驟有可能並非最佳安裝方式,僅只是提供了一種,原始碼安裝xtrabackup並使其可用的方式。

  由於xtrabackup依賴libinnodb連結庫,因此需要先編譯InnoDB,而後再編譯xtrabackup。要編譯安裝xtrabackup最簡單的方式當然是使用提供的編譯指令碼,首先還是解壓縮檔案,並進入到安裝目錄:

    [root@rhel5u3 software]# tar xvfz xtrabackup-1.6.tar.gz

    [root@rhel5u3 software]# cd xtrabackup-1.6

  ll的話會看到目錄有兩mysql-5.1.56.tar.gz和mysql-5.5.10.tar.gz兩個mysql原始碼包,正是這兩個原始碼包占用了大量的空間。除此外還有一個innobackupex的perl指令碼程式,該指令碼可以直接執行,不過執行備份任何時會報:

    sh: xtrabackup_55: command not found

    innobackupex: fatal error: no 'mysqld' group in MySQL options

    innobackupex: fatal error: OR no 'datadir' option in group 'mysqld' in MySQL options

  提示xtrabackup_55命令不存在,接下來就是要編譯xtrabackup。

  在解壓縮目錄下執行utils/build.sh,注意一定要在xtrabackup安裝目錄內執行,執行時要指定與之匹配的MySQL資料庫版本。

    [root@rhel5u3 xtrabackup-1.6]# utils/build.sh 

    Build an xtrabackup binary against the specified InnoDB flavor.

    Usage: build.sh CODEBASE

    where CODEBASE can be one of the following values or aliases:

      innodb51_builtin | 5.1        build against built-in InnoDB in MySQL 5.1

      innodb55         | 5.5        build against InnoDB in MySQL 5.5

      xtradb51         | xtradb   build against Percona Server with XtraDB 5.1

      xtradb55         | xtradb55 build against Percona Server with XtraDB 5.5

  三思安裝的是mysql5.5,因此這裡指定innodb55,執行命令如下:

    [root@rhel5u3 xtrabackup-1.6]# utils/build.sh innodb55 

  該指令碼會根據指定的引擎版本,自動解壓縮適當的MySQL原始碼包並進行編譯,這是最簡單的安裝方式。

  命令執行完成之後,xtrabackup就可以用了,一般預設編譯後該檔案儲存在xtrabackup-1.6/mysql-5.5.10/storage/innobase/xtrabackup/目錄下,當然也可以通過find命令查詢xtrabackup的具體路徑。

  建立兩個軟連結,以方便呼叫XtraBackup命令執行備份:

    [root@rhel5u3 xtrabackup-1.6]# ln -s /data/software/xtrabackup-1.6/innobackupex /usr/local/mysql55/bin/innobackupex

    [root@rhel5u3 xtrabackup-1.6]# ln -s /data/software/xtrabackup-1.6/mysql-5.5.10/storage/innobase/xtrabackup/xtrabackup_innodb55 /usr/local/mysql55/bin/xtrabackup_55

  將mysql55的bin載入到path環境變數,當然這步多數情況下應該在安裝mysql時做過了:

    [root@rhel5u3 xtrabackup-1.6]# export PATH=$PATH:/usr/local/mysql55/bin

  至此,XtraBackup的原始碼安裝就完成了,接下來就可以使用這些命令執行備份任務了。例如,呼叫xtrabackup命令執行備份,舉個簡單的備份示例如下:

    [root@rhel5u3 ~]# xtrabackup_55 --defaults-file=/data/mysqldata/3306/my.cnf --backup --target-dir=/data/mysql_20110524

    xtrabackup_55  Ver undefined Rev undefined for 5.5.10 Linux (x86_64)

    xtrabackup: uses posix_fadvise().

    xtrabackup: cd to /data/mysqldata/3306/data

    xtrabackup: Target instance is assumed as followings.

    xtrabackup:   innodb_data_home_dir = /data/mysqldata/3306/innodb_ts

    xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend

    xtrabackup:   innodb_log_group_home_dir = /data/mysqldata/3306/innodb_log

    xtrabackup:   innodb_log_files_in_group = 2

    xtrabackup:   innodb_log_file_size = 5242880

    110524 17:31:16 InnoDB: Using Linux native AIO

    >> log scanned up to (1598402)

    [01] Copying /data/mysqldata/3306/innodb_ts/ibdata1 

         to /data/mysql_20110524/ibdata1

    [01]        ...done

    xtrabackup: The latest check point (for incremental): '1598402'

    >> log scanned up to (1598402)

    xtrabackup: Stopping log copying thread.

    xtrabackup: Transaction log of lsn (1598402) to (1598402) was copied.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-697899/,如需轉載,請註明出處,否則將追究法律責任。

相關文章