【問題背景】
1、 針對MySQL檔案比較大,需要壓縮的資料庫。 如500G資料庫,xtrabackup備份後檔案為500G,備份完成後再壓縮打包,相當于檔案讀寫3次。
2、 對于磁盤IO不好的從庫,整個過程會持續好幾個小時,有時把IO直接搞到100%, 導緻從庫延時很大。
3、 xtrabackup的xbstream流備份,直接備份後,通過管道直接壓縮,這樣把原約3次的IO,減少為一次,整個使用時間也變短了。
【适合使用場景】
1、 資料庫檔案比較大,要壓縮的庫;導緻整個備份時間長,且要求從庫延遲不能太大的庫。
【線上使用示例】
主站有一組機器已測試通過,簡單對比:
1、 xtrabackup全量備份,不壓縮,直接tar包170G, 用時80分鐘; xtrabackup流備份+libz2壓縮,檔案大小46G, 用時40分鐘。
2、 備份過程中兩個的IO util對比:
正常備份,不壓縮:

Xbstream備份+壓縮
【基本使用原理】
1 備份步驟
由于xbstream+壓縮備份後,無備份目錄,xtrabackup可指定--extra-lsndir目錄,此目錄隻存放此次備份的xtrabackup_checkpoints檔案;後面的增量備份時,--incremental-basedir就指向前一日的extra-lsndir目錄便可。
1) 全量備份指令:
innobackupex --user=dump --password=xxx --host=127.0.0.1 --slave-info --stream=xbstream --extra-lsndir="$lsndir" $baseDir 2>>"$backupLog" | lbzip2 -kv -n 10 > "$backup_file" 2>>"$backupLog"
2) 增量備份指令:
innobackupex --user=dump --password=xxx --host=127.0.0.1 --slave-info --stream=xbstream --extra-lsndir="$lsndir" --incremental --incremental-basedir="$last_lsndir" $baseDir 2>>"$backupLog" | lbzip2 -kv -n 10 > "$backup_file" 2>>"$backupLog"
2、 還原步驟
備份後生成的為壓縮了的檔案,是以要解壓,再用xbstream打開流體檔案(較之原來還原,多了此步驟)。
1) 解壓壓縮的檔案:lbzip2 -dkv -n 10 2013-07-14_bak_full.bz2
2) 解壓液體檔案為目錄: xbstream -x < 2013-07-14_bak_full -C /work/bak/2013-07-14_full/