MySQL DBA備份工具Xtrabackup使用指南

一.Xtrabackup 簡介及備份原理說明:

Xtrabackup是由percona開發的一個開源軟件,能夠非常快速地備份與恢復mysql數據庫,且支持在線熱備份(備份時不影響數據讀寫),此軟件可以說是innodb熱備工具ibbackup的一個開源替代品

Xtrabackup中包含兩個工具:

l  xtrabackup -用於熱備份innodb,xtradb引擎表的工具,不能備份其他表。

l  innobackupex-xtrabackup封裝的perl腳本,提供了用於myisam(會鎖表)innodb引擎,及混合使用引擎備份的能力。

 

Xtrabackup可以做什麼

l  在線()備份整個庫的InnoDB, XtraDB

l  xtrabackup的上一次整庫備份基礎上做增量備份(innodb only

l  以流的形式產生備份,可以直接保存到遠程機器上(本機硬盤空間不足時很有用)

 

MySQL數據庫本身提供的工具並不支持真正的增量備份,二進制日誌恢復是point-in-time(時間點)的恢復而不是增量備份。Xtrabackup工具支持對InnoDB存儲引擎的增量備份,工作原理如下:
1)首先完成一個完全備份,並記錄下此時檢查點的LSN(Log Sequence Number)
2)在進程增量備份時,比較表空間中每個頁的LSN是否大於上次備份時的LSN,如果是,則備份該頁,同時記錄當前檢查點的LSN

 

Xtrabackupwiki上簡單的介紹了一下實現的原理:

首先,在logfile中找到並記錄最後一個checkpoint“last checkpoint LSN”),然後開始從LSN的位置開始拷貝InnoDBlogfilextrabackup_logfile;接着,開始拷貝全部的數據文件.ibd;在拷貝全部數據文件結束之後,才停止拷貝logfile

因爲logfile裏面記錄全部的數據修改情況,所以,即時在備份過程中數據文件被修改過了,恢復時仍然能夠通過解析xtrabackup_logfile保持數據的一致。

Tip1Xtrabackup是一個用於備份InnoDB/XtrDB的工具,真正的在線備份(不影響數據的讀寫),InnoDB Hot Backup的開源替代品。

Tip2:在使用參數stream=tar備份的時候,你的xtrabackup_logfile可能會臨時放在/tmp目錄下,如果你備份的時候併發寫入較大的話xtrabackup_logfile可能會很大(5G+),很可能會撐滿你的/tmp目錄,可以通過參數--tmpdir指定目錄來解 決這個問題。

 

備份原理

XtraBackup基於InnoDBcrash-recovery功能。它會複製innodb data file,由於不鎖表,複製出來的數據是不一致的,在恢復的時候使用crash-recovery,使得數據恢復一致。

InnoDB維護了一個redo log,又稱爲 transaction log,事務日誌,它包含了innodb數據的所有改動情況。當InnoDB啓動的時候,它會先去檢查data filetransaction log,並且會做二步操作:
1.It applies committed transaction log entries to the data files
2.it performs an undo operation on any transactions that modified data but did not commit.

XtraBackup在備份的時候, 一頁一頁地複製innodb的數據,而且不鎖定表,與此同時,XtraBackup還有另外一個線程監視着transactions log,一旦log發生變化,就把變化過的log pages複製走。爲什麼要急着複製走呢? 前幾章的時候就提過這個問題,因爲transactions log文件大小有限,寫滿之後,就會從頭再開始寫,所以新數據可能會覆蓋到舊的數據。

prepare過程中,XtraBackup使用複製到的transactions log 對備份出來的innodb data file 進行crash recovery

實現細節

文件權限

xtrabackupread-write模式打開innodb的數據文件,然後對其進行復制。其實它不會修改此文件。也就是說,運行xtrabackup的用戶,必須對innodb的數據文件具有讀寫權限。

