对MySQL数据库的备份与恢复是非常有必要的,它可以用很多种方法来实现,本文我们主要介绍了使用Xtrabackup来进行备份的全部过程,接下来就让我们一起来了解一下这部分内容。
Xtrabackup是percona公司的开源项目,用以实现类似innodb官方的热备份工具InnoDB Hot Backup的功能,能够非常快速地备份与恢复mysql数据库。 Xtrabackup中包含两个工具:
xtrabackup是用于热备份innodb, xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;
innobackupex是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。
由于innobackupex的功能更为全面和完善,所以,本文以innobackupex作为基础进行研究描述。
下载和安装
在以下地址可以下载到xtrabackup:http://www.percona.com/downloads/XtraBackup/,可以根据自己的需要选择稳定版本或者最新版本以及操作系统、源码包或者rpm包等等。
其中,
innobackupex是我们要使用的备份工具;
xtrabackup是被封装在innobackupex之中的,innobackupex运行时需要调用它;
xtrabackup_51是xtrabackup运行时需要调用的工具;
tar4ibd是以tar流的形式产生备份时用来打包的工具。
以下是几个备份小脚本,仅供参考:
1.完整备份
#!/bin/bash
#
DATE=`date "+%F"`
User="root"
Passwd="mysql"
IP="localhost"
databak_dir="/mysqlbackup/full/$DATE" #备份的目录
eMailFile=/mysqlbackup/full/email.txt
eMail=15301727316@189.cn
logFile=/mysqlbackup/full/logs/mysql-$DATE.log
Database="test_db"
if [ ! -d $databak_dir ] ; then
mkdir -p $databak_dir
fi
echo " " > $eMailFile
echo "---------------------------------" >> $eMailFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $eMailFile
/usr/bin/innobackupex --user=$User --password=$Passwd --defaults-file=/etc/my.cnf --database=$Database $databak_dir >> $eMailFile 2>&1
ls -d /mysqlbackup/full/$DATE > /mysqlbackup/full/1.txt
ls /mysqlbackup/full/$DATE > /mysqlbackup/full/2.txt
if [[ $? == 0 ]]; then
echo "BackupFileName:$Database" >> $eMailFile
echo "DataBase Backup Success" >> $eMailFile
else
echo "DataBase Backup Fail!" >> $eMailFile
mail -s " DataBase Backup Fail " $eMail < $eMailFile #如果备份不成功发送邮件通知
fi
echo "--------------------------------------------------------" >> $logFile
cat $eMailFile >> $logFile
find /mysqlbackup/full/ -name "*" -mtime +30 |xargs rm -rf
2.增量备份
#!/bin/bash
#
DATE=`date "+%F"`
User="root"
Passwd="mysql"
IP="localhost"
databak_dir="/mysqlbackup/increment/$DATE" #备份的目录
eMailFile=/mysqlbackup/increment/email.txt
eMail=15301727316@189.cn
logFile=/mysqlbackup/increment/logs/mysql-$DATE.log
Database="test_db"
FDIR1=`cat /mysqlbackup/full/1.txt`
FDIR2=`cat /mysqlbackup/full/2.txt`
if [ ! -d $databak_dir ] ; then
mkdir -p $databak_dir
fi
echo " " > $eMailFile
echo "---------------------------------" >> $eMailFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $eMailFile
/usr/bin/innobackupex --user=$User --password=$Passwd --database=$Database --incremental --incremental-basedir=$FDIR1/$FDIR2/ $databak_dir >> $eMailFile 2>&1
ls -d /mysqlbackup/increment/$DATE > /mysqlbackup/increment/1.txt
ls /mysqlbackup/increment/$DATE > /mysqlbackup/increment/2.txt
if [[ $? == 0 ]]; then
echo "BackupFileName:$Database" >> $eMailFile
echo "DataBase Increment Backup Success" >> $eMailFile
else
echo "DataBase Increment Backup Fail!" >> $eMailFile
mail -s " DataBase Increment Backup Fail " $eMail < $eMailFile #如果备份不成功发送邮件通知
fi
echo "--------------------------------------------------------" >> $logFile
cat $eMailFile >> $logFile
find /mysqlbackup/increment/ -name "*" -mtime +30 |xargs rm -rf
3.还原
#!/bin/bash
#
DATE=`date "+%F"`
User="root"
Passwd="mysql"
IP="localhost"
Database="test_db"
FDIR1=`cat /mysqlbackup/full/1.txt`
FDIR2=`cat /mysqlbackup/full/2.txt`
IDIR1=`cat /mysqlbackup/increment/1.txt`
IDIR2=`cat /mysqlbackup/increment/2.txt`
#stop mysql
/etc/init.d/mysqld stop
#apply full log
/usr/bin/innobackupex --user=$User --password=$Passwd --defaults-file=/etc/my.cnf --apply-log $FDIR1/$FDIR2/
#apply increment log to full data
/usr/bin/innobackupex --user=$User --password=$Passwd --defaults-file=/etc/my.cnf --apply-log --redo-only $FDIR1/$FDIR2/ --incremental-dir=$IDIR1/$IDIR2/
rm -f /data/mysqldata/ib*
rm -rf /data/mysql/3306/data/test_db
cp $FDIR1/$FDIR2/ib* /data/mysqldata
chown -R mysql:mysql /data/mysqldata/
cp -r $FDIR1/$FDIR2/$Database /data/mysql/3306/data/
chown -R mysql:mysql /data/mysql/3306/data/$Database
#start mysql
/etc/init.d/mysqld start
还原脚本采用的是直接复制的做法,本人使用--copy-back时,老是出现报错的情况,如下:
Original data directory is not empty! at /usr/local/xtrabackup/bin/innobackupex line 538.恢复的目录必须为空。经查官网,这是xtrabackup的一个BUG。
innobackupex did not check that MySQL datadir was empty before –copy-back was run. With this bug fix, innobackupex will now error out of the –copy-back operation if the destination is not empty, avoiding potential data loss or a strang combination of a restored backup and previous data. Bug Fixed: #737569 (Valentine Gostev)
由于我的data目录不为空,此处直接拷贝就可以了。
相关推荐
基于xtrabackup的MySQL数据库备份及还原Shell脚本
Xtrabackup for Mysql5.7 官方版本安装包 Mysql备份首选 物理在线备份 友情链接 免费下载 求个赞
MySQL 最有力的备份恢复工具 XtraBackup使用操作手册
通过已经备份的数据库文件对数据库进行恢复测试,并输出测试报告,本次测试对数据库的全量及增量备份进行恢复,并在恢复完成后验证数据是否正常,恢复时间是否与备份时间相一致。...
mysql用户手册之使用Xtrabackup进行备份与恢复
MySQL XtraBackup数据备份与恢复,非常详细,推荐下载学习
XtraBackup 备份与恢复实例讲解 这里简单介绍 innobackupex 一些常用的参数
Xtrabackup备份恢复原理 备份innodb表时,xtrabackup若干个线程拷贝独立表空间的.ibd文件,并不停监视此过程中redo log的变化,添加到自己的事务日志文件(xtrabackup_logfile)中。在此过程中,发生的物理写操作越...
xtrabackup备份恢复shell脚本,亲测生产使用。 1、全库+累计+差异 2、可恢复到指定时间 3、另外有测试数据
下面我们来了解一下MySQL常见的有三种备份恢复方式: 1、利用Mysqldump+二进制日志实现备份 2、利用LVM快照+二进制日志实现备份 3、使用Xtrabackup备份 一:实验环境介绍: 系统介绍:CentOS6.4_X64 数据库版本:...
Linux运维-运维课程d5-MySQL备份与恢复-07-xtrabackup备份恢复原理.mp4
着重介绍mysql 普通备份与xtrabackup 备份 ----------------------------------------------------------------------------------------------------------------------------------------------------------------...
Xtrabackup 是percona公司的开源项目,用以实现类似innodb官方的热备份工具InnoDB Hot Backup的功能,能够非常快速地备份与恢复MySQL数据库。今天我们就来详细讨论下Xtrabackup的使用方法
Linux运维-运维课程d5-MySQL备份与恢复-09-xtrabackup全库备份核心思路.mp4
Linux运维-运维课程d5-MySQL备份与恢复-10-xtrabackup全库备份(上).mp4
简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。特点: (1)备份过程快速、可靠; (2)备份过程不会打断正在执行的事务; ...
Linux运维-运维课程d5-MySQL备份与恢复-14-xtrabackup增量备份(上).mp4
Linux运维-运维课程d5-MySQL备份与恢复-13-xtrabackup增量备份的核心原理.mp4
1.物理备份和逻辑备份 2.热备、温备、冷备 1.XtraBackup如何对InnoDB实现备份 2.XtraBackup备份MyISAM表 3.备份创建的文件
《MYSQL备份与恢复》之 Innodb与 MyISAM引擎 一、系统环境 1.1 ubuntu 12.0.4 X86_64 1.2 percona-xtrabackup-2.0.3.tar.gz 1.3 xtrabackup简介 xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时...