mysqldump排Xtrabackup是一個對InnoDB做資料備份的工具,支援線上熱備份(備份時不影響資料讀寫),是商業備份工具InnoDB Hotbackup的一個很好的替代品。
Xtrabackup中包含兩個工具:
* xtrabackup - 用於熱備份innodb, xtradb表的工具,不能備份其他表。
* innobackupex - 對xtrabackup封裝的perl指令碼,提供了myisam表備份的能力。
Xtrabackup可以做什麼
* 線上(熱)備份整個庫的InnoDB, XtraDB表
* 在xtrabackup的上一次整庫備份基礎上做增量備份(innodb only)
* 以流的形式產生備份,可以直接儲存到遠程機器上(本機硬碟空間不足時很有用)
Xtrabackup如何工作的
* xtrabackup - 具體原理有待研究。。。
* innobackupex整庫備份
1. 調用xtrabackup對innodb資料表空間檔案(這一瞬間的映像Time1)備份,而在這個innodb表備份期間資料庫是不加鎖的,外部可以繼續往庫裡增減資料(這才能叫熱備份)。而在Time1和Time2這兩個時間點之間的改動由一個線程不斷地掃innodb log獲得(ChangeSet1)。
2. 鎖所有庫。
3. 以直接拷貝的方式備份frm,MYD,MYI,MRG,TRG,TRN,opt格式的檔案。
4. 步驟3中的資料備份完畢時(Time2),停止掃innodb log的線程,把ChangeSet1的資料拷貝到備份中。
5. 解鎖所有庫。
6. 終止掛起,備份完畢。
注意要點
* 根據innobackupex的原理可知它不是真正的熱備份,MyISAM表越少越小就越有利。要利用Xtrabackup的好處就盡量用innodb表。
* 還原備份前關閉mysql服務;還原備份後檢查資料檔案許可權是否正確。
* 效能:備份一個資料目錄總大小5.6G,其中ibdata 2G,總時間4分鐘,鎖表時間2.5分鐘。如果用mysqldump做這個庫的備份鎖表時間是5-8倍。
安裝
tar zxf xtrabackup-0.7.tar.gz
cd xtrabackup-0.7
./configure
make
進行到這裡時,千萬別慣性使用make install,那樣就會接著安裝MySQL了,正確方法是接著:
cd innobase/xtrabackup/
make
make install
然後,就會在你的/usr/bin目錄裡安裝上兩個工具:xtrabackup,innobackupex-1.5.1
# 制定備份多個資料庫
innobackupex-1.5.1 --user=root --databases="innodb innodb2" /bak/
# 壓縮備份(不加--databases,預設全部資料庫)
innobackupex-1.5.1 --user=root --stream=tar /bak/ | gzip > /bak/bak.tar.gz
(解壓縮必須加i。innobackupex: You must use -i (--ignore-zeros) option for extraction of the tar stream.)
# 遠程備份到192.168.1.200的/bak目錄下。
innobackupex-1.5.1 --user=root --stream=tar /bak | ssh root@192.168.1.200 cat ">" /bak/backup.tar
恢複
# innobackupex-1.5.1 --apply-log /bak/2009_0929/
# innobackupex-1.5.1 --copy-back /bak/2009_0929/
# chown -R mysql:mysql /usr/local/mysql/data/*
# mysqladmin -uroot -p123456 shutdown
# mysqld_safe --user=mysql &
除某幾張表不匯出,其餘都匯出。