xtrabackup 使用說明
轉載自:https://www.cnblogs.com/zhoujinyi/p/5893333.html
背景:
關於物理備份工具xtrabackup的一些說明可以先看之前寫過的文章說明:xtrabackup 安裝使用。現在xtrabackup版本升級到了2.4.4,相比之前的2.1有了比較大的變化:innobackupex
功能全部集成到 xtrabackup
里面,只有一個 binary,另外為了使用上的兼容考慮,innobackupex
作為 xtrabackup
的一個軟鏈,即xtrabackup現在支持非Innodb表備份,並且Innobackupex在下一版本中移除,建議通過xtrabackup替換innobackupex。還有其他的一些新特性,更多的說明可以看xtrabackup新版詳細說明,原理說明可以看Percona XtraBackup 備份原理說明【轉】,本篇文章將介紹xtrabackup的使用方法。
innobackupex參數說明(innobackupex --help ):
1)備份:
innobackupex [--compress] [--compress-threads=NUMBER-OF-THREADS] [--compress-chunk-size=CHUNK-SIZE] [--encrypt=ENCRYPTION-ALGORITHM] [--encrypt-threads=NUMBER-OF-THREADS] [--encrypt-chunk-size=CHUNK-SIZE] [--encrypt-key=LITERAL-ENCRYPTION-KEY] | [--encryption-key-file=MY.KEY] [--include=REGEXP] [--user=NAME] [--password=WORD] [--port=PORT] [--socket=SOCKET] [--no-timestamp] [--ibbackup=IBBACKUP-BINARY] [--slave-info] [--galera-info] [--stream=tar|xbstream] [--defaults-file=MY.CNF] [--defaults-group=GROUP-NAME] [--databases=LIST] [--no-lock] [--tmpdir=DIRECTORY] [--tables-file=FILE] [--history=NAME] [--incremental] [--incremental-basedir] [--incremental-dir] [--incremental-force-scan] [--incremental-lsn] [--incremental-history-name=NAME] [--incremental-history-uuid=UUID] [--close-files] [--compact] BACKUP-ROOT-DIR
參數說明:
--compress:該選項表示壓縮innodb數據文件的備份。 --compress-threads:該選項表示並行壓縮worker線程的數量。 --compress-chunk-size:該選項表示每個壓縮線程worker buffer的大小,單位是字節,默認是64K。 --encrypt:該選項表示通過ENCRYPTION_ALGORITHM的算法加密innodb數據文件的備份,目前支持的算法有ASE128,AES192,AES256。 --encrypt-threads:該選項表示並行加密的worker線程數量。 --encrypt-chunk-size:該選項表示每個加密線程worker buffer的大小,單位是字節,默認是64K。 --encrypt-key:該選項使用合適長度加密key,因為會記錄到命令行,所以不推薦使用。 --encryption-key-file:該選項表示文件必須是一個簡單二進制或者文本文件,加密key可通過以下命令行命令生成:openssl rand -base64 24。 --include:該選項表示使用正則表達式匹配表的名字[db.tb],要求為其指定匹配要備份的表的完整名稱,即databasename.tablename。 --user:該選項表示備份賬號。 --password:該選項表示備份的密碼。 --port:該選項表示備份數據庫的端口。 --host:該選項表示備份數據庫的地址。 --databases:該選項接受的參數為數據名,如果要指定多個數據庫,彼此間需要以空格隔開;如:"xtra_test dba_test",同時,在指定某數據庫時,也可以只指定其中的某張表。如:"mydatabase.mytable"。該選項對innodb引擎表無效,還是會備份所有innodb表。此外,此選項也可以接受一個文件為參數,文件中每一行為一個要備份的對象。 --tables-file:該選項表示指定含有表列表的文件,格式為database.table,該選項直接傳給--tables-file。 --socket:該選項表示mysql.sock所在位置,以便備份進程登錄mysql。 --no-timestamp:該選項可以表示不要創建一個時間戳目錄來存儲備份,指定到自己想要的備份文件夾。 --ibbackup:該選項指定了使用哪個xtrabackup二進制程序。IBBACKUP-BINARY是運行percona xtrabackup的命令。這個選項適用於xtrbackup二進制不在你是搜索和工作目錄,如果指定了該選項,innoabackupex自動決定用的二進制程序。 --slave-info:該選項表示對slave進行備份的時候使用,打印出master的名字和binlog pos,同樣將這些信息以change master的命令寫入xtrabackup_slave_info文件。可以通過基於這份備份啟動一個從庫。 --safe-slave-backup:該選項表示為保證一致性復制狀態,這個選項停止SQL線程並且等到show status中的slave_open_temp_tables為0的時候開始備份,如果沒有打開臨時表,bakcup會立刻開始,否則SQL線程啟動或者關閉知道沒有打開的臨時表。如果slave_open_temp_tables在--safe-slave-backup-timeount(默認300秒)秒之后不為0,從庫sql線程會在備份完成的時候重啟。 --rsync:該選項表示通過rsync工具優化本地傳輸,當指定這個選項,innobackupex使用rsync拷貝非Innodb文件而替換cp,當有很多DB和表的時候會快很多,不能--stream一起使用。 --kill-long-queries-timeout:該選項表示從開始執行FLUSH TABLES WITH READ LOCK到kill掉阻塞它的這些查詢之間等待的秒數。默認值為0,不會kill任何查詢,使用這個選項xtrabackup需要有Process和super權限。 --kill-long-query-type:該選項表示kill的類型,默認是all,可選select。 --ftwrl-wait-threshold:該選項表示檢測到長查詢,單位是秒,表示長查詢的閾值。 --ftwrl-wait-query-type:該選項表示獲得全局鎖之前允許那種查詢完成,默認是ALL,可選update。 --galera-info:該選項表示生成了包含創建備份時候本地節點狀態的文件xtrabackup_galera_info文件,該選項只適用於備份PXC。 --stream:該選項表示流式備份的格式,backup完成之后以指定格式到STDOUT,目前只支持tar和xbstream。 --defaults-file:該選項指定了從哪個文件讀取MySQL配置,必須放在命令行第一個選項的位置。 --defaults-extra-file:該選項指定了在標准defaults-file之前從哪個額外的文件讀取MySQL配置,必須在命令行的第一個選項的位置。一般用於存備份用戶的用戶名和密碼的配置文件。 ----defaults-group:該選項表示從配置文件讀取的組,innobakcupex多個實例部署時使用。 --no-lock:該選項表示關閉FTWRL的表鎖,只有在所有表都是Innodb表並且不關心backup的binlog pos點,如果有任何DDL語句正在執行或者非InnoDB正在更新時(包括mysql庫下的表),都不應該使用這個選項,后果是導致備份數據不一致,如果考慮備份因為獲得鎖失敗,可以考慮--safe-slave-backup立刻停止復制線程。 --tmpdir:該選項表示指定--stream的時候,指定臨時文件存在哪里,在streaming和拷貝到遠程server之前,事務日志首先存在臨時文件里。在 使用參數stream=tar備份的時候,你的xtrabackup_logfile可能會臨時放在/tmp目錄下,如果你備份的時候並發寫入較大的話 xtrabackup_logfile可能會很大(5G+),很可能會撐滿你的/tmp目錄,可以通過參數--tmpdir指定目錄來解決這個問題。 --history:該選項表示percona server 的備份歷史記錄在percona_schema.xtrabackup_history表。 --incremental:該選項表示創建一個增量備份,需要指定--incremental-basedir。 --incremental-basedir:該選項表示接受了一個字符串參數指定含有full backup的目錄為增量備份的base目錄,與--incremental同時使用。 --incremental-dir:該選項表示增量備份的目錄。 --incremental-force-scan:該選項表示創建一份增量備份時,強制掃描所有增量備份中的數據頁。 --incremental-lsn:該選項表示指定增量備份的LSN,與--incremental選項一起使用。 --incremental-history-name:該選項表示存儲在PERCONA_SCHEMA.xtrabackup_history基於增量備份的歷史記錄的名字。Percona Xtrabackup搜索歷史表查找最近(innodb_to_lsn)成功備份並且將to_lsn值作為增量備份啟動出事lsn.與innobackupex--incremental-history-uuid互斥。如果沒有檢測到有效的lsn,xtrabackup會返回error。 --incremental-history-uuid:該選項表示存儲在percona_schema.xtrabackup_history基於增量備份的特定歷史記錄的UUID。 --close-files:該選項表示關閉不再訪問的文件句柄,當xtrabackup打開表空間通常並不關閉文件句柄目的是正確的處理DDL操作。如果表空間數量巨大,這是一種可以關閉不再訪問的文件句柄的方法。使用該選項有風險,會有產生不一致備份的可能。 --compact:該選項表示創建一份沒有輔助索引的緊湊的備份。 --throttle:該選項表示每秒IO操作的次數,只作用於bakcup階段有效。apply-log和--copy-back不生效不要一起用。
2)prepare:
innobackupex --apply-log [--use-memory=B] [--defaults-file=MY.CNF] [--export] [--redo-only] [--ibbackup=IBBACKUP-BINARY] BACKUP-DIR
參數說明:
--apply-log:該選項表示同xtrabackup的--prepare參數,一般情況下,在備份完成后,數據尚且不能用於恢復操作,因為備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據 文件仍處理不一致狀態。--apply-log的作用是通過回滾未提交的事務及同步已經提交的事務至數據文件使數據文件處於一致性狀態。 --use-memory:該選項表示和--apply-log選項一起使用,prepare 備份的時候,xtrabackup做crash recovery分配的內存大小,單位字節。也可(1MB,1M,1G,1GB),推薦1G。 --defaults-file:該選項指定了從哪個文件讀取MySQL配置,必須放在命令行第一個選項的位置。 --export:這個選項表示開啟可導出單獨的表之后再導入其他Mysql中。 --redo-only:這個選項在prepare base full backup,往其中merge增量備份(但不包括最后一個)時候使用。
3)解壓解密:
innobackupex [--decompress] [--decrypt=ENCRYPTION-ALGORITHM] [--encrypt-key=LITERAL-ENCRYPTION-KEY] | [--encryption-key-file=MY.KEY] [--parallel=NUMBER-OF-FORKS] BACKUP-DIR
參數說明:
--decompress:該選項表示解壓--compress選項壓縮的文件。 --parallel:該選項表示允許多個文件同時解壓。為了解壓,qpress工具必須有安裝並且訪問這個文件的權限。這個進程將在同一個位置移除原來的壓縮/加密文件。 --decrypt:該選項表示解密通過--encrypt選項加密的.xbcrypt文件。
4)還原:
innobackupex --copy-back [--defaults-file=MY.CNF] [--defaults-group=GROUP-NAME] BACKUP-DIR innobackupex --move-back [--defaults-file=MY.CNF] [--defaults-group=GROUP-NAME] BACKUP-DIR
參數說明:
--copy-back:做數據恢復時將備份數據文件拷貝到MySQL服務器的datadir。 --move-back:這個選項與--copy-back相似,唯一的區別是它不拷貝文件,而是移動文件到目的地。這個選項移除backup文件,用時候必須小心。使用場景:沒有足夠的磁盤空間同事保留數據文件和Backup副本 注意: 1.datadir目錄必須為空。除非指定innobackupex --force-non-empty-directorires選項指定,否則--copy-backup選項不會覆蓋 2.在restore之前,必須shutdown MySQL實例,你不能將一個運行中的實例restore到datadir目錄中 3.由於文件屬性會被保留,大部分情況下你需要在啟動實例之前將文件的屬主改為mysql,這些文件將屬於創建備份的用戶 chown -R my5711:mysql /data1/dbrestore 以上需要在用戶調用Innobackupex之前完成
--force-non-empty-directories:指定該參數時候,使得innobackupex --copy-back或--move-back選項轉移文件到非空目錄,已存在的文件不會被覆蓋。如果--copy-back和--move-back文件需要從備份目錄拷貝一個在datadir已經存在的文件,會報錯失敗。
5)應用場景:
①.普通全量備份、還原:(庫:dba_test、xtra_test)
#備份所有數據庫:備份目錄里生成日期命名的文件夾
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 /home/zhoujy/xtrabackup/
#還原
1.先prepare,利用--apply-log的作用是通過回滾未提交的事務及同步已經提交的事務至數據文件使數據文件處於一致性狀態
innobackupex --apply-log /home/zhoujy/xtrabackup/2016-09-23_10-53-51/
2.copy:需要數據目錄為空
innobackupex --defaults-file=/etc/mysql/my.cnf --copy-back /home/zhoujy/xtrabackup/2016-09-23_10-53-51/
3.改權限
++++++++++++++++++
#備份所有數據庫:指定備份目錄
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp /home/zhoujy/xtrabackup/
#還原同上
++++++++++++++++++
#備份指定數據庫名,多個數據庫用空格分開
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp --databases="dba_test xtra_test" /home/zhoujy/xtrabackup/
#還原
1.先prepare,利用--apply-log的作用是通過回滾未提交的事務及同步已經提交的事務至數據文件使數據文件處於一致性狀態
innobackupex --apply-log /home/zhoujy/xtrabackup/
2.copy,因為是部分備份,不能直接用--copy-back,只能手動來復制需要的庫,也要復制ibdata(數據字典)
cp -r dba_test/ /var/lib/mysql/
cp -r xtrabackup/dba_test/ /var/lib/mysql
3.改權限
++++++++++++++++++
#備份指定表
備份不同庫下的不同表
1:innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp --databases="dba_test.tb1 xtra_test.M" /home/zhoujy/xtrabackup/
備份一個庫下面的表,支持正則,如:--include='^mydatabase[.]mytable'
2:innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp --include='xtra_test.I' /home/zhoujy/xtrabackup/
備份指定文件里的表,文件里每行的格式是:dbname.tbname
3:innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp --tables-file=/tmp/tbname.txt /home/zhoujy/xtrabackup/
#還原
同指定數據庫還原一樣,需要還原ibdata。注意,還原的時候可以這樣還原:
innobackupex --apply-log --export xtrabackup/
生成如下幾個文件:
-rw-r--r-- 1 root root 425 9月 23 17:16 I.cfg
-rw-r----- 1 root root 16K 9月 23 17:16 I.exp
-rw-r----- 1 root root 8.4K 9月 23 17:15 I.frm
-rw-r----- 1 root root 96K 9月 23 17:15 I.ibd
然后:
alter table I discard tablespace;
將I.exp和I文件傳到目標機目標目錄中執行:
alter table I import tablespace;
②.普通增量備份、還原
#全量備份,這里舉例單個表,也可以是指定幾個庫,甚至所有庫 innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp --databases="xtra_test.I" /home/zhoujy/xtrabackup/ #增量備份1 innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp --databases="xtra_test.I" --incremental-basedir=/home/zhoujy/xtrabackup/ --incremental /home/zhoujy/increment_data/ #增量備份2 innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp --databases="xtra_test.I" --incremental-basedir=/home/zhoujy/increment_data/ --incremental /home/zhoujy/increment_data1/ ####信息#### 通過上面三個目錄里的xtrabackup_checkpoints文件,可以看出是哪種備份類型,全量(full-backuped)還是增量(incremental)。並且全量到增量的from_lsn和last_lsn是一一對應的。 在第2次做增量備份的時候 --incremental-basedir 指向全量備份,則第一次增量備份中的數據會被第2次包含,只需要還原一次就可以恢復,現在則需要還原2次增量備份。 ########## #還原 1.先prepare全備 innobackupex --incremental --apply-log --redo-only /home/zhoujy/xtrabackup 2.再prepare第一個增量 innobackupex --incremental --apply-log --redo-only /home/zhoujy/xtrabackup/ --user-memory=1G --incremental-dir=/home/zhoujy/increment_data/ 3.然后prepare最后一個增量 innobackupex --incremental --apply-log --redo-only /home/zhoujy/xtrabackup/ --user-memory=1G --incremental-dir=/home/zhoujy/increment_data1/ 通過上面額可以看到全量備份里xtrabackup_checkpoints文件的to_lsn是最新的lsn。 4.最后再prepare全量備份 innobackupex --apply-log /home/zhoujy/xtrabackup/
5.copy 因為是部分備份,不是所有庫備份,所以和上面介紹的一樣,先手動復制需要的文件再修改權限即可恢復數據。
③.打包壓縮備份,注意:--compress不能和--stream=tar一起使用
#壓縮備份 innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --compress --compress-threads=8 --no-timestamp --databases="xtra_test.I" /home/zhoujy/xtrabackup/ #在perpare之前需要decompress,需要安裝qpress innobackupex --decompress /home/zhoujy/xtrabackup/ #prepare innobackupex --apply-log /home/zhoujy/xtrabackup/ 最后還原方法和上面一致 #打包備份 innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --stream=tar --no-timestamp --databases="xtra_test" /home/zhoujy/xtrabackup/ 1>/home/zhoujy/xtrabackup/xtra_test.tar #解包 tar ixvf xtra_test.tar 最后還原方法和上面一致 #第三方壓縮備份: innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --compress --compress-threads=8 --parallel=4 --stream=tar --no-timestamp --databases="xtra_test" /home/zhoujy/xtrabackup/ | gzip >/home/zhoujy/xtrabackup/xtra_test.tar.gz #prepare之前先解壓 tar izxvf xtra_test.tar.gz #prepare innobackupex --apply-log /home/zhoujy/xtrabackup/
④.加密備份
說明:在參數說明里看到加密備份的幾個參數:--encrypt、--encrypt-threads、--encrypt-key、--encryption-key-file。其中encrypt-key和encryption-key-file不能一起使用,encryption-key需要把加密的密碼寫到命令行,不推薦。 #加密備份: 先生成key: openssl rand -base64 24 把Key寫到文件: echo -n "Ue2Wp6dIDWszpI76HQ1u57exyjAdHpRO" > keyfile 最后備份: innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --compress --compress-threads=3 --no-timestamp --encrypt=AES256 --encrypt-key-file=/home/zhoujy/keyfile ----encrypt-threads=3 --parallel=5 /home/zhoujy/xtrabackup2/ #解密: for i in `find . -iname "*\.xbcrypt"`; do xbcrypt -d --encrypt-key-file=/home/zhoujy/keyfile --encrypt-algo=AES256 < $i > $(dirname $i)/$(basename $i .xbcrypt) && rm $i; done #解壓: innobackupex --decompress /home/zhoujy/xtrabackup2/ #prepare: innobackupex --apply-log /home/zhoujy/xtrabackup2/ #還原copy innobackupex --defaults-file=/etc/mysql/my.cnf --move-back /home/zhoujy/xtrabackup2/
⑤.復制環境中的備份:一般生產環境大部分都是主從模式,主提供服務,從提供備份。
#備份 5個線程備份2個數據庫,並且文件xtrabackup_slave_info記錄GTID和change的信息
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp --slave-info --safe-slave-backup --parallel=5 --databases='xtra_test dba_test' /home/zhoujy/xtrabackup/
#還原
還原方法同上
總結:關於更多的innobackupex的備份可以看官方文檔和xtrabackup 安裝使用,參數可以參考本文上面的介紹說明,通過上面的幾個說明看到innobackupex可以實現:全量、增量、壓縮、打包、加密備份,並且支持多線程的備份,並且也提供了長查詢超過閥值自動kill的方法,大大提升備份效率。
xtrabackup 參數說明(xtrabackup --help ):
--apply-log-only:prepare備份的時候只執行redo階段,用於增量備份。 --backup:創建備份並且放入--target-dir目錄中 --close-files:不保持文件打開狀態,xtrabackup打開表空間的時候通常不會關閉文件句柄,目的是為了正確處理DDL操作。如果表空間數量非常巨大並且不適合任何限制,一旦文件不在被訪問的時候這個選項可以關閉文件句柄.打開這個選項會產生不一致的備份。 --compact:創建一份沒有輔助索引的緊湊備份 --compress:壓縮所有輸出數據,包括事務日志文件和元數據文件,通過指定的壓縮算法,目前唯一支持的算法是quicklz.結果文件是qpress歸檔格式,每個xtrabackup創建的*.qp文件都可以通過qpress程序提取或者解壓縮 --compress-chunk-size=#:壓縮線程工作buffer的字節大小,默認是64K --compress-threads=#:xtrabackup進行並行數據壓縮時的worker線程的數量,該選項默認值是1,並行壓縮('compress-threads')可以和並行文件拷貝('parallel')一起使用。例如:'--parallel=4 --compress --compress-threads=2'會創建4個IO線程讀取數據並通過管道傳送給2個壓縮線程。 --create-ib-logfile:這個選項目前還沒有實現,目前創建Innodb事務日志,你還是需要prepare兩次。 --datadir=DIRECTORY:backup的源目錄,mysql實例的數據目錄。從my.cnf中讀取,或者命令行指定。 --defaults-extra-file=[MY.CNF]:在global files文件之后讀取,必須在命令行的第一選項位置指定。 --defaults-file=[MY.CNF]:唯一從給定文件讀取默認選項,必須是個真實文件,必須在命令行第一個選項位置指定。 --defaults-group=GROUP-NAME:從配置文件讀取的組,innobakcupex多個實例部署時使用。 --export:為導出的表創建必要的文件 --extra-lsndir=DIRECTORY:(for --bakcup):在指定目錄創建一份xtrabakcup_checkpoints文件的額外的備份。 --incremental-basedir=DIRECTORY:創建一份增量備份時,這個目錄是增量別分的一份包含了full bakcup的Base數據集。 --incremental-dir=DIRECTORY:prepare增量備份的時候,增量備份在DIRECTORY結合full backup創建出一份新的full backup。 --incremental-force-scan:創建一份增量備份時,強制掃描所有增在備份中的數據頁即使完全改變的page bitmap數據可用。 --incremetal-lsn=LSN:創建增量備份的時候指定lsn。 --innodb-log-arch-dir:指定包含歸檔日志的目錄。只能和xtrabackup --prepare選項一起使用。 --innodb-miscellaneous:從My.cnf文件讀取的一組Innodb選項。以便xtrabackup以同樣的配置啟動內置的Innodb。通常不需要顯示指定。 --log-copy-interval=#:這個選項指定了log拷貝線程check的時間間隔(默認1秒)。 --log-stream:xtrabakcup不拷貝數據文件,將事務日志內容重定向到標准輸出直到--suspend-at-end文件被刪除。這個選項自動開啟--suspend-at-end。 --no-defaults:不從任何選項文件中讀取任何默認選項,必須在命令行第一個選項。 --databases=#:指定了需要備份的數據庫和表。 --database-file=#:指定包含數據庫和表的文件格式為databasename1.tablename1為一個元素,一個元素一行。 --parallel=#:指定備份時拷貝多個數據文件並發的進程數,默認值為1。 --prepare:xtrabackup在一份通過--backup生成的備份執行還原操作,以便准備使用。 --print-default:打印程序參數列表並退出,必須放在命令行首位。 --print-param:使xtrabackup打印參數用來將數據文件拷貝到datadir並還原它們。 --rebuild_indexes:在apply事務日志之后重建innodb輔助索引,只有和--prepare一起才生效。 --rebuild_threads=#:在緊湊備份重建輔助索引的線程數,只有和--prepare和rebuild-index一起才生效。 --stats:xtrabakcup掃描指定數據文件並打印出索引統計。 --stream=name:將所有備份文件以指定格式流向標准輸出,目前支持的格式有xbstream和tar。 --suspend-at-end:使xtrabackup在--target-dir目錄中生成xtrabakcup_suspended文件。在拷貝數據文件之后xtrabackup不是退出而是繼續拷貝日志文件並且等待知道xtrabakcup_suspended文件被刪除。這項可以使xtrabackup和其他程序協同工作。 --tables=name:正則表達式匹配database.tablename。備份匹配的表。 --tables-file=name:指定文件,一個表名一行。 --target-dir=DIRECTORY:指定backup的目的地,如果目錄不存在,xtrabakcup會創建。如果目錄存在且為空則成功。不會覆蓋已存在的文件。 --throttle=#:指定每秒操作讀寫對的數量。 --tmpdir=name:當使用--print-param指定的時候打印出正確的tmpdir參數。 --to-archived-lsn=LSN:指定prepare備份時apply事務日志的LSN,只能和xtarbackup --prepare選項一起用。 --user-memory = #:通過--prepare prepare備份時候分配多大內存,目的像innodb_buffer_pool_size。默認值100M如果你有足夠大的內存。1-2G是推薦值,支持各種單位(1MB,1M,1GB,1G)。 --version:打印xtrabackup版本並退出。 --xbstream:支持同時壓縮和流式化。需要客服傳統歸檔tar,cpio和其他不允許動態streaming生成的文件的限制,例如動態壓縮文件,xbstream超越其他傳統流式/歸檔格式的的優點是,並發stream多個文件並且更緊湊的數據存儲(所以可以和--parallel選項選項一起使用xbstream格式進行streaming)。
xtrabackup大部分常用參數都和innobackupex差不多,大家可以自己去官網上看說明,最重要的一點是xtraback支持MyISAM的備份。
應用場景:
①.普通全量備份、還原:
#備份: 1:指定--defaults-file xtrabackup --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --backup --target-dir=/home/zhoujy/xtrabackup/ 2:用--datadir取代--defaults-file xtrabackup --user=root --password=123 --backup --datadir=/var/lib/mysql/ --target-dir=/home/zhoujy/xtrabackup/ #還原: 1:(關閉mysql)先prepare xtrabackup --prepare --target-dir=/home/zhoujy/xtrabackup/ 2:再copy rsync -avrP /home/zhoujy/xtrabackup/* /var/lib/mysql/ 3:改權限、啟動 chown -R mysql.mysql *
②.普通增量備份、還原
#備份,這里指定幾個庫和表,也可以是所有庫 1:庫全量備份 xtrabackup --user=root --password=123 --datadir=/var/lib/mysql/ --backup --parallel=3 --databases="xtra_test dba_test" --target-dir=/home/zhoujy/xtrabackup/ 2:增量備份 xtrabackup --user=root --password=123 --datadir=/var/lib/mysql/ --backup --parallel=3 --databases="xtra_test dba_test" --target-dir=/home/zhoujy/xtrabackup1/ --incremental-basedir=/home/zhoujy/xtrabackup/ 注意:要是有多個增量備份,第2個增量需要指定第一個增量的目錄。和innobackupex一樣。 3:還原 #先prepare全備 xtrabackup --prepare --apply-log-only --target-dir=/home/zhoujy/xtrabackup/ #再prepare增量備份 xtrabackup --prepare --apply-log-only --target-dir=/home/zhoujy/xtrabackup/ --incremental-dir=/home/zhoujy/xtrabackup1/ 4:最后prepare 全備 xtrabackup --prepare --target-dir=/home/zhoujy/xtrabackup/ 5:最后copy、改權限。
另外說一個指定表的備份:
和innobackupex一樣,用--databases=dbname.tablename和--tables-file,也可以用--tables(--include),支持正則。
如備份t開頭的數據庫下的所有表:
xtrabackup --user=root --password=123 --datadir=/var/lib/mysql/ --backup --parallel=3 --tables="^t[.]*.*" --target-dir=/home/zhoujy/xtrabackup/
③.打包壓縮備份,注意:--compress不能和--stream=tar一起使用
##壓縮備份 xtrabackup --user=root --password=123 --datadir=/var/lib/mysql/ --backup --parallel=3 --compress --compress-threads=5 --databases="xtra_test dba_test" --target-dir=/home/zhoujy/xtrabackup/ #解壓,在perpare之前需要安裝qpress for f in `find ./ -iname "*\.qp"`; do qpress -dT2 $f $(dirname $f) && rm -f $f; done #prepare xtrabackup --prepare --target-dir=/home/zhoujy/xtrabackup/ #copy,改權限 ##打包備份,compress不支持tar。 xtrabackup --user=root --password=123 --datadir=/var/lib/mysql/ --backup --parallel=3 --compress --compress-threads=5 --stream=xbstream --target-dir=/home/zhoujy/xtrabackup/ >/home/zhoujy/xtrabackup/alldb.xbstream #解包 xbstream -x < alldb.xbstream #解壓 for f in `find ./ -iname "*\.qp"`; do qpress -dT2 $f $(dirname $f) && rm -f $f; done #prepare xtrabackup --prepare --target-dir=/home/zhoujy/xtrabackup #copy,改權限 ##第三方壓縮備份: xtrabackup --user=root --password=123 --datadir=/var/lib/mysql/ --backup --parallel=3 --stream=tar --target-dir=/home/zhoujy/xtrabackup/ | gzip /home/zhoujy/xtrabackup/alldb.tar.gz #解壓: tar izxvf alldb.tar.gz #prepare xtrabackup --prepare --target-dir=/home/zhoujy/xtrabackup #copy,改權限
④.加密備份
#壓縮加密全量備份所有數據庫 1:生成加密key: openssl rand -base64 24 把Key寫到文件: echo -n "Ue2Wp6dIDWszpI76HQ1u57exyjAdHpRO" > keyfile 2:壓縮加密全量備份 xtrabackup --user=root --password=123 --datadir=/var/lib/mysql/ --backup --no-timestamp --compress --compress-threads=3 --encrypt=AES256 --encrypt-key-file=/home/zhoujy/keyfile ----encrypt-threads=3 --parallel=5 --target-dir=/home/zhoujy/xtrabackup/ #還原 1:解密 for i in `find . -iname "*\.xbcrypt"`; do xbcrypt -d --encrypt-key-file=/home/zhoujy/keyfile --encrypt-algo=AES256 < $i > $(dirname $i)/$(basename $i .xbcrypt) && rm $i; done 2:解壓 for f in `find ./ -iname "*\.qp"`; do qpress -dT2 $f $(dirname $f) && rm -f $f; done 3:prepare xtrabackup --prepare --target-dir=/home/zhoujy/xtrabackup/ 4:copy,改權限 rsync -avrP /home/zhoujy/xtrabackup/* /var/lib/mysql/ chown -R mysql.mysql *
⑤.復制環境中的備份:一般生產環境大部分都是主從模式,主提供服務,從提供備份。
說明:備份 5個線程備份2個數據庫,並且文件xtrabackup_slave_info記錄GTID和change的信息 #備份 xtrabackup --user=root --password=123 --datadir=/var/lib/mysql/ --backup --no-timestamp --slave-info --safe-slave-backup --parallel=5 --databases='xtra_test dba_test' --target-dir=/home/zhoujy/xtrabackup/ #還原 1:prepare xtrabackup --prepare --target-dir=/home/zhoujy/xtrabackup/ 2:copy,改權限
總結:關於更多的innobackupex的備份可以看官方文檔和xtrabackup 安裝使用,參數可以參考本文上面的介紹說明,通過上面的幾個說明看到xtrabackup可以實現:全量、增量、壓縮、打包、加密備份,並且支持多線程的備份,並且也提供了長查詢超過閥值自動kill的方法,大大提升備份效率。
最后,明白Percona XtraBackup備份的原理之后,根據自己備份場景的特點,選擇合理的參數,定制適合自己需求的備份腳本進行工作。