安裝配置Xtrabackup
先看看如何安裝Xtrabackup,最簡單的安裝方式是使用RPM包,不過想使用原始碼方式安裝的話,其安裝方式有點古怪,因為它採用的在MySQL原始碼上打補丁構建的方式安裝的。這裡使用二進位制包的安裝方式,相對比較靈活。
Shell> mkdir /usr/local/xtrabackup
Shell> tar -zxvf xtrabackup-1.6.tar.gz –C /usr/local/xtrabackup
Shell>cd /usr/local/xtrabackup/bin
Shell>ln –s innobackupex-1.5.1 innobackupex

配置環境變數:
Shell>export PATH=$PATH:/usr/local/xtrabackup/bin
希望永久生效的話,可以加到
echo “export PATH=$PATH:/usr/local/xtrabackup/bin” >> /etc/profile
source /etc/profile

修改mysql配置檔案:
Shell> vi /etc/my.cnf
新增或修改:datadir =/usr/local/mysql/var(資料庫目錄)
特別注意:default_table_type = InnoDB(必須改,否則進行增量備份的時候不成功)

經過幾天的測試,文件終於可以與大家分享了。使用Xtrabackup能夠非常快速地備份與恢復mysql資料庫,是mysql dba的首選。Xtrabackup是一個對InnoDB做資料備份的工具,支援線上熱備份(備份時不影響資料讀寫),是商業備份工具InnoDB Hotbackup的一個很好的替代品。 Xtrabackup有兩個主要的工具:xtrabackup、innobackupex xtrabackup只能備份InnoDB和XtraDB兩種資料表,支援線上熱備份,不會鎖表 innobackupex則封裝了xtrabackup,同時可以備份MyISAM資料表,如果你的資料庫裡有innodb和myisam儲存引擎,只能使用innobackupex備份,以下是線上用的簡單指令碼
#!/bin/bash
USER=root
PASSWORD=123456
date > /data/scripts/backup.log
echo “begin backup——————————-” >> /data/scripts/backup.log
find /data/mysql/backups -mtime +7 |xargs rm -rf
/usr/bin/innobackupex –defaults-file=/opt/mysql5/my.cnf –user=$USER –password=$PASSWORD –databases=”test1 test2″ /data/mysql/backups >> /data/scripts/backup.log 2>&1
echo “end backup——————————-” >> /data/scripts/backup.log
date >> /data/scripts/backup.log

mail -s “backup Passport report” “localhost@localhost” < /data/scripts/backup.log
exit 0

以下是恢復指令碼:
#!/bin/bash
USER=root
PASSWORD=123456
/etc/init.d/mysql stop
/usr/bin/innobackupex-1.5.1 –apply-log –defaults-file=/opt/mysql5/my.cnf –user=$USER –password=$PASSWORD /data/mysql/backups/passportdb/`date +%Y-%m-%d`
rm -rf /opt/mysql5/var/test1
rm -rf /opt/mysql5/var/test2
rm -f /opt/mysql5/var/ibdata1
rm -f /opt/mysql5/var/ib_logfile0
rm -f /opt/mysql5/var/ib_logfile1
cd /data/mysql/backups
tar zcvf `date +%Y-%m-%d`.tgz  `date +%Y-%m-%d`
rm -rf `date -d -30day +%Y-%m-%d`.tgz
cp -r /data/mysql/backups/`date +%Y-%m-%d`/ib* /opt/mysql5/var/
cp -r /data/mysql/backups/`date +%Y-%m-%d`/test1 /opt/mysql5/var/
cp -r /data/mysql/backups/`date +%Y-%m-%d`/test2 /opt/mysql5/var/
rm -rf /data/mysql/backups/`date +%Y-%m-%d`/*
chown -R mysql.mysql /opt/mysql5/var/test1
chown -R mysql.mysql /opt/mysql5/var/test2
chown mysql.mysql /opt/mysql5/var/ib*
/etc/init.d/mysql start

恢復的時候執行完/usr/bin/innobackupex-1.5.1 –apply-log後,直接拷貝就可以了,不用使用/usr/bin/innobackupex-1.5.1 –copy-back命令。如果使用/usr/bin/innobackupex-1.5.1 –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)

網上有好多文章恢復使用
/usr/bin/innobackupex-1.5.1 –apply-log 然後
/usr/bin/innobackupex-1.5.1 –copy-back,難道他們恢復的目錄都是空目錄,還是人云亦云。