XtraBackup官方文件讀書筆記和測試

hotdog04發表於2014-08-16

1、許可權:
mysql> CREATE USER ’bkpuser’@’localhost’ IDENTIFIED BY ’s3cret’;
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ’bkpuser’@’localhost’;
mysql> FLUSH PRIVILEGES;

2、全備使用自己定義的目錄儲存:
innobackupex --user=root --password=root /data2/backup/`date +%Y%m%d`  --no-timestamp

3、--use-memory 預設值100M,The preparing process can be speed up by using more memory。
innobackupex --apply-log --use-memory=4G /data2/backup/20140717

4、恢復:
innobackupex --copy-back /data2/backup/20140717

修改資料庫目錄許可權就可以啟動了,然後根據記錄的pos進行恢復

5、增量備份:
innobackupex  --user=root --password=root --incremental /data2/backup/`date +%Y%m%d_%H%M` --incremental-basedir=/data2/backup/20140717/  --no-timestamp
增量繼續:
innobackupex   --user=root --password=root --incremental /data2/backup/`date +%Y%m%d_%H%M` --incremental-basedir=/data2/backup/20140717_1808/  --no-timestamp

對比三個備份的lsn:
[1]、
backup_type = full-prepared
from_lsn = 0
to_lsn = 29283578176
last_lsn = 29283578176
[2]、
backup_type = incremental
from_lsn = 29283578176
to_lsn = 30226292384
last_lsn = 30226292384
[3]、
backup_type = incremental
from_lsn = 30226292384
to_lsn = 30227181447
last_lsn = 30227181447
它們的lsn相接:其實做增量也就需要提供lsn就行了,如下:
增量繼續:
innobackupex   --user=root --password=root --incremental /data2/backup/`date +%Y%m%d_%H%M` --incremental-lsn=30227181447  --no-timestamp
lsn如下:
[4]、
backup_type = incremental
from_lsn = 30227181447
to_lsn = 30227181447
last_lsn = 30227181447

【下面的測試內容是新生成的內容如下】:
[root@host190 backup]# cat 20140718/xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 30234555660
last_lsn = 30234555660

[root@host190 backup]# cat 20140718_1422/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 30234555660
to_lsn = 30234560374
last_lsn = 30234560374

[root@host190 backup]# cat 20140718_1424/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 30234560374
to_lsn = 30234564354
last_lsn = 30234564354

6、增量恢復:
 應用增量:
[root@host190 backup]# innobackupex --apply-log --redo-only 20140718
。。。 。。。
InnoDB: Shutdown completed; log sequence number 30234555660
140718 14:33:00  innobackupex: completed OK!

[root@host190 backup]#innobackupex --apply-log --redo-only 20140718 --incremental-dir=/data2/backup/20140718_1422
。。。 。。。
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 30234560374
。。。 。。。

