程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql開源備份工具Xtrabackup備份部署

Mysql開源備份工具Xtrabackup備份部署

編輯:MySQL綜合教程

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 --incremental-basedir=$backdir/full $backdir/rec0 1> $out_log 2>&1           break;   elif [ ! -d "$backdir/rec1" ];then           echo "#####start 1 incremental backup at $BEGINTIME to directory 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" ];then           echo "#####start 2 incremental backup at $BEGINTIME to directory 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" ];then           echo "#####start 3 incremental backup at $BEGINTIME to directory 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" ];then           echo "#####start 4 incremental backup at $BEGINTIME to directory 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" ];then           echo "#####start 5 incremental backup at $BEGINTIME to directory 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=`date +"%Y-%m-%d %H:%M:%S"`    begin_data=`date -d  "$BEGINTIME" +%s`    end_data=`date -d  "$ENDTIME" +%s`    spendtime=`expr $end_data - $begin_data`    echo "it takes $spendtime sec for packing the data directory" >>$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   

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved