主頁 > 數據庫技術 > Percona Xtrabackup備份mysql (完整備份與增量備份)

Percona Xtrabackup備份mysql (完整備份與增量備份)

PDF版本

Xtrabackup簡介

Percona XtraBackup是開源免費的MySQL數據庫熱備份軟件,它能對InnoDB和XtraDB存儲引擎的數據庫非阻塞地備份(對于MyISAM的備份同樣需要加表鎖)。XtraBackup支持所有的Percona Server、MySQL、MariaDB和Drizzle。

XtraBackup優勢 :

1、無需停止數據庫進行InnoDB熱備

2、增量備份MySQL

3、流壓縮到傳輸到其它服務器

4、能比較容易地創建主從同步

5、備份MySQL時不會增大服務器負載

Xtrabackup的特性是針對大數據進行備份恢復使用,數據庫大小一般在G以上或10G以上,對于數據量小的Mysql庫完全可以使用mysqldump來解決,備份和恢復速度快而且操作簡便快捷,這里對mysqldump命令就不做介紹了。

Xtrabackup安裝

這里只介紹Ubuntu-12.04下的安裝方法,其它系統的安裝方法請參考 http://www.percona.com/doc/percona-xtrabackup/2.1/installation.html

apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A

在/etc/apt/sources.list加入:

2
3
deb http://repo.percona.com/apt precise main
deb-src http://repo.percona.com/apt precise main

執行update及安裝操作

2
3
apt-get update
apt-get install percona-xtrabackup

注:precise是Ubuntu-12.04的版本代號,如果是其它系統版本,需要更換。

Xtrabackup工具介紹

安裝XtraBackup后,其實會有幾個工具:

innobackupex:這個是其實是下面三個工具的一個perl腳本封裝,可以備份MyISAM, InnoDB, XtraDB表。但在處理Myisam時需要加一個讀鎖。

xtrabackup:一個由C編譯而來的二進制文件,只能備份InnoDB和XtraDB數據。

xbcrypt:用來加密或解密備份的數據。

xbstream:用來解壓或壓縮xbstream格式的壓縮文件。

建議使用perl封裝的innobackupex來作數據庫備份,因為比較容易使用。所以下面只介紹innobackupex的使用。其它的使用參考: http://www.percona.com/doc/percona-xtrabackup/2.1/manual.html

innobackupex使用方法

完整的選項使用請執行innobackupex –help,這里只介紹使用常用的選項進行完整備份及增量備份和還原。

innobackupex Options 這里只對常用參數進行描述

–defaults-file 數據庫的配置文件路徑,感覺本地備份不寫也可以,遠程沒測試過。

–apply-log 準備在一個備份上啟動mysql服務。

–copy-back 從備份目錄拷貝數據,索引,日志到my.cnf文件里規定的初始位置。

–no-timestamp 創建備份時不自動生成時間目錄,可以自定義備份目錄名例如: /backups/mysql/base

–databases 用于指定要備份的數據庫, 多個庫文件使用方法: “database1 database2″

–incremental 在全備份的基礎上進行增量備份,后跟增量備份存貯目錄路徑

–incremental-basedir=DIRECTORY 增量備份所需要的全備份路徑目錄或上次做增量備份的目錄路徑

–incremental-dir=DIRECTORY 增量備份存貯的目錄路徑

–redo-only 用于準備增量備份內容把數據合并到全備份目錄,配合–incremental-dir 增量備份目錄使用。

–force-non-empty-directories 如果是特定庫備份還原,不需要刪掉整個mysql目錄,只是特定庫的及相關文件就可以,還原時加上此參數就不會報錯。

其他具體參數可以參考:http://www.percona.com/doc/percona-xtrabackup/2.1/innobackupex/innobackupex_option_reference.html

完整備份及還原

一、全部數據庫

備份:

innobackupex --user=root --password=root --defaults-file=/etc/mysql/my.cnf /data/mysql_backup/full_backup

還原:

7
8
9
10
11
12
13
14
15
16
17
18
19
service mysql stop
 
rm -rf /var/lib/mysql
 
mkdir /var/lib/mysql
 
innobackupex --apply-log /data/mysql_backup/full_backup --use-memory=1G --user=root --password=root
 
innobackupex --copy-back /data/mysql_backup/full_backup
 
chown mysql:mysql -R /var/lib/mysql
 
service mysql start

查看恢復的數據庫

二、指定數據庫

備份:

假如我們要備份centos和aabb數據庫。

innobackupex --user=root --password=root --defaults-file=/etc/mysql/my.cnf --databases="centos aabb" /data/mysql_backup/

這樣就會在/data/mysql_backup生成一個帶時間的目錄,如果不需要帶時間,可以使用選項–no-timestamp。

如果想備份成壓縮文件,可以使用如下語句:

