多執行個體下percona-xtrbackup使用(2014-11-10),perconaserver

來源:互聯網
上載者:User

多執行個體下percona-xtrbackup使用(2014-11-10),perconaserver

背景說明

        percona-xtrabackup是由percona公司開發的備份工具,主要有兩個工具,一個是xtrabackup,另一個是innobackupex。其中中innobackupex是對xtrabackup封裝,是一個perl指令碼。本文操作相對比較簡單,通過innobackupex將3306執行個體的資料進行備份,再恢複到3307執行個體上。同時也簡單的介紹下通過這個備份恢複資料。

安裝percona-xtrbackup可以使用二進位、源碼、yum安裝,本文主要使用yum安裝,步驟如下:
 yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm  yum install percona-xtrabackup.x86_64 yum search percona

其他安裝可以查看官網:http://www.percona.com/doc/percona-xtrabackup/2.2/installation.htmlhttp://www.percona.com/doc/percona-xtrabackup/2.2/installation/compiling_xtrabackup.html相關準備建立備份目錄
cd /mkdir datacd datamkdir mkdir backup
在backup目錄下,建立三個目錄:mkdir {conf,incremental,full}
三個目錄具體功能如下:conf:存放自訂的my.cnf配置資訊full:存放首次全量備份資料
incremental:存放增量備份資料備份my.cnf到conf目錄
cp /etc/my.cnf /data/backup/conf/3306.cnfcp /etc/my.cnf /data/backup/conf/3307.cnf

3306.cnf原樣儲存即可,3307.cnf需要進行修改,在[mysqld]節點下添加"datadir=/data/mysql/mysql_3307/data/"。以方便資料恢複時使用。常用參數說明:
--user: mysql使用者--password: 使用者密碼--defaults-file:  指定my.cnf檔案路徑,若不指定則讀取mysql預設的my.cnf檔案--socket:mysql執行個體對應的socket檔案
備份實操作1. 全量備份首次備份為全量備份,也是增量備份的基礎。
innobackupex --user=root --password=123456 --socket=/tmp/mysql_3306.sock  --defaults-file=/data/backup/conf/3306.cnf  /data/backup/full/ 
       首次將資料庫的所有資料備份到/data/backup/full/目錄,在/data/backup/full/ 目錄下將產生一個目前時間戳的子目錄,1。若要不產生時間戳記的子目錄,可以使用--no-timestamp參數,使其不自動產生時間戳記的子目錄,所以備份資料將儲存在/data/backup/full/ 下。 全備只需指定用於備份的使用者名稱、密碼和備份路徑即可,最後出現innobackupex: completed OK! 則代表備份成功。

圖1


      全備後的目錄檔案,2。

圖2 

       mysql的data目錄下的檔案,3。

圖3

        可以對比圖2、圖3的目錄檔案,xtrabackup產生的檔案有backup-my.cnf、xtrabackup_checkpoints、xtrabackup_info、xtrabackup_lofile。

        檔案說明:

         backup-my.cnf: 主要是記錄innobackupex中使用到Mysql參數。

# This MySQL options file was generated by innobackupex. # The MySQL server [mysqld] innodb_checksum_algorithm=innodb innodb_data_file_path=ibdata1:12M:autoextend innodb_log_files_in_group=2 innodb_log_file_size=50331648 innodb_page_size=16384 innodb_undo_directory=. innodb_undo_tablespaces=0

          xtrabackup_checkpoints: 記錄備份類型及開始及結束的lsn位置。backup_type 有兩種full-prepared (全備)、incremental (增備)。

backup_type = full-prepared from_lsn = 0 to_lsn = 8234580547 last_lsn = 8234580547 compact = 0
         xtrabackup_info: 記錄mysql相關資訊。


uuid = 3d090541-6649-11e4-bb2a-000c295bd3a3 name = tool_name = innobackupex tool_command = --user=root --password=... --incremental /data/backup/incremental/ --incremental-base=/data/backup/incremental/2014-11-07_14-24-54/ --defaults-file =/data/backup/conf/3306.cnf --socket=/tmp/mysql_3306.sock tool_version = 1.5.1-xtrabackup ibbackup_version = xtrabackup version 2.2.6 based on MySQL server 5.6.21 Linux (x86_64) (revision id: ) server_version = 5.6.21-log start_time = 2014-11-07 14:41:52 end_time = 2014-11-07 14:42:27 lock_time = 2 binlog_pos = innodb_from_lsn = 8234579864 innodb_to_lsn = 8234580547 partial = N incremental = Y format = file compact = N compressed = N

       xtrabackup_logfile:    xtrabackup自己的記錄檔,新版本中不直接可見。

2.製造新資料建立表,並寫入資料,作為新增的資料。

use test;create table t3(col1 int,col2 int);
寫入如下新資料:

insert into t3(col1,col2)value(1,1);insert into t3(col1,col2)value(2,1);insert into t3(col1,col2)value(3,1);insert into t3(col1,col2)value(4,1);insert into t3(col1,col2)value(5,1);insert into t3(col1,col2)value(6,1);insert into t3(col1,col2)value(7,1);insert into t3(col1,col2)value(8,1);insert into t3(col1,col2)value(9,1);insert into t3(col1,col2)value(10,1);