爲什麼要用rw模式呢?直接read模式不好麼?
因爲xtrabackup採用了其內置的innodb庫來打開文件,而innodb庫打開文件的時候就是rw的。

 

Tuning the OS Buffers

因爲XtraBackup要從文件系統中複製大量的數據,所以它儘可能地使用posix_fadvise(),來告訴OS不要緩存讀取到的數據,從而提升性能。因爲這些數據不會重用到了,OS卻沒有這麼聰明。如果要緩存一下的話,幾個G的數據,會對OS的虛擬內存造成很大的壓力,其它進程,比如mysqld很有可能被swap出去,這樣系統就會受到很大影響了。

posix_fadvise(file,0,0, POSIX_FADV_DONTNEED)

而且XtraBackup在讀取數據的時候還儘可能地預讀:

posix_fadvise(file,0,0, POSIX_FADV_SEQUENTIAL)

 

複製數據文件

在備份innodb page的過程中,XtraBackup每次讀寫1MB的數據,1MB/16KB=64page
這個不可配置。讀1MB數據之後,XtraBackup一頁一頁地遍歷這1MB數據,使用innodbbuf_page_is_corrupted()函數檢查此頁的數據是否正常,如果數據不正常,就重新讀取這一頁,最多重新讀取10次,如果還是失敗,備份就失敗了,退出。

It skips this check on the doublewrite buffer??

在複製transactions log的時候,每次讀寫512KB的數據。同樣不可以配置。

 

二.下載及安裝配置

1. Xtrabackup二進制64位下載地址:

http://www.percona.com/downloads/XtraBackup/XtraBackup-1.6/Linux/binary/x86_64/

2.MySQL5.1.56的下載地址:

http://dev.mysql.com/downloads/mysql/5.1.html#downloads

操作系統環境:

CentOS release 5.4 (Final) x86_64 GNU/Linux 2.6.18-164.el5

 

2.安裝配置

1)安裝配置mysql-5.1.56

     MySQL 5.1.38前的版本中,當你需要安裝InnoDB Plugin時,必須下載Plugin的文件,解壓後再進行一系列的安裝。從MySQL 5.1.38開始往後,MySQL包含了2個不同版本的InnoDB存儲引擎一個是舊版本的引擎,稱之爲build-in innodb;另一個是1.0.4版本的InnoDB存儲引擎。

Shell> tar –zxvvf mysql-5.1.56.tar.gz

          Shell> cd mysql-5.1.56

     Shell> ./configure --prefix=/opt/mysql5156 \

--with-charset=utf8 --with-collation=utf8_general_ci \

--with-extra-charsets=latin1,gb2312  \

--with-plugins=innobase,innodb_plugin,myisam,heap,csv,federated,blackhole \

--enable-local-infile --enable-thread-safe-client

     Shell> make

          Shell >make install

Shell> cp support-files/my-medium.cnf /etc/my.cnf

Shell>cd /opt/mysql5156

Shell>chown –R mysql .

Shell>chgrp –R mysql .

Shell>bin/mysql_install_db –user=mysql

Shell>chown –R root .

Shell> chown –R mysql var

 

配置啓動plugin-innodb

Shell > vi /etc/my.cnf

port            = 3307

socket          = /tmp/mysql5156.sock

 

[mysqld]

port            = 3307

socket          = /tmp/mysql5156.sock

ignore_builtin_innodb

    

啓動:shell>/opt/mysql5156/bin/mysqld_safe –user=mysql &

     加載plugin-innodb:

mysql>INSTALL PLUGIN INNODB SONAME 'ha_innodb_plugin.so';

mysql >INSTALL PLUGIN INNODB_TRX SONAME 'ha_innodb_plugin.so';

mysql >INSTALL PLUGIN INNODB_LOCKS SONAME 'ha_innodb_plugin.so';

mysql >INSTALL PLUGIN INNODB_LOCK_WAITS SONAME 'ha_innodb_plugin.so';

