多实例下percona-xtrbackup使用(2014-11-10)

背景说明

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
其他安装可以查看官网:

相关准备

创建备份目录

cd /
mkdir data
cd data
mkdir mkdir backup
在backup目录下,创建三个目录:mkdir {conf,incremental,full}
三个目录具体功能如下:
conf:存放自定义的my.cnf配置信息
full:存放首次全量备份数据
incremental:存放增量备份数据
备份my.cnf到conf目录
cp /etc/my.cnf /data/backup/conf/3306.cnf
cp /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

文件说明:

backup-my.cnf: 主要是记录innobackupex中使用到Mysql参数。

[root@h199 2014-11-07_14-06-47]# cat backup-my.cnf 
# 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 (增备)

[root@h199 2014-11-07_14-06-47]# cat xtrabackup_checkpoints 
backup_type = full-prepared 
from_lsn = 0 
to_lsn = 8234580547 
last_lsn = 8234580547 
compact = 0

xtrabackup_info: 记录mysql相关信息

[root@h199 2014-11-07_14-06-47]# cat xtrabackup_info 
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:
图4

增量备份的文件,如图5:
图5
数据文件以"*.meta"文件进行保存,没有.frm文件。再查看
[root@h199 2014-11-07_14-21-25]# cat backup-my.cnf 
# 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
[root@h199 2014-11-07_14-21-25]# cat backup-my.cnf 
# 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  
[root@h199 2014-11-07_14-21-25]# cat xtrabackup_info 
uuid = 5fba7b1b-6646-11e4-bb2a-000c295bd3a3 
name = 
tool_name = innobackupex 
tool_command = --user=root --password=... --defaults-file=/data/backup/conf/3306.cnf --socket=/tmp/mysql_3306.sock --incremental /data/backup/incremental/ --incremental-basedir=/data/backup/full/2014-11-07_14-06-47/ 
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:21:25 
end_time = 2014-11-07 14:21:56 
lock_time = 1 
binlog_pos = 
innodb_from_lsn = 8234574477 
innodb_to_lsn = 8234578623 
partial = N 
incremental = Y 
format = file 
compact = N 
compressed = N

3.再新增数据,准备第三次备份

insert into t3(col1,col2)value(11,1);  

insert into t3(col1,col2)value(12,1);  

insert into t3(col1,col2)value(13,1);  

insert into t3(col1,col2)value(14,1);  

insert into t3(col1,col2)value(15,1);  

insert into t3(col1,col2)value(16,1);  

insert into t3(col1,col2)value(17,1);  

insert into t3(col1,col2)value(18,1);  

insert into t3(col1,col2)value(19,1);  

insert into t3(col1,col2)value(20,1);  



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

完成后查看/data/backup/incremental目录下是否新增2014-11-07_14-21-25目录

图6
5.  对全部的数据进行检查。可以看到增量备份和全备的文件占用磁盘大小有很大的差别,显然全备占用磁盘空间多,增量备份占用磁盘空间少

了解两个参数 

--apply-log :创建新的事务日志,从backup-my.cnf文件中读取innodb配置信息。

--redo-only:只读已提交的事务,在最后一次增量合并时,不需要填写这个参数。

innobackupex  --apply-log --redo-only /data/backup/full/2014-11-07_14-06-47
 6.将第一次做的增量备份数据进行合并到全备份中去
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

7.将第二次做的增量备份数据进行合并到全备份中去

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参数。 

8. 恢复时需要停掉MySQL,所以我们停掉MySQL3307实例。 

/usr/local/mysql/bin/mysqld_multi stop 3307

如果无法停止mysql,执行kill -9 mysql3307实例的进程 

9. 恢复数据。注意这里指定的文件夹是2013-09-10_22-12-50 

innobackupex --defaults-file=/data/backup/conf/3307.cnf --copy-back /data/backup/full/2014-11-06_14-52-38/ 

10. mysql的data目录进行权限设置

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

11.启动mysql3307实例

/usr/local/mysql/bin/mysqld_mutil start 3306

查看实例是否被启动:

/usr/local/mysql/bin/mysqld_mutil report

12.登录数据库核对两个数据库中相关表的数据是否一致。 

另外也可以通过这个备份恢复3306的数据,通过如下操作模拟数据丢失情况。

1 .模拟数据丢失

drop database test 

2. 停止3306实例

3. 通过上次的全备+增备1+增备2的数据恢复3306实例的test数据库。

innobackupex --defaults-file=/data/backup/conf/3306.cnf --copy-back /data/backup/full/2014-11-06_14-52-38/ 

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

 

图7

查看下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_*文件都删除或重命名,建议重命名。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值