xtrabackup备份数据库

1.安装:

rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

yum install percona-xtrabackup  

#xtrabackup2.2不支持MySQL5.1的Innodb引擎,如需要可安装2.0版本https://www.percona.com/downloads/XtraBackup/XtraBackup-2.0.8/RPM/rhel6/x86_64/percona-xtrabackup-20-2.0.8-587.rhel6.x86_64.rpm)


2、完整备份与恢复

   2.1 完整备份

innobackupex --defaults-file=/wqdata/mysql/my.cnf --user=bkuser --password='123456' /wqdata/mofidbbak/fullbackup/

传到备份服务器:  rsync -avzP /wqdata/mofidbbak/fullbackup/2015-08-18_14-18-11/ [email protected]::mofidbbak/ --password-file=/etc/rsync.password

   2.2 备份恢复

     innobackupex --defaults-file=/opt/mysql/my.cnf --copy-back 2015-08-18_08-50-43/

   2.3 备份文件说明

      # ls 2015-02-08_11-56-48

      backup-my.cnf:记录innobackup使用到mysql参数

      xtrabackup_binary:备份中用到的可执行文件

    xtrabackup_checkpoints:记录备份的类型、开始和结束的日志序列号

      xtrabackup_logfile:备份中会开启一个log copy线程,用来监控innodb日志文件(ib_logfile),如果修改就会复制到这个文件


  2.4 增量备份

innobackupex --defaults-file=/wqdata/mysql/my.cnf --user=bkuser --password='123456' --incremental /wqdata/mofidbbak/incremental/ --incremental-basedir=/wqdata/mofidbbak/fullbackup/2015-08-19_08-42-04/       #指定上次完整备份目录

   增量备份恢复

innobackupex --apply-log --redo-only ../fullbackup/2015-08-19_08-42-04/   预备完整性


innobackupex --apply-log --redo-only /wqdata/mofidbbak/fullbackup/2015-08-19_08-42-04/ --incremental-dir=/wqdata/mofidbbak/incremental/2015-08-19_08-46-38/     合并第一个


然后恢复完整备份即可


      3.5.1 备份恢复思路

        将增量备份1、增量备份2...合并到完整备份,加到一起出来一个新的完整备份,将新的完整备份以拷贝的形式到数据库空目录(rm /var/lib/mysql/* -rf)

      3.5.2 预备完整备份

      #xtrabackup把备份过程中可能有尚未提交的事务或已经提交但未同步数据文件的事务,写到xtrabackup_logfile文件,所以要先通过这个日志文件回滚,把未完成的事务同步到备份文件,保证数据文件处于一致性。

        # innobackup --apply-log --redo-only 2015-02-08_11-56-48

      3.5.3 合并第一个增量备份

        # innobackupex --apply-log --redo-only /mysql_backup/2015-02-08_11-56-48/ --incremental-dir=mysql_backup/2015-02-08_12-16-06

      3.5.4 合并第二个增量备份

        # innobackupex --apply-log --redo-only /mysql_backup/2015-02-08_11-56-48/ --incremental-dir=mysql_backup/2015-02-08_16-06-53

      3.5.5 恢复完整备份(这时2015-02-08_11-56-48完整备份已经包含所有增量备份,可以通过查看checkpoints来核实

        # innobackupex --defaults-file=/etc/mysql/my.cnf --copy-back /mysql_backup/2015-02-08_11-56-48/

      3.5.6 修改恢复数据文件权限

        # chown -R mysql.mysql /var/lib/mysql

      3.5.7 启动MySQL,查看数据库恢复情况

        # /etc/init.d/mysqld start


参考如下两篇:

http://732233048.blog.51cto.com/9323668/1660910

#!/bin/bash
#此脚本用来进行数据库的全备份,结合计划任务完成

#注意:下面的变量值可能要修改,仔细确认下
mysqluser=root
rsyncuser=rsync_backup
rsync_hostip='218.24.71.26'
ip='223.100.98.84'               #本机ip
mysqlpassword=tongze@2011
mysqlsocket='/tmp/mysql.sock'
mysql_defaults_file='/wqdata/mysql/my.cnf'

backuptodir='/wqdata/mofidbbak/fullbackup/'    #备份到目录
binlogdir='/wqdata/mydata/data'     #二进制日志目录
binlogname='mysql-bin.0*'       #二进制日志文件名
rsyncmodule=mofidbbak            #rsync的模块

if [ ! -d $backuptodir ];then
    mkdir -p $backuptodir
fi

#进行全备份
innobackupex --user=$mysqluser --password=$mysqlpassword --socket=$mysqlsocket --defaults-file=$mysql_defaults_file $backuptodir 2> /dev/null || exit 1

#删除一天前的全备份文件,即保留两个备份文件
find $backuptodir  -type f -mtime +1 -exec rm -f {} \;

#删除一天前的二进制日志文件,即保留两天的二进制日志文件
cd $binlogdir
onedayago_binlog=`find . -type f -mtime +1 -name "$binlogname" | sort | tail -n1 | awk -F'/' '{print $2}'`
mysql -u $mysqluser -p$mysqlpassword -e "PURGE MASTER LOGS TO '$onedayago_binlog'" 2> /dev/null

#找出最后一个全备份文件,进行压缩
cd $backuptodir
lastfull_backup=`ls -l | grep '^d' | awk '{print $9}' | sort | tail -n1`
tar -zcf mysql_full_${ip}_${lastfull_backup}.tar.gz ${lastfull_backup}

#将压缩文件rsync同步到备份机
rsync -az --password-file=/etc/rsync.password  ${backuptodir}mysql_full_${ip}_${lastfull_backup}.tar.gz $rsyncuser@${rsync_hostip}::$rsyncmodule || exit 1

#删除压缩文件
rm -f ${backuptodir}mysql_full_${ip}_${lastfull_backup}.tar.gz


你可能感兴趣的:(xtrabackup)