mysql >INSTALL PLUGIN INNODB_CMP SONAME 'ha_innodb_plugin.so';

mysql >INSTALL PLUGIN INNODB_CMP_RESET SONAME 'ha_innodb_plugin.so';

mysql >INSTALL PLUGIN INNODB_CMPMEM SONAME 'ha_innodb_plugin.so';

mysql >INSTALL PLUGIN INNODB_CMPMEM_RESET SONAME 'ha_innodb_plugin.so';

     上述語句只需執行一次就ok了,即使重啓mysqld也不需要再次安裝了。

     mysql > show plugins;

     mysql> select @@innodb_version;

     +------------------+

| @@innodb_version |

+------------------+

| 1.0.15           |

+------------------+

1 row in set (0.00 sec)

 

mysql執行INSTALL PLUGIN INNODB SONAME 'ha_innodb_plugin.so';

如果報錯提示:ERROR 1289 (HY000): The ‘plugin’ feature is disabled; you need MySQL built with ‘HAVE_DLOPEN’ to have it working

經上網搜索找到解決問題方法:

在編譯時不要用靜態編譯,將下面兩個從編譯參數中刪除

--with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static

至於原因不是很清楚。

 

另有人提出可以用下面方法解決:

在編譯mysql時先執行下面的命令

      export CFLAGS=”-O2 -DHAVE_DLOPEN=1
export CXXFLAGS=”-O2 -DHAVE_DLOPEN=1

但在做測試時,發現仍然有問題不能編譯通過,可能是環境不同吧,我的系統環境爲:

Centos 5.4  x86_64 GNU/Linux

 

2)安裝配置Xtrabackup

     先看看如何安裝Xtrabackup,最簡單的安裝方式是使用RPM包,不過想使用源代碼方式安裝的話,其安裝方式有點古怪,因爲它採用的在MySQL源代碼上打補丁構建的方式安裝的。這裏使用二進制包的安裝方式,相對比較靈活。

Shell> mkdir /usr/local/xtrabackup

Shell> tar -zxvf xtrabackup-1.6.tar.gz –C /usr/local/xtrabackup

Shell>cd /usr/local/xtrabackup/bin

Shell>ln –s innobackupex-1.5.1 innobackupex

配置環境變量:

Shell>export PATH=$PATH:/usr/local/xtrabackup/bin

 

修改mysql配置文件:

Shell> vi /etc/my.cnf

添加或修改:datadir = /usr/local/mysql/var(數據庫目錄)

特別注意:default_table_type = InnoDB (必須改,否則進行增量備份的時候不成功)

 

三.xtrabackup的備份與恢復使用

關於xtrabackup的參數選項,如下:
–defaults-file=#
默認配置文件的路徑,如果補該參數,xtrabackup 將從依次從以下位置查找配置文件/etc/my.cnf /etc/mysql/my.cnf
/usr/local/etc/my.cnf
~/.my.cnf
,並讀取配置文件中的[mysqld][xtrabackup]配置段

–defaults-extra-file=#
如果使用了該參數,在讀取了全局配置文件之後,會再讀取這裏指定的配置文件

–target-dir=name
備份文件的存放目錄路徑

–backup實施備份到 target-dir

