xtrabackup数据库备份
xtrabackup备份
一、Xtrabackup概述
1.1、简介
Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。
Xtrabackup有两个主要的工具:xtrabackup、innobackupex
(1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
(2)innobackupex-1.5.1则封装了xtrabackup,是一个脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁
1.2、安装
# yum -y install perl-*
# tar -xvf percona-xtrabackup-2.0.0.tar.gz
# mv percona-xtrabackup-2.0.0 /usr/local/xtrabackup
# vim /etc/profile
export PATH=$PATH:/usr/local/xtrabackup/bin
1.3、全量备份
#innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 /opt/backup/full/ >>/opt/backup/backup.log2>&1
/opt/backup备份存放的目录 如何备份某个单库,可以用--database来指定
1.4、全量恢复
# /etc/init.d/mysql stop
# rm /data/dbdata/* -rf备份成功后。删除掉这个MYSQL的数据目录试试?
全量开始恢复步骤一
# innobackupex --apply-log --defaults-file=/etc/my.cnf --user=root --password=123456 /opt/backup/2014-04-06_08-25-19/
(--apply-log选项的命令是准备在一个备份上启动mysql服务)
全量开始恢复步骤二
# cd /data/dbdata需要进入到MYSQL的数据存储目录在执行。
#innobackupex --user=root --password=123456 --defaults-file=/etc/my.cnf --copy-back /opt/backup/2014-04-06_08-25-19/
(--copy-back 选项的命令从备份目录拷贝数据,索引,日志到my.cnf文 件里规定的初始位置。)
1.5、增量备份
(1)、先做全量备份
#mkdir /opt/backup/full
#innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 /opt/backup/full >>/opt/backup/backup.log2>&1
(2)、在Mysql里面多创建一个库和表
(3)、在做增量备份
#--incremental:增量备份
#--incremental-basedir:针对哪个做增量备份
#mkdir /opt/backup/rec
innobackupex --defaults-file=/etc/my.cnf --incremental --incremental-basedir=/opt/backup/full/2014-12-26_14-28-31/ --user=root --password='rootmy123' /opt/backup/rec/
#cd /opt/backup
#ls –l
/opt/backup/full/2014-04-06_10-11-36全量备份包
/opt/backup/rec/2014-04-06_12-40-48增量备份包
1.6、增量恢复
先删除刚刚创建的表,然后使用增量恢复.尝试一下.
(1)先回滚没有提交的事务
innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only /opt/backup/full/2014-12-26_15-18-23/
(2)将第一个增量备份合并到全量备份
innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only /opt/backup/full/2014-12-26_15-18-23/ --incremental-dir=/opt/backup/rec/2014-12-26_15-22-25/
(3) 增量备份只是把增量备份的内容,恢复到新建目录/opt/backup/full/2014-12-26_15-22-25fm下,而没有恢复到/var /opt/backup/full/2014-12-26_15-18-23/fm/ 完整备份目录中的数据库当中去。所以需要手工把文件移动到完整备份的数据库目录当中去,如不执行这步,那么还原回来的数据只是完整备份的数据,而所做的增 量就消失了。
# mv 2014-12-26_17-17-14bag/ 2014-12-26_17-17-14/
千万不要选择y,不然会覆盖掉你表结构。如果选择y,那么你select * from test;会提示这个test表不存在!!!
(4).将mysql服务停止掉.
# /etc/init.d/mysqld stop
# rm /data/mysql-data/mysql/* -rf 里面数据全部删除.注意先tar备份以下.
(5)最后COPY恢复FULL备份文件夹
innobackupex --defaults-file=/var/lib/my.cnf --copy-back /opt/backup/futll/2014-12-26_15-18-23
# /etc/init.d/mysqld start
1.7、企业真实环境
(1)、
innobackupex --user=root --password=123456 --defaults-file=/etc/my.cnf --database=zztx --stream=tar /data/back_data/ 2>/data/back_data/zztx.log | gzip 1>/data/back_data/zztx.tar.gz
说明:
--database=zztx 单独对zztx数据库做备份,若是不添加此参数那就那就是对全库做备份
2>/data/back_data/zztx.log 输出信息写入日志中
1>/data/back_data/zztx.tar.gz 打包压缩存储到该文件中
(2)、此处可以写个脚本做备份(backup.sh)
#!/bin/sh
echo "开始备份..."`date`
log=zztx01_`date +%y%m%d%H%M`.log
str=zztx01_`date +%y%m%d%H%M`.tar.gz
innobackupex --user=root --password=123456
--defaults-file=/etc/my.cnf --database=zztx --stream=tar /data/back_data/
2>/data/back_data/$log | gzip 1>/data/back_data/$str
echo "备份完毕..."`date`
(3)、恢复数据
1) 先停止数据库:service mysqld
stop
2) 解压 tar -izxvf
zztx.tar.gz -C /data/back_data/db/ (没有db ,需要mkdir
/data/back_data/db/)
3) 恢复 innobackupex
--user=root --password --defaults-file=/etc/my.cnf --apply-log
/data/back_data/db/ (--apply-log选项的命令是准备在一个备份上启动mysql服务)
innobackupex --user=root --password --defaults-file=/etc/my.cnf
--copy-back /data/back_data/db/ (--copy-back 选项的命令从备份目录拷贝数据,索引,日志到my.cnf文 件里规定的初始位置。)
4) 赋权 chown -R
mysql.mysql /var/lib/mysql/*
5) 重启数据库 service mysqld
restart
6) 删除垃圾 cd
/var/lib/mysql/ && rm xtrabackup*
进入数据库查看,一切OK~