利用Xtrabackup完成MySQL的備份與還原

來源:互聯網
上載者:User

安裝和簡介
備份與還原的實現
完全+增量+二進位日誌的備份與還原
#####################################
一、安裝和簡介

1、簡介
Xtrabackup是由percona提供的mysqlDatabase Backup工具,據官方介紹,這也是世界上惟一一款開源的能夠對innodb和xtradb資料庫進行熱備的工具。

特點:
(1)備份過程快速、可靠;
(2)備份過程不會打斷正在執行的事務;
(3)能夠基於壓縮等功能節約磁碟空間和流量;
(4)自動實現備份檢驗;
(5)還原速度快;
2、安裝

其最新版的軟體可從 http://www.percona.com/software/percona-xtrabackup/ 獲得。本文基於RHEL5.8的系統,因此,直接下載相應版本的rpm包安裝即可:

1 rpm -ivh percona-xtrabackup-2.0.0-417.rhel5.i386.rpm

二、備份與還原的實現

1、完全備份

#####本文中直接使用root
innobackupex --user=root /backup/
#####文法
innobackupex --user=DBUSER --password=DBUSERPASS  /path/to/BACKUP-DIR/

如果要使用一個最小許可權的使用者進行備份,則可基於如下命令建立此類使用者:

mysql> CREATE USER ’bkpuser’@’localhost’ IDENTIFIED BY ’s3cret’;
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM ’bkpuser’;
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ’bkpuser’@’localhost’;
mysql> FLUSH PRIVILEGES;

使用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)一個完全備份
一般情況下,在備份完成後,資料尚且不能用於恢複操作,因為備份的資料中可能會包含尚未提交的事務或已經提交但尚未同步至資料檔案中的事務。因此,此時資料檔案仍處理不一致狀態。“準備”的主要作用正是通過復原未提交的事務及同步已經提交的事務至資料檔案也使得資料檔案處於一致性狀態。

innobakupex命令的--apply-log選項可用於實現上述功能。如下面的命令:

# innobackupex --apply-log  /path/to/BACKUP-DIR

在實現“準備”的過程中,innobackupex通常還可以使用--use-memory選項來指定其可以使用的記憶體的大小,預設通常為100M。如果有足夠的記憶體可用,可以多劃分一些記憶體給prepare的過程,以提高其完成速度。

3、從一個完全備份中恢複資料
innobackupex命令的--copy-back選項用於執行恢複操作,其通過複製所有資料相關的檔案至mysql伺服器DATADIR目錄中來執行恢複過程。innobackupex通過backup-my.cnf來擷取DATADIR目錄的相關資訊。

# innobackupex --copy-back  /path/to/BACKUP-DIR

當資料恢複至DATADIR目錄以後,還需要確保所有資料檔案的屬主和屬組均為正確的使用者,如mysql,否則,在啟動mysqld之前還需要事先修改資料檔案的屬主和屬組。如:

# chown -R  mysql:mysql  /mydata/data/

4、使用innobackupex進行增量備份
每個InnoDB的頁面都會包含一個LSN資訊,每當相關的資料發生改變,相關的頁面的LSN就會自動成長。這正是InnoDB表可以進行增量備份的基礎,即innobackupex通過備份上次完全備份之後發生改變的頁面來實現。

要實現第一次增量備份,可以使用下面的命令進行:

# innobackupex --incremental /backup --incremental-basedir=BASEDIR

其中,BASEDIR指的是完全備份所在的目錄,此命令執行結束後,innobackupex命令會在/backup目錄中建立一個新的以時間命名的目錄以存放所有的增量備份資料。另外,在執行過增量備份之後再一次進行增量備份時,其--incremental-basedir應該指向上一次的增量備份所在的目錄。

需要注意的是,增量備份僅能應用於InnoDB或XtraDB表,對於MyISAM表而言,執行增量備份時其實進行的是完全備份。

“準備”(prepare)增量備份與整理完全備份有著一些不同,尤其要注意的是:

(1)需要在每個備份(包括完全和各個增量備份)上,將已經提交的事務進行“重放”。“重放”之後,所有的備份資料將合并到完全備份上。
(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

其中BASE-DIR指的是完全備份所在的目錄,而INCREMENTAL-DIR-1指的是第一次增量備份的目錄,INCREMENTAL-DIR-2指的是第二次增量備份的目錄,其它依次類推,即如果有多次增量備份,每一次都要執行如上操作;

推薦閱讀:

MySQL開源備份工具Xtrabackup備份部署

MySQL Xtrabackup備份和恢複

用XtraBackup實現MySQL的主從複製快速部署【主不鎖表】

安裝和使用 Percona 推出的 Xtrabackup 備份 MySQL

XtraBackup 的詳細介紹:請點這裡
XtraBackup 的:請點這裡

繼續閱讀本文的精彩內容請看第2頁:

  • 1
  • 2
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.