多執行個體下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_*檔案都刪除或重新命名,建議重新命名。