註:可以刪除、更新資料,再觀察首次增量備份後的目錄下的表檔案,與全量備份的表檔案進行對比,分析不同之處。

3. 第一次增量備份       第二次備份即首次增量備份,增量備份是在上次備份的基礎上對最新的資料進行備份。語句如下:

innobackupex --user=root --password=123456 --socket=/tmp/mysql_3306.sock  --defaults-file=/data/backup/conf/3306.cnf  --incremental /data/backup/incremental/ --incremental-basedir=/data/backup/full/2014-11-07_14-06-47
      參數說明:

--incremental :指定儲存本次增量備份的目錄--incremental-basedir:上次備份的儲存目錄
       完成首次的增量備份後,在指定目錄下也會產生一個新的目錄,目錄中的檔案與全量備份檔案部分不一樣。

4. 第二次增量備份

     在第二次備份(增備)的基礎上,再進行備份。

innobackupex --user=root --password=123456 --socket=/tmp/mysql_3306.sock  --defaults-file=/data/backup/conf/3306.cnf  --incremental /data/backup/incremental/  --incremental-basedir=/data/backup/incremental/2014-11-07_14-21-25
恢複操作1. 對全量備份進行操作     瞭解兩個參數 :
--apply-log :建立新的交易記錄,從backup-my.cnf檔案中讀取innodb配置資訊。--redo-only:唯讀已提交的事務,在最後一次增量合并時,不需要填寫這個參數。
全量備份恢複前準備
innobackupex  --apply-log --redo-only /data/backup/full/2014-11-07_14-06-47
2. 將第一次增量備份的資料合併到全量備份中
innobackupex  --apply-log --redo-only  /data/backup/full/2014-11-07_14-06-47 --incremental-dir=/data/backup/incremental/2014-11-07_14-21-25
3.將第二次全量備份的資料合併到全量備份中
innobackupex --apply-log  /data/backup/full/2014-11-06_14-52-38/ --incremental-dir=/data/backup/incremental/2014-11-07_14-23-52
註:最後一次的合併作業中不需要添加--redo-only參數。4.停止mysql服務      恢複時需要停掉MySQL,所以我們停掉MySQL3307執行個體。
/usr/local/mysql/bin/mysqld_multi stop 3307
      如果無法停止mysql,執行kill -9 mysql3307執行個體的進程。5. 恢複資料。
innobackupex --defaults-file=/data/backup/conf/3307.cnf --copy-back /data/backup/full/2014-11-06_14-52-38/ 
6.使用權限設定    對mysql的data目錄進行使用權限設定。
chown -R mysql:mysql   /data/mysql/mysql_3307/data
7.啟動mysql3307執行個體
/usr/local/mysql/bin/mysqld_mutil start 3306
    查看執行個體是否被啟動:
/usr/local/mysql/bin/mysqld_mutil report
8. 查看是否恢複成功

     登入資料庫核對兩個資料庫中相關表的資料是否一致。 


     另外也可以通過這個備份恢複3306的資料,通過如下操作類比資料丟失情況。

1 .類比資料丟失
drop database test;
2. 停止3306執行個體3.恢複資料

<span style="font-size:14px;">innobackupex --defaults-file=/data/backup/conf/3306.cnf --copy-back /data/backup/full/2014-11-06_14-52-38/ </span>

4. mysql的data目錄進行使用權限設定
chown -R mysql:mysql   /data/mysql/mysql_3307/data 
5.啟動3306執行個體     查看test資料庫是所有表及資料都被恢複。

註:

1. 在備份的時候如果磁碟空間還足夠的話,建議每個備份都再做一個副本,防止備份資料異常。

2. 進行恢複的時候一定要注意合并的先後順序,如全備->增量備2->增量備份2,先後順序不能亂,否則將使用資料不一致。 

碰到的問題及解決方案 1. innobackupex: Error: Original data directory 'XXX' is not empty!

需要刪除之前的data目錄下的,我們可以對原有的data目錄進行重新命名。

mv /data/mysql/mysql_3307/data /data/mysql/mysql_3307/data_bak_20141107   

2. ./ibdata1 can't be opened in read-write mode

 

圖4

查看下data及子目錄的所屬使用者及使用者組,如果是root使用者及使用者組,可以做如下操作:

chown -R mysql:mysql   /data/mysql/mysql_3307/data 

3.InnoDB: Cannot create ./ib_logfile101

如下錯誤:

2014-11-07 10:24:05 12406 [ERROR] InnoDB: Cannot create ./ib_logfile101

2014-11-07 10:24:05 12406 [ERROR] Plugin 'InnoDB' init function returned error.

2014-11-07 10:24:05 12406 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.

2014-11-07 10:24:05 12406 [ERROR] Unknown/unsupported storage engine: InnoDB

2014-11-07 10:24:05 12406 [ERROR] Aborting


為瞭解決上一個問題,將data目錄下ib_*檔案都刪除或重新命名,建議重新命名。

相關文章

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.