–prepare
實施對備份文件迚行恢復前的準備(生成 InnoDB log file

–print-param
打印備份或恢復時需要的參數

–use-memory=#
該參數在 prepare 的時候使用,控制 prepare innodb 實例使用的內存量

–suspend-at-end
target-dir 目錄下產生一個 xtrabackup_suspended 文件,將 xtrabackup 進程掛起,不停地將數據文件的變化同步到備份文件,直到用戶手工刪除 xtrabackup_suspended 文件

–throttle=#
每秒IO次數,限制 backup 時使用的 I/O 操作量,使備份對數據庫正常業務的影響最小化

–log-stream
該參數在 backup 的時候使用,將 xtrabackup_logfile 的內容輸出到標準輸出,使用該參數時會自動使用–suspend-at-end 參數,innobackupex 腳本的–stream 模式會使用該參數。

–incremental-lsn=name
增量備份時只拷貝 LSN比該參數指定值新的 ibd pages,前次備份到了哪個 LSN可以看前次備份集的xtrabackup_checkpoints 文件

–incremental-basedir=name
該參數在 backup 的時候使用,備份比該參數指定位置的備份集新的 idb pages

–incremental-dir=name
該參數在 prepare 的時候使用,指定 prepare 時產生的.delta 文件和日誌文件的存放路徑

–tables=name
在備份 file-per-table 類型的數據文件時使用,使用正則表達式指定需要備份的 innodb

–datadir=name
MySQL
數據庫的數據文件目錄。

 

xtrabackup只備份InnoDB數據文件,表結構是不備份的,所以恢復的時候,你必須有對應表結構文件(.frm)

1.普通備份(全量備份)
shell>mkdir -p /backup/xtrabackup
shell>xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/backup/xtrabackup

全量備份模擬恢復:
需要執行兩次xtrabackup –prepare
shell>xtrabackup –defaults-file=/etc/my.cnf –prepare –target-dir=/backup/xtrabackup
shell>xtrabackup –defaults-file=/etc/my.cnf –prepare –target-dir=/backup/xtrabackup

刪除數據庫目錄下的數據文件:

Shell>rm –rf /usr/local/mysql/var/ib*

Shell>cp /backup/xtrabackup/ib* /usr/local/mysql/var

Shell>chown –R mysql.root /usr/local/mysql/var

重啓測試是否恢復成功。

注意,xtrabackup只備份數據文件,並不備份數據表結構(.frm),所以使用xtrabackup恢復的時候,你必須有對應表結構文件(.frm)

 

2. 普通備份(增量備份)

增量備份優點

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

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

3、每日備份只產生少量數據,遠程備份傳輸更方便。同時節省空間。

 4、備份恢復基於文件操作,降低直接對數據庫操作風險。

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

 

增量備份及模擬恢復步驟:

shell>mkdir -p /backup/xtrabackup/base

shell>mkdir -p /backup/xtrabackup/delta
1)先做一次全量備份,因爲後面的增量備份要以此爲基礎

shell>xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/backup/xtrabackup/base

shell>ls /backup/xtrabackup/base

ibdata1  xtrabackup_checkpoints  xtrabackup_logfile

(2)以此全量備份爲基礎進行增量備份

Shell> xtrabackup --defaults=/etc/my.cnf  --backup --target-dir=/backup/xtrabackup/delta/ --incremental-basedir=/backup/xtrabackup/base/

shell>ls /backup/xtrabackup/delta

ibdata1.delta  xtrabackup_checkpoints  xtrabackup_logfile

ps:在增量備份的目錄下,數據文件都是以.delta結尾的。增量備份只備份上一次全量備份後被修改過的page,所以增量備份只暫用較少的空間。

增量備份可以在增量備份的基礎上增量。

(注:/backup/xtrabackup/delta/是每次都需修改的。比如第二次增量就改成/backup/xtrabackup/delta2,當然可以寫個腳本進行自動備份)

 

增量備份模擬恢復過程:

我們需要分別對全量、增量備份各做一次prepare操作。
shell>xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/backup/xtrabackup/base/

shell>xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/backup/xtrabackup/base/

--incremental-dir=/backup/xtrabackup/delta/

shell>xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/backup/xtrabackup/base/

shell>rm –rf /usr/local/mysql/var/ib* #刪除原來數據目錄下的數據文件
Shell>cp /backup/xtrabackup/base/ib* /usr/local/mysql/var

Shell>chown –R mysql.root /usr/local/mysql/var

重啓後測試是否成功。


再次提醒,xtrabackup只備份InnoDB數據文件,表結構是不備份的,所以恢復的時候,你必須有對應表結構文件(.frm)

 