[root@host190 backup]# innobackupex --apply-log 20140718 --incremental-dir=/data2/backup/20140718_1424
(注意差異跟上面的少了--redo-only,增量恢復的時候最後一個不要--redo-only  )
。。。 。。。
InnoDB: Shutdown completed; log sequence number 30234570033(注意跟備份的lsn不同了。)
。。。 。。。
(為什麼增量恢復有時需要--redo-only 有時不需要呢?
     First, only the committed transactions must be replayed on each backup. This will merge the base full
backup with the incremental ones.
     Then, the uncommitted transaction must be rolled back in order to have a ready-to-use backup.
If you replay the committed transactions and rollback the uncommitted ones on the base backup, you will not be able
to add the incremental ones. If you do this on an incremental one, you won’t be able to add data from that moment
and the remaining increments.
     Note: --redo-only should be used when merging all incrementals except the last one. That’s why the previous
line doesn’t contain the --redo-only option. Even if the --redo-only was used on the last step, backup would
still be consistent but in that case server would perform the rollback phase.

rollback:
Once you merge the base with all the increments, you can prepare it to roll back the uncommitted transactions
[root@host190 20140718]# innobackupex --apply-log  /data2/backup/20140718
。。。 。。。
InnoDB: Shutdown completed; log sequence number 30234600375
140718 14:51:27  innobackupex: completed OK!

拷回:
[root@host190 20140718]# innobackupex --copy-back  /data2/backup/20140718
[root@host190 mysql]chown mysql.mysql -R /data2/mysql
[root@host190 mysql]/etc/init.d/mysql start
[root@host190 mysql]# cat xtrabackup_binlog_pos_innodb
mysql-bin.000005        10451
(假設日誌檔案還在)
[root@host190 mysql]# mysqlbinlog  --start-position=10451  /tmp/mysql-bin.000005 | mysql -proot
檢視資料已經完整恢復了。


7、壓縮備份:
全備:
innobackupex --user=root --password=root /data2/backup/`date +%Y%m%d`  --no-timestamp
增量:
innobackupex --user=root --password=root   --incremental --incremental-lsn=30234629041 --stream=xbstream  /data2/backup/ > `date +%Y%m%d_%H%M`.xbstream
目錄下多兩個檔案:
[root@host190 backup]# ll
 20140718
20140718_1624.xbstream
解壓(如果直接解壓預設到安裝目錄下):
[root@host190 backup]# mkdir 20140718_1624
[root@host190 backup]# xbstream  -x < 20140718_1624.xbstream  -C 20140718_1624
遠端增量(測試沒有成功):
innobackupex --incremental --incremental-lsn=LSN-number --stream=xbstream ./ | /
ssh user@hostname " cat - | xbstream -x -C > /backup-dir/"

8、部分備份:
備份指定的popo下的zhaogongpo表(--include):
[root@host190 backup]#innobackupex --user=root --password=root --include='popo.zhaogongpo' /data2/backup
or
[root@host190 backup]#echo "popo.zhaogongpo" > /tmp/tables.txt
[root@host190 backup]#innobackupex --user=root --password=root --tables-file=/tmp/tables.txt /data2/backup

恢復:
innobackupex --apply-log --export /data2/backup/2014-07-18_16-50-27
【1】
新庫恢復:
mysql_install_db --defaults-file=xxxx
安裝後,直接複製備份目錄的表空間檔案到新庫目錄,並用備份目錄的共享表空間檔案覆蓋新庫的表空間檔案,
用備份目錄的innodb日誌檔案,覆蓋新庫的innodb檔案。
然後登陸資料庫,檢視錶是否恢復成功。
【2】
原庫恢復(5.6,其它可參考官方文件):
如果表已經不存在,請重建
alter  table popo.zhaogongpo discard tablespace;
複製備份目錄的idb和cfg檔案到popo下,修改chown所有者。
alter table popo.zhaogongpo  import tablespace;
ok


備份指定表和資料庫(--databases):
(Currently in Percona XtraBackup the –databases option has no effect for InnoDB files for both local and
streaming backups, i.e. all InnoDB files are always backed up. Currently, only .frm and non-InnoDB tables are limited
by that option. 也就是說對innodb這個引數不適用,在備份myisam的時候有用)
innobackupex --user=root --password=root  --databases="popo.zhaogongpo new" /data2/backup

 

9、壓縮備份:
從2.1後,引入了壓縮備份(壓縮過程忽略次級索引,影響就是還原過程比較慢,因為需要重建索引):
innobackupex --user=root --password=root --compact /data/backups

cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 2888984349
last_lsn = 2888984349
compact = 1(2.1以後的版本多出一行,如果沒有使用壓縮=0)

還原的時候需要新增 --rebuild-indexes
innobackupex --apply-log --rebuild-indexes /data/backups/2013-02-01_10-29-48
過程中會出現重建索引資訊。
每次使用增量的時候都要加上該引數,--rebuild-threads控制重建的執行緒,可以加快重建過程.
預設使用一個執行緒,觀察輸出日誌可以每行行開頭記錄的就是執行緒號,預設情況是[1]

innobackupex --copy-back /data/backups/2013-02-01_10-29-48

10、壓縮備份:
[root@host190 backup]# innobackupex --user=root -password=root --compress --stream=xbstream /data2/backup/> /data2/backup/backup.xbstream
[root@host190 backup]# innobackupex --user=root -password=root --stream=xbstream /data2/backup/> /data2/backup/backup_nocompress.xbstream
[root@host190 backup]# du -sh *
1.1G    backup_nocomprocess.xbstream
166M    backup.xbstream


解壓:
[root@host190 backup]# xbstream -x < backup.xbstream  -C /data2/backup/compress
tar:
[root@host190 backup]# innobackupex -user=root --password=root --stream=tar ./ | gzip - > gzip.tar.gz
(xbstream+compress的壓縮比比gzip要低,並且解壓後的檔案是*.qp需要需要使用qppress解壓。 個人感覺還是不適用compress,直接gzip壓縮挺好)
(上面的模式都可以直接備份到遠端伺服器,具體見官方文件)

for bf in `find . -iname "*\.qp"`; do /tmp/qpress -d $bf $(dirname $bf) && rm $bf -f; done(解壓qp檔案)
2.1以上版本可以:
innobackupex --decompress /data/backup/2013-08-01_11-24-04/

恢復:
[root@host190 backup]# innobackupex --apply-log ./2014-07-19_18-24-25

 

10、主從環境下的備份:

--slave-info  
--safe-slave-backup

11、備份加速:

--parallel
--compress-threads
--rsync
當本地備份或者流備份(xbstream引數)的時候,--parallel引數可以多檔案併發的拷貝。
當使用獨立表空間或者有多個共享表空間的時候可以起作用。
innobackupex --parallel=4 /path/to/backup

使用xbstram備份的死活可以使用--compress-threads提速,它指定了並行壓縮的執行緒數,預設值是1.
innobackupex --stream=xbstream --compress --compress-threads=4 ./ > backup.xbstream

--rsync用來加速備份,最小化flush tables with read lock的阻塞時間。當使用這個引數的時候,
innobackupex會使用rsync來拷貝非innodb的檔案,代替原來大量的獨立的cp操作(每個檔案一個cp動作)。
這可以大大的提高有大量表和資料庫的伺服器的備份速度。 innobackupex會呼叫rsync兩次,1、執行
flush tables with read lock之前;2、減少讀鎖被持有的時間內。因為第一呼叫在重新整理讀鎖之前,所以
它僅僅同步那些非事務的資料的變化
(它不能和--remote-host、--stream一起使用)

11、備份安全:
--throttle
該選項限制了每秒io操作次數
具體單位未知,限制到10的時候大約讀寫各12M,tps3000
[root@host190 backup]#  innobackupex -user=root --password=root --throttle=10  /data2/backup
看官方文件

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20625855/viewspace-1252299/,如需轉載,請註明出處,否則將追究法律責任。

相關文章