首页 > 数据库 > mysql教程 > Mysql开源备份工具Xtrabackup备份部署_MySQL

Mysql开源备份工具Xtrabackup备份部署_MySQL

WBOY
发布: 2016-06-01 13:33:05
原创
1024 人浏览过

bitsCN.com

Mysql开源备份工具Xtrabackup备份部署

 

  Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。 

  Xtrabackup有两个主要的工具:xtrabackup、innobackupex 

  1、xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表 

  2、innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的.innobackupex是一个perl脚本封装,封装了xtrabackup。主要是为了方便的 同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢 复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。

  

  Xtrabackup下载地址:

   http://www.percona.com/downloads/XtraBackup/LATEST/binary/

  

  选择合适的版本,我这里选择binary。

  

  解压到/usr/src/目录,解压后目录名percona-xtrabackup-2.1.3,进入到bin目录,即可直接使用innobackupex命令

  # pwd

  /usr/src/percona-xtrabackup-2.1.3/bin

  # ls -l

  total 112396

  -rwxr-xr-x 1 root root   110738 Jun  7 11:43 innobackupex

  -rwxr-xr-x 1 root root   110738 Jun  7 11:43 innobackupex-1.5.1

  -rwxr-xr-x 1 root root  2211237 Jun  7 11:43 xbcrypt

  -rwxr-xr-x 1 root root  2285672 Jun  7 11:43 xbstream

  -rwxr-xr-x 1 root root 13033745 Jun  7 11:43 xtrabackup

  -rwxr-xr-x 1 root root 16333506 Jun  7 11:43 xtrabackup_55

  -rwxr-xr-x 1 root root 80988093 Jun  7 11:43 xtrabackup_56

  

  在开始使用的时候可能会报如下错误:

  sh: xtrabackup_55: command not found

  innobackupex: fatal error: no 'mysqld' group in MySQL options

 

 

  解决办法xtrabackup_55复制到/usr/bin下即可。

  # cp /usr/src/percona-xtrabackup-2.1.3/bin/xtrabackup_55 /usr/bin/

  

  

  建立mysql备份用户:

  mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backupuser'@'localhost' identified by 'skEBfef5E2';

  mysql> FLUSH PRIVILEGES;

  

  备份脚本内容(每周一次全备,六次增量备份,保留2周的备份,并压缩):

   

[plain]

#!/bin/bash   

BEGINTIME=`date "%Y-%m-%d %H:%M:%S"`   

format_time=`date "%Y-%m-%d_%H:%M:%S"`   

week=`date %w`   

backupbin=/usr/src/percona-xtrabackup-2.1.3/bin   

backdir=/data/databasebak/bak   

file_cnf=/etc/my.cnf  

user_name=backupuser   

password="skEBfef5E2"  

db="db1 db2 db3 db4"  

out_log=$backdir/xtrabackup_log_$format_time   

time_cost=$backdir/xtrabackup_time.txt  

  

if [ -f "$backdir.lastlastlastweek.gz" ];then  

        rm -rf $backdir.lastlastweek.gz  

        mv $backdir.lastweek.gz $backdir.lastlastweek.gz  

fi  

  

if [ -d "$backdir/rec5" ];then   

        gzip -cr $backdir >$backdir.lastweek.gz  

        rm -rf $backdir            

        mkdir $backdir   

fi  

   

#full   

if [ ! -d "$backdir/full" ];then  

        echo "#####start full backup at $BEGINTIME to directory full" >>$time_cost  

         $backupbin/innobackupex --defaults-file=$file_cnf --no-timestamp --user=$user_name --password=$password --slave-info --databases="$db" $backdir/full 1> $out_log 2>&1  

         break;  

elif [ ! -d "$backdir/rec0" ];then   

        echo "#####start 0 incremental backup at $BEGINTIME to directory rec0" >>$time_cost   

        $backupbin/innobackupex --defaults-file=$file_cnf  --no-timestamp --user=$user_name --password=$password --slave-info --databases="$db" --incremental --增量-basedir=$backdir/full $backdir/rec0 1> $out_log 2>&1  

        中断;  

elif [ ! -d "$backdir/rec1" ];然后  

        echo "#####在 $BEGINTIME 开始 1 次增量备份到目录 rec1" >>$time_cost  

        $backupbin/ innobackupex --defaults-file=$file_cnf --no-timestamp --user=$user_name --password=$password --slave-info --databases="$db" --incremental --incremental-basedir=$backdir /rec0 $backdir/rec1 1> $out_log 2>&1  

         break;  

elif [ ! -d "$backdir/rec2" ];然后  

        echo "#####在 $BEGINTIME 开始 2 次增量备份到目录 rec2" >>$time_cost  

        $backupbin/ innobackupex --defaults-file=$file_cnf --no-timestamp --user=$user_name --password=$password --slave-info --databases="$db" --incremental --incremental-basedir=$backdir /rec1 $backdir/rec2 1> $out_log 2>&1  

         break;  

elif [ ! -d "$backdir/rec3" ];然后  

        echo "#####在 $BEGINTIME 开始 3 次增量备份到目录 rec3" >>$time_cost  

        $backupbin/ innobackupex --defaults-file=$file_cnf --no-timestamp --user=$user_name --password=$password --slave-info --databases="$db" --incremental --incremental-basedir=$backdir /rec2 $backdir/rec3 1> $out_log 2>&1  

         break;  

elif [ ! -d "$backdir/rec4" ];然后  

        echo "#####在 $BEGINTIME 开始 4 次增量备份到目录 rec4" >>$time_cost  

        $backupbin/ innobackupex --defaults-file=$file_cnf --no-timestamp --user=$user_name --password=$password --slave-info --databases="$db" --incremental --incremental-basedir=$backdir /rec3 $backdir/rec4 1> $out_log 2>&1  

         break;  

elif [ ! -d "$backdir/rec5" ];然后  

        echo "#####在 $BEGINTIME 开始 5 次增量备份到目录 rec5" >>$time_cost  

        $backupbin/ innobackupex --defaults-file=$file_cnf --no-timestamp --user=$user_name --password=$password --slave-info --databases="$db" --incremental --incremental-basedir=$backdir /rec4 $backdir/rec5 1> $out_log 2>&1  

         break;  

 fi  

 ENDTIME=`日期 "%Y-%m-%d %H:%M:%S"`  

 begin_data=`日期 -d  "$ BEGINTIME" %s`  

 end_data=`date -d  "$ENDTIME" %s`  

 spendtime=`expr $end_data - $begin_data`  

 echo "需要$spendtime 秒用于打包数据目录" >>$time_cost  

 

  配置脚本脚本;

  # crontab -l

  10 2 * * *  /opt/cron/mysqldbbakup.sh

  

  

  恢复:

  #全备恢复:

  innobackupex -- apply-log --redo-only  --defaults-file=$file_cnf --user=$user_name --password=$password    $backdir/full

 

  #增备修改恢复,增量目录,逐个apply-log,到第五天的增量rec4都输出都显示innobackupex: Completed OK!

  innobackupex --apply-log --redo-only --defaults-file =$file_cnf --user=$user_name --password=$password    $backdir/full --incremental-dir=$backdir/rec5

  

bitsCN.com
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板