3.增量備份
對比innobackupexxtrabackup我們可以看到,innobackupex操作起來更方便,但是innobackupex會有短暫的鎖 表(時間依賴於MyISAM大小)。xtrabackup備份還有另一個重要特性:增量備份。(未來的版本innobackupex也可能增長該功能)
比如表中目前有10條數據,先備份.備份到/usr/local/backup/1/目錄 (完整備份)
shell> xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/usr/local/backup/1/
查看它的lsn:
shell> cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0:0
to_lsn = 0:592411
再向表中插入數據,增量備份
shell>xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/usr/local/backup/2/ --incremental-basedir=/usr/local/backup/1/
把增量備份到2(12的增量備份)
查看它的lsn:
shell>cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 0:592411
to_lsn = 0:908563
再向表中插入數據,增量備份
shell>xtrabackup --defauls-file=/etc/my.cnf --backup --target-dir=/usr/local/backup/3/ --incremental-basedir=/usr/local/backup/1/
把增量備份到3(13的增量備份,2的備份已經包含在裏面了,按照這種方式備份的話,最後的還原只需要還原完全備份和最後一份增量備份即可)
查看它的lsn:
shell>cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 0:592411
to_lsn = 0:1507854

或則另一種增量備份方式:
shell>xtrabackup --defauls-file=/etc/my.cnf --backup --target-dir=/usr/local/backup/3/ --incremental-basedir=/usr/local/backup/2/
把增量備份到3(23的增量備份,各個增量備份獨立,按照這種方式備份的話,最後的還原需要還原完全備份和各個增量備份)
查看它的lsn:
shell>cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 0:908563
to_lsn = 0:1507854

增量備份模擬恢復:
我們需要分別對全量、增量備份各做一次prepare操作。
:基於(13的增量備份,2的備份已經包含在裏面了,按照這種方式備份的話,最後的還原只需要還原完全備份和最後一份增量備份即可)
把第1次的完備恢復
shell>xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/usr/local/backup/1/
繼續把增量備份恢復上去
shell>xtrabackup --prepare --target-dir=/usr/local/backup/1/ --incremental-dir=/usr/local/backup/3/

shell>xtrabackup --prepare --target-dir=/usr/local/backup/1/
恢復完成
接着
cd /usr/local/backup/1/
cp 1/ib* /usr/local/mysql/var/

chown –R mysql.root /usr/local/mysql/var
/etc/init.d/mysql restart

基於(23的增量備份,各個增量備份獨立,按照這種方式備份的話,最後的還原需要還原完全備份和各個增量備份)
把第1次的完備恢復
xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/usr/local/backup/1/
繼續把增量備份恢復上去
shell>xtrabackup --prepare --target-dir=/usr/local/backup/1/ --incremental-dir=/usr/local/backup/2/
繼續把增量備份恢復上去
shell>xtrabackup --prepare --target-dir=/usr/local/backup/1/ --incremental-dir=/usr/local/backup/3/
恢復完成
接着
cd /usr/local/backup/1/
cp 1/ib* /usr/local/mysql/var/

chown –R mysql.root /usr/local/mysql/var
/etc/init.d/mysql restart

四、innobackupex備份與恢復

Usage:

innobackup [--sleep=MS] [--compress[=LEVEL]] [--include=REGEXP] [--user=NAME]

             [--password=WORD] [--port=PORT] [--socket=SOCKET] [--no-timestamp]

             [--ibbackup=IBBACKUP-BINARY] [--slave-info] [--stream=tar]

             [--defaults-file=MY.CNF]

             [--databases=LIST] [--remote-host=HOSTNAME] BACKUP-ROOT-DIR

innobackup --apply-log [--use-memory=MB] [--uncompress] [--defaults-file=MY.CNF]

             [--ibbackup=IBBACKUP-BINARY] BACKUP-DIR

innobackup --copy-back [--defaults-file=MY.CNF] BACKUP-DIR

第一個命令行是熱備份mysql數據庫。

帶有--apply-log選項的命令是準備在一個備份上啓動mysql服務。

帶有--copy-back選項的命令從備份目錄拷貝數據,索引,日誌到my.cnf文件裏規定的初始位置。

 

參數註釋:

–defaults-file=
xtrabackup –defaults-file 參數;

–apply-log
xtrabackup –prepare 參數的封裝;

–copy-back
做數據恢復時將備份數據文件拷貝到 MySQL 服務器的 datadir

–remote-host=HOSTNAME
通過 ssh 將備份數據存儲到進程服務器上;

--stream=[tar]

備份文件輸出格式, tar 時使用 tar4ibd , 該文件可在 XtarBackup binary 文件中獲得.如果備份時有指定--stream=tar, tar4ibd 文件所處目錄一定要在 $PATH (因爲使用的是 tar4ibd 去壓縮, XtraBackup binary 包中可獲得該文件)

--tmpdir=DIRECTORY

當有指定--remote-host or --stream, 事務日誌臨時存儲的目錄, 默認採用 MySQL 配置文件中所指定的臨時目錄tmpdir

--redo-only --apply-log,

強制備份日誌時只 redo ,跳過 rollback. 這在做增量備份時非常必要

–use-memory=#
該參數在 prepare 的時候使用,控制 prepare innodb 實例使用的內存量
–throttle=IOS
xtrabackup –throttle 參數;

–sleep=是給 ibbackup 使用的,指定每備份 1M 數據,過程停止拷貝多少毫秒,也是爲了在備份時儘量減小對正常業務的影響,具體可以查看ibbackup 的手冊

–compress[=LEVEL]
對備份數據迚行壓縮,僅支持 ibbackupxtrabackup 還沒有實現;

–include=REGEXP
xtrabackup 參數–tables 的封裝,也支持 ibbackup

–databases=LIST
列出需要備份的 databases,如果沒有指定該參數,所有包含MyISAM InnoDB 表的 database 都會被備份

–uncompress
解壓備份的數據文件,支持 ibbackupxtrabackup 還沒有實現該功能;

--slave-info,備份從庫, 加上 --slave-info 備份目錄下會多生成一個 xtrabackup_slave_info 文件, 這裏會保存主日誌文件以及偏移, 文件內容類似於:

CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0

–socket=SOCKET

MySQL 服務器的 socket 文件位置

1.       使用Innobachkupex備份(暫不支持增量備份)

(1)普通備份
shell> mkdir -p /backup/innobackupex/
Shell>innobackupex --defaults-file=/etc/my.cnf  --user=root --password=root \

--databases='i_db' --no-lock /backup/ innobackupex /  \

2> /tmp/innobackup.log          

xtrabackup_51  Ver 1.5 Rev undefined for 5.1.52 unknown-linux-gnu (x86_64)

[01] Copying /usr/local/mysql/var/ibdata1

     to /backup/innobackupex/2011-04-12_00-44-29/ibdata1

[01]        ...done

xtrabackup: The latest check point (for incremental): '0:32538662'

xtrabackup: Stopping log copying thread.

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

註釋:

使用mysqlroot用戶備份,密碼爲root
備份文件的存放路徑是/backup/innobackupex/,該目錄下將創建以時間戳爲名稱的備份目錄
–no-lock
備份時不鎖定表

–databases="i_db"用於指定要備份的數據庫
2>/tmp/backup.log
是將備份過程中的輸出信息保存到/tmp/backup.log

 

注意:在使用innobackupex進行備份時,在配置文件my.cnf中要明確指定mysql的數據文件目錄,否則會報錯。

[mysqld]

datadir=/usr/local/mysql/var

 

(2)打包(tar)備份
Shell>innobackupex --defaults-file=/etc/my.cnf  --user=root --password=root \

