码迷,mamicode.com
首页 > 其他好文 > 详细

xtrabackup 备份恢复测试过程

时间:2015-02-10 18:53:44      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:xtrabackup mysql 备份 脚本 说明

参考:

http://blog.csdn.net/justdb/article/details/17054579# MySQL备份与恢复之percona-xtrabackup软件的使用

http://blog.csdn.net/justdb/article/details/17054667# MySQL备份与恢复之percona-xtrabackup实现增量备份及恢复

http://devliangel.blog.51cto.com/469347/1374232# 使用innobackupex在线增量备份及恢复mysql数据库

http://www.percona.com/doc/percona-xtrabackup/2.2/# 官方使用手册文档

http://blog.chinaunix.net/uid-20785090-id-4212816.html# xtraBackup备份原理剖析 

http://blog.csdn.net/tianlesoftware/article/details/7028733 # MySQL 数据文件 说明


xtrabackup 备份恢复测试过程


1、安装

cd /data/soft

wget http://www.percona.com/redir/downloads/XtraBackup/LATEST/binary/redhat/6/x86_64/percona-xtrabackup-2.2.6-5042.el6.x86_64.rpm


yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL


rpm -ivh percona-xtrabackup-2.2.6-5042.el6.x86_64.rpm


2、完全备份及恢复


# mysql备份用户授权

mysql> grant select,show view,Replication client,SUPER,RELOAD  on *.* to ‘backup‘@‘127.0.0.1‘ identified by ‘passwd‘;flush privileges;


完全备份

innobackupex --host=127.0.0.1  --port=3306 --user=backup --password=‘passwd‘ --no-lock --defaults-file=/usr/local/services/mysql/etc/my.cnf --parallel=4   /data/backup     


完全恢复

#检查及准备备份完的数据 --use-memory 参数默认100M, 表示可以给innobackupex使用的内存,越多越好

innobackupex --parallel=4 --use-memory=1G --apply-log  /data/backup/2014-11-18_15-52-40

#恢复

innobackupex  --defaults-file=/usr/local/services/mysql/etc/my.cnf   --parallel=4 --copy-back  /data/backup/2014-11-18_15-52-40

chown mysql:mysql /data/mysql_data -R

service mysql start


3、增量备份及恢复


#针对已经备份的目录进行增量备份

innobackupex --host=127.0.0.1  --port=3306 --user=backup --password=‘passwd‘ --no-lock --defaults-file=/usr/local/services/mysql/etc/my.cnf  --incremental /data/backup/ --incremental-dir /data/backup/2014-11-18_15-52-40

#再次插入数据

# 再次增量备份

innobackupex --host=127.0.0.1  --port=3306 --user=backup --password=‘passwd‘ --no-lock --defaults-file=/usr/local/services/mysql/etc/my.cnf  --incremental /data/backup/ --incremental-dir /data/backup/2014-11-18_18-11-35

#再次插入数据

# 再次增量备份

innobackupex --host=127.0.0.1  --port=3306  --user=backup --password=‘passwd‘ --no-lock --defaults-file=/usr/local/services/mysql/etc/my.cnf  --incremental /data/backup/ --incremental-dir /data/backup/2014-11-18_18-14-56


#模拟数据丢失

service mysql stop

