MySQL的熱備份開源工具XtraBackup 備份並使用ftp腳本上傳備份數據

 首先代表所有使用者,感謝PERCONA的無私貢獻,今天簡單介紹一下 MySQL 免費熱備工具 XtraBackup , 特別是幾個使用時值得注意的地方。

1. 下載XtraBackup並安裝
當前最新的版本是1.6 ,從這裏可以選擇不同OS的相應版本:
http://www.percona.com/downloads/XtraBackup/XtraBackup-1.6/
在LINUX下你可以直接運行:
wget http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-1.6/RPM/rhel5/x86_64/xtrabackup-1.6-245.rhel5.x86_64.rpm
rpm -ivh xtrabackup-1.6-245.rhel5.x86_64.rpm
2. 數據庫中建立備份賬號

 GRANT SELECT, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ‘username'@'localhost' IDENTIFIED BY ‘password';

這個帳戶主要是用來完成備份時一些鎖表等工作;
3. 全量備份與恢復
一般庫不大(< 200G),我們就選擇用全量備份 ;
innobackupex-1.5.1 工具是用PERL包裝過的”xtrabackup“,他不旦可以備份INNODB,還可以備份MYISAM等非事務數據庫;
3.1 全量備份 腳本 並使用ftp 上傳至ftp 備份服務器

 #!/bin/bash

#this script used backup mysql data.edit by colderboy.

user=root
host=localhost
passwd=123456
backlog=/data/log/`date '+%Y%m'`
backup_path=/backup
mycnf=/etc/my.cnf
echo "#################################start backup `date '+%Y-%m-%d %T'`" >> $backlog
innobackupex-1.5.1 --user=$user --password=$passwd --host=$host --port=3306 --tmpdir=/tmp --defaults-file=$mycnf $backup_path 2>$bac
klog
cd $backup_path
backname=`ls`
tar -zcvf ${backname}.tar.gz $backname 2>>$backlog
if [ $? -eq 0 ]
then
    if [ -f ${backname}.tar.gz ]
    then
        /www/scripts/ftp_upload.sh ${backname}.tar.gz && rm -rf ${backname}.tar.gz
    else
        echo "$backname file not exist `date '+%Y-%m-%d %T'`" >> $backlog
    fi
    echo "delete backup file $backname" >>$backlog
    rm -rf $backname
else
    echo "backup failed `date '+%Y-%m-%d %T'`" >> $backlog
fi
echo "###########################################################################" >>$backlog
下面爲ftp 上傳腳本
[root@log scripts]# more ftp_upload.sh 
#/bin/bash
#This script is used to upload a backup file.
#badboy 2011-05-25

if [ $# -ne 1 ]
then
echo " Usage `basename $0` upload filename   upload backup dir    "
exit 1
fi
    host=192.168.0.11
    user=test
    passwd=test
    f_name=$1
    s_dir=/www/backup
    t_dir=test

ftp -n<<!
open $host
user $user $passwd
binary
cd $t_dir
lcd $s_dir
prompt
put $f_name
close
bye

 
### 注意點:
在備份過程中,把INNODB數據文件備份完成後,會鎖住整個庫,並開始複製MYISAM等非事務引擎的數據和.frm;
所以如果你擁有比較多的MYISAM表,鎖庫的時候會持續很長。如果是在主庫上運行,千萬注意。
3.2 全量恢復
3.2.1 應用日誌
## 這個過程主要是產生REDOLOG並將備份期間產生的REDO應用到數據文件中;
## xtrabackup 會啓動一個INNODB進程去做,與你當前在跑的不衝突
innobackupex-1.5.1 --apply-log /backup/
3.2.2 複製數據文件到數據目錄
## 這個過程將恢復好的數據複製到my.cnf中指定的數據目錄中。 這時你需要把原有的實例停掉
innobackupex-1.5.1 --copy-back /backup/
4. 增量備份
增量備份我們只能使用xtrabackup工具;
1)只能用於INNODB
2)my.cnf文件[mysqld]中需要設置 default_table_type=InnoDB
4.1 全量備份(參考 3.1)
4.2 增量備份 (只複製變化過的塊)
#指定備份根目錄
backup_path=/backup/2011-08-04_21-56-08
#指定備份根目錄
incre_path=/backup/daiy
#開始備份
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=$incre_path --incremental-basedir=$backup_path
在/backup/daiy將產生一些.delta數據文件;
另外可以注意xtrabackup_checkpoints這個文件lsn的變化
4.3 恢復 (先恢復全量備份的日誌)
## 用增量備份加入全量數據

 xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/backup/2011-08-04_21-56-08

xtrabackup --target-dir/backup/2011-08-04_21-56-08 --prepare --incremental-dir=/backup/daiy

## 應用日誌

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/backup/2011-08-04_21-56-08

 

 
自己試試.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章