innobackupex --user=root --password=root --defaults-file=/etc/mysql/my.cnf --databases="centos aabb" --no-timestamp --stream=tar ./ | gzip - > centos-aabb.bz.tar.gz

還原:

假如完整備份的路徑為/data/mysql_backup/full_backup,如果完整備份是壓縮文件,需要先解壓再還原。

9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
service mysql stop
 
rm -rf /var/lib/mysql/ibdata*
 
rm -rf /var/lib/mysql/ib_logfile*
 
rm -rf /var/lib/mysql/centos
 
rm -rf /var/lib/mysql/aabb
 
innobackupex --apply-log /data/mysql_backup/centos_aabb_full_backup
 
innobackupex --copy-back --defaults-file=/etc/mysql/my.cnf /data/mysql_backup/centos_aabb_full_backup
 
chown -R mysql:mysql /var/lib/mysql
 
service mysql start

增量備份及還原

在這里全庫的增量備份方法就不多講了,只是針對特定數據庫進行講解,其實是同理的就是把下面參數中的–databases 選項去掉就可以,感興趣的可以自己試下。

增量備份是建立在完整備份的基礎上的,所以首先確保已經完整備份了一次。

完整備份:

innobackupex --user=root --password=root --databases="centos" --no-timestamp /data/mysql_backup/centos_full_backup

現在完整備份的目錄為/data/mysql_backup/centos_full_backup。

增量備份:

第一次增量備份:

innobackupex --incremental /data/mysql_backup/inc1 --no-timestamp --incremental-basedir=/data/mysql_backup/centos_full_backup --user=root --password=root --defaults-file=/etc/mysql/my.cnf

第二次增量備份:需要把–incremental-basedir指定到上次做增量備份的目錄,這里應該知道/data/mysql_backup/inc1

innobackupex --incremental /data/mysql_backup/inc2 --no-timestamp --incremental-basedir=/data/mysql_backup/inc1 --user=root --password=root --defaults-file=/etc/mysql/my.cnf

選項–incremental是指定作增量備份 –incremental-basedir選項是指定上一次增量備份的目錄(如果是第一次作增量備份,則為完整備份的目錄)。

還原:

增量備份的還原操作跟完整的還原有點不一樣,首先必須使用–apply-log –redo-only對完整備份的目錄及所有增量備份目錄進行操作,然后就可以像還原完整備份時的操作了。

對每個備份目錄作apply-log redo-only操作(包括完整備份)

3
4
5
6
7
innobackupex --apply-log --redo-only /data/mysql_backup/centos_full_backup --user=root --password=root
 
innobackupex --apply-log --redo-only /data/mysql_backup/centos_full_backup --incremental-dir=/data/mysql_backup/inc1 --user=root --password=root
 
innobackupex --apply-log --redo-only /data/mysql_backup/centos_full_backup --incremental-dir=/data/mysql_backup/inc2 --user=root --password=root

看到有文章在恢復增量備份的時候提到在做最后一個讀取增量記錄的時候不使用–redo-only 參數, 經過測試,使用了此參數后恢復的數據庫也都運行正確,我使用的是2.17版本xtrabackup, 至于以前版本就沒測試過。有知道的可以在這里分享下。

下面就跟還原完整備份時一樣了:

9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
service mysql stop
 
rm -rf /var/lib/mysql/ibdata*
 
rm -rf /var/lib/mysql/ib_logfile*
 
rm -rf /var/lib/mysql/centos
 
innobackupex --apply-log /data/mysql_backup/centos_full_backup --use-memory=1G --user=root --password=root
 
##--use-memory 能夠定義讀取備份時的內存大小,以便快速的完成還原準備工作。
 
innobackupex --copy-back --defaults-file=/etc/mysql/my.cnf /data/mysql_backup/centos_full_backup
 
chown mysql:mysql -R /var/lib/mysql
 
service mysql start

現在全部增量恢復就完成了,可以登錄數據庫查看下恢復的數據了
稍后再介紹給大家xtrabackup備份InnoDB的方法。


聲明: 本站所有文章歡迎轉載,所有文章未說明,均屬于原創,轉載均請注明出處。
本文有效鏈接: http://www.vczhtn.live/2014/02/percona-xtrabackup-mysql/
版權所有: Drupal與高性能網站架構 http://www.vczhtn.live


, , , ,

評論:1

發表評論
  1. avatar
    回復 大熊
    14/12/10

    你好,我在測試時發現,如果是指定數據庫備份,在用–copy-back恢復時,會提示/var/lib/mysql/目錄必須為空?你是怎么解決的?

發表評論

電子郵件地址不會被公開。 必填項已用 * 標注


九 − = 0

您可以使用這些 HTML 標簽和屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

引用:0

下面所列的是引用到本博客的鏈接
Percona Xtrabackup備份mysql (完整備份與增量備份) 來自 Drupal與高性能網站架構
頂部
安徽福彩15选5走势图