rm -rf /data/mysql_data/*


#三次增量备份数据合并到全备份中去

innobackupex  --apply-log --redo-only --incremental /data/backup/2014-11-18_15-52-40 --incremental-dir /data/backup/2014-11-18_18-11-35

innobackupex  --apply-log --redo-only --incremental /data/backup/2014-11-18_15-52-40 --incremental-dir /data/backup/2014-11-18_18-14-56

innobackupex  --apply-log --redo-only --incremental /data/backup/2014-11-18_15-52-40 --incremental-dir /data/backup/2014-11-18_18-17-07


#恢复整合后的全备数据

#检查及准备备份完的数据

innobackupex --parallel=4 --use-memory=1G --apply-log  /data/backup/2014-11-18_15-52-40

#恢复

innobackupex   --defaults-file=/usr/local/services/mysql/etc/my.cnf   --parallel=4 --copy-back  /data/backup/2014-11-18_15-52-40

chown mysql:mysql /data/mysql_data -R

service mysql start


4、单数据库备份及恢复


#指定数据库备份

innobackupex --host=127.0.0.1  --port=3306  --user=backup --password=‘passwd‘ --no-lock --defaults-file=/usr/local/services/mysql/etc/my.cnf --parallel=4  --databases=‘test_backup5‘  /data/backup     



#模拟表数据丢失

mysql > drop test_backup5 MyClass;

mysql > create table MyClass(  id int(4) not null primary key auto_increment,   name char(20) not null,  sex int(4) not null default ‘0‘,   degree double(16,2));

ALTER TABLE test_backup5.MyClass IMPORT TABLESPACE:


# 恢复指定库表数据


#指定数据库恢复检查及导出表空间文件

innobackupex --apply-log --export /data/backup/2014-11-19_18-05-35

# 删除表空间

mysql > use test_backup5;

mysql >  ALTER TABLE  test_backup5.MyClass DISCARD TABLESPACE;

#复制需要导入的表空间文件到相应数据库目录,复制MyClass.ibd 和 MyClass.cfg (mysql5.6以前的版本是.exp)

cp /data/backup/2014-11-19_18-05-35/test_backup5/{MyClass.ibd,MyCLass.cfg} /data/mysql_data/test_backup5

# 导入表空间

mysql > use test_backup5;

mysql >  ALTER TABLE  test_backup5.MyClass IMPORT TABLESPACE;


5、使用定制的xtrabackup备份及恢复脚本 + binlog备份恢复


为简化操作编写了三个脚本,各脚本中有数据库及备份目录参数设置(附件有下载链接)

脚本列表说明:

#全数据库备份脚本 用法: ./xtrabackup_backup.sh

xtrabackup_backup.sh

#全数据库导入脚本 用法: ./xtrabackup_all_import.sh <BAK_IMPORT_DATETIME>

xtrabackup_all_import.sh 

#单数据库导入脚本 用法: ./xtrabackup_import <BAK_IMPORT_DATETIME> <DBNAME>

xtrabackup_import.sh


#备份及恢复过程如下


# 完全备份数据表结构,此处省略过程(注意,备份表结构需加-R(备份函数及存储过程) --no-data(不备份数据))

# 完全备份数据,使用备份脚本

sudo sh xtrabackup_backup.sh

# 备份目录在为

# innobackupex: Backup created in directory ‘/data/backup/2014-12-01_16-51-00‘

# binlog信息在 xtrabackup_binlog_info 或 xtrabackup_info 中

# innobackupex: MySQL binlog position: filename ‘mysql-bin.000006‘, position 191, GTID of the last change ‘7d481ded-790b-11e4-9d81-00e081e00029:1-178‘



# Game数据库,表cGameServerList 修改一条、添加一条数据、删除一条数据 (三次修改数据,为binlog恢复验证做准备)

# 此处省略过程


# 删除Game数据库

drop database Game


# binlog日志生成新文件

mysql -uroot -e "flush logs;"

# 查看binlog新日志名称

mysql -uroot -e "show binary logs;"|tail 


# 创建数据库,并导入表结构

mysql -uroot -e "create database Game"

mysql -uroot Game < Game-nodata.sql

# 用xtrabackup 单库恢复Game, 执行恢复脚本 ,输入参数 恢复备份目录及恢复数据库 (注意:mysiam 引擎表或在现有的innodb表基础上恢复,需要重启mysql服务)

sudo sh  xtrabackup_import.sh 2014-12-01_16-51-00 Game


#检查cGameServerList 表数据正常


# 通过binlog 恢复从定时备份到drop 数据库前的数据

# 查看xtrabackup备份的binlog-info 备份时 MySQL binlog position: filename ‘mysql-bin.000009‘, position 191

# 查看drop database Game 时 MySQL binlog position

sudo /usr/local/services/mysql/bin/mysqlbinlog --start-position=191  /data/mysql_data/mysql-bin.000006|grep -B 10 -i ‘DROP DATABASE‘ 


#备份现有binlog

cp /data/mysql_data/mysql-bin* /data/mysqlbinlogbak/

#初始化binlog,清空现有的mysqlbinlog日志,如果不执行这步,导入不了最后需要执行的binlog中的数据记录

mysql -uroot -e "reset master"

#导入需要恢复的binlog(按备份的position 至drop 前的position 恢复),如果需要恢复多个mysql-bin 文件,执行多条下面命令

sudo /usr/local/services/mysql/bin/mysqlbinlog /data/mysqlbinlogbak/mysql-bin.000009 --start-position=191 --stop-position=2814 | mysql -uroot 


#再次检查cGameServerList 表数据正常,发现这次数据为做过三次修改的数据,到现在为止,全部数据恢复正常


6、从数据库使用参数 --slave-info --safe-slave-backup 记录备份时的slave状态,注意:slave信息备份需要的backup备份账户有 SUPER 权限 


xtrabackup 备份恢复测试过程

标签:xtrabackup mysql 备份 脚本 说明

原文地址:http://osrun.blog.51cto.com/608651/1613432

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!