--databases='i_db' --no-lock  --stream=tar  /backup/innobackupex/  \

2> /tmp/innobackup.log  1> /backup/innobackupex/i_aura.tar

這種備份時間會比較長,主要是執行打包操作。
解包過程,需要使用tar ixvf 解壓對應的文件後,注意參數 –i必須加入。

 

模擬恢復過程:

Shell> mysql –uroot –proot –e’drop database i_db’

Shell>mysqladmin –uroot –proot shutdown

Shell>rm –rf /usr/local/mysql/var/ib *

shell >cd /backup/innobackupex/
shell >tar ixvf i_aura.tar
shell>ls

backup-my.cnf  i_aura.tar  ibdata1  i_db  stderr  stdout  xtrabackup_binary  xtrabackup_checkpoints  xtrabackup_logfile

準備還原
shell>innobackupex-1.5.1 --defaults-file=/etc/my.cnf –no-lock –apply-log /data/back_data/
拷貝還原數據:
shell>innobackupex --defaults-file=/etc/my.cnf  –no-lock  --copy-back /backup/innobackupex/

Shell>cd /usr/local/mysql/var

Shell>chown -R mysql:root .   #一定要修改權限
shell> mysqld_safe –user=mysql &

檢查刪除的數據庫,如果恢復則證明該恢復過程無誤。

 

(3)壓縮(tar)備份
Shell>innobackupex --defaults-file=/etc/my.cnf  --user=root --password=root \

--databases=”i_db test”--no-lock  --stream=tar  /backup/innobackupex/  \

2> /tmp/innobackup.log  | gzip > /backup/innobackupex/i_aura.tar

這種備份時間會比較長,主要是執行壓縮操作。
解壓縮過程,需要使用tar izxvf 解壓對應的文件後,注意參數 –i必須加入。

 

還原:
使用tar –izxvf 解壓對應的文件後,操作完全同普通備份。
模擬恢復過程:

Shell> mysql –uroot –proot –e’drop database i_db’

Shell>mysqladmin –uroot –proot shutdown

Shell>rm –rf /usr/local/mysql/var/ibdata1 ib_logfile*

shell >cd /backup/innobackupex/
shell >tar ixvf i_aura.tar
shell>ls

backup-my.cnf  i_aura.tar.gz  ibdata1  i_db  stderr  stdout  xtrabackup_binary  xtrabackup_checkpoints  xtrabackup_logfile

準備還原:
shell> innobackupex --defaults-file=/etc/my.cnf  –no-lock  --apply-log /backup/innobackupex/……

拷貝還原數據:
shell> innobackupex --defaults-file=/etc/my.cnf  –no-lock  --copy-back /backup/innobackupex/

Shell>cd /usr/local/mysql/var

Shell>chown -R mysql:root .
shell> mysqld_safe –user=mysql &

檢查刪除的數據庫,如果恢復則證明該恢復過程無誤。

 

4整庫備份及恢復。

 備份:

Shell>innobackupex --user=root --password=root --defaults-file=/etc/my.cnf \

     /backup/innobackupex/

檢查備份的文件:

Shell>ls /backup/innobackupex/

2011-04-12_09-20-13

 

 模擬恢復:

 首先停掉數據庫,然後刪除數據庫目錄下的所有數據庫文件。

Shell> mysql –uroot –proot shutdown

Shell>rm –rf /usr/local/mysql/var/*

首先寫日誌文件,然後恢復,如下。(注:2011-04-12_09-20-13是自動生成的以備份時間命名的文件夾,恢復時根據情況進行選擇)

Shell>innobackupex --apply-log --defaults-file=/etc/my.cnf \

 /backup/innobackupex/2011-04-12_09-20-13

Shell>innobackupex --copy-back --defaults-file=/etc/my.cnf \

/backup/innobackupex/2011-04-12_09-20-13

使用cd或者ls 命令看看你的數據庫目錄下是不是有文件了?

修改數據庫文件權限,否則無法啓動。(這步我是cd到原數據庫目錄下進行的)

Shell>chown -R mysql:mysql .

重啓數據庫,測試恢復是否成功。

五.備份到遠程服務器

1innobackupex遠程備份方法一

當前數據庫所在機器IP192.168.1.131,現在要備份到192.168.1.132/data目錄下。

 Shell>innobackupex --user=root --password=root --defaults=/etc/my.cnf --stream=tar /data | ssh [email protected]  cat " >" /data/backup.tar

 接着需要輸入遠程服務器密碼......然後就開始備份了,備份完成後登陸到遠程服務器看看是不是有了呢?

目前使用xtrabackup增量備份是不支持到遠程的。如何解決呢?可以使用nfs 網絡文件系統把遠程服務器磁盤掛載到本地。

 

2innobackupex遠程備份方法二

#在本地後臺啓動1234監聽,以便接受備份文件

nc -d -l 1234 > /data/$A/20100118000001.tar &

#ssh到服務器A執行備份,並將備份包推送到備份機B上。同時記錄下log

ssh $A ‘innobackupex-1.5.1 –stream=tar –include=’renren.*’ –throttle=500 –socket=/data/mysql/backup/mysql.sock –defaults-file=/data/dbbackup/my.cnf –user=root –password=xxxxxxx –slave-info /data/dbbackup | nc  $B 1234 < /dev/null > /data/xtrabackup.log 2>&1

    參數解釋:

–stream=tar : 告訴xtrabackup,備份需要以tar的文件流方式輸出。

–include=’renren.*’:備份包含的庫表,如例:意思是要備份renren庫中所有的表。如果需要全備份,則省略這個參數;如果需 要備份renren庫下的2個表:tableA & tableB,則寫成:–include=’renren.tableA|renren.tableB’;再如果renren庫下只有2個前綴是 table的表,你還可以寫成:–include=’renren.table*’

–throttle=500:xtrabackup在備份過程中,IO操作比較多,因此需要限定一下IO操作。以免服務器壓力過大,不過好像作用不太明顯,也不知道是不是設置的還是過大。待測

–socket=/data/mysql/backup/mysql.sock:指定mysql.sock所在位置,以便備份進程登錄mysql.

–defaults-file=/data/dbbackup/my.cnf :如果您的/etc/my.cnf中沒有使用如[mysqld3306]的片段啓動mysql,則不需要這行參數,如果使用了上面的片段,那麼 xtrabackup是無法解析/etc/my.cnf文件的(嚴格上來說是會解析錯誤),所以,我們需要手工完成一個my.cnf文件,文件片段如下, 只需要指定6個參數即可讓xtrabackup正常工作,各參數意思請參考mysql文檔:

[mysqld]
datadir=/data/var
innodb_data_home_dir = /data/ibdata
innodb_data_file_path=ibdata1:10M;ibdata2:10M:autoextend
innodb_log_group_home_dir = /data/iblogs
innodb_log_files_in_group = 2
innodb_log_file_size = 1G

 

   
 

 

參考鏈接:

1.官方文檔:http://www.percona.com/docs/wiki/percona-xtrabackup:xtrabackup_manual

2. http://xikder.blog.51cto.com/blog/1423200/309339

3. http://hi.baidu.com/thinkinginlamp/blog/item/9940728b1fc89c1bc9fc7a56.html

4. http://who0168.blog.51cto.com/253401/541687

5. http://www.zhaokunyao.com/archives/1646

6. http://hi.baidu.com/wongxuelei/blog/item/dd7490ee312a3befb3fb9524.html

7.http://chlotte.blog.51cto.com/318402/376294
8.
http://www.orczhou.com/index.php/2009/09/xtrabackup-mysql-innodb/
9.
http://www.orczhou.com/index.php/2009/10/xtrabackup-2/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章