當前位置:
首頁 > 知識 > xtrabackup部署以及使用

xtrabackup部署以及使用

簡介

備份mysql資料庫一直是一個比較噁心的工作,主要就是備份的資料庫比較大實在是慢。最近開始使用xtrabackup來備份資料庫,速度上快了很多,尤其還原速度要快的多。下面我將從安裝開始簡要介紹一下如何使用xtrabackup來備份資料庫。

定義:xtrabackup工具是percona公司用perl語言開發的在線物理熱備份工具,由於是採取物理拷貝的方式來做的備份,所以速度非常快,幾十G數據也才幾分鐘就搞定了,而它巧妙的利用了mysql特性做到了在線熱備份,不用像以前做物理備份那樣關閉資料庫才行,直接在線就能完成整庫或者是部分庫的全量備份和增量備份.

優點:

(1)備份過程快速、可靠

(2)備份過程不會打斷正在執行的事務

(3)能夠基於壓縮等功能節約磁碟空間和流量

(4)自動實現備份檢驗

(5)還原速度快

Xtrabackup有兩個主要的工具:xtrabackup、innobackupex

(1)xtrabackup只能備份InnoDB和XtraDB兩種引擎的數據表。

(2)innobackupex備份innodb和myisam兩種引擎,但是myisam數據目前不支持增量。理論上就是再xtrabackup基礎上封裝了備份myisam的功能。

安裝

網上很多鍾方式,這裡我簡單一種(下載二進位安裝包)來部署。部署環境cetnos6.5,mysql5.7.24,xtrabackup版本為最新的2.4.9。直接解壓即可。

  1. 下載&解壓

# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/tarball/percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz
# tar -xf percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz

  1. 添加path環境變數

echo "export PATH=$PATH:/XXX/bin >> /etc/profile

  1. source 生效即可使用。

備份

備份主要分為兩種模式一種是tar模式一種是xbstream模式。

其中xbstream模式可以不落盤直接發送到備份伺服器,當資料庫伺服器磁碟不足時是一種不錯的方式,當然速度稍慢。顧名思義,流模式由Percona XtraBackup支持,以特殊的tar或xbstream格式將備份發送到STDOUT,而不是將文件複製到備份目錄。這種模式允許使用其他程序來過濾備份的輸出,從而為備份的存儲提供更大的靈活性。例如,通過將輸出管道連接到壓縮實用程序來實現壓縮。流備份和使用Unix管道的好處之一是備份可以被自動加密。

innobackupex在子進程的日誌流模式下啟動xtrabackup,並將其日誌重定向到一個臨時文件。然後,它使用xbstream以特殊的xbstream格式將所有數據文件流到STDOUT(二進位)。在它將所有數據文件流化到STDOUT後,它將停止xtrabackup並將保存的日誌文件流化。下面看一下實例代碼:

xbstream實例:

將完整備份直接存儲到一個文件中:

$ innobackupex --stream=xbstream /root/backup/ > /root/backup/backup.xbstream

流式壓縮備份:

$ innobackupex --stream=xbstream --compress /root/backup/ > /root/backup/backup.xbstream

解壓縮備份到/root/backup/目錄:

$ xbstream -x < backup.xbstream -C /root/backup/

壓縮備份發送到另一台主機並解壓:

$ innobackupex --compress --stream=xbstream /root/backup/ | ssh user@otherhost "xbstream -x -C /root/backup/"

tar實例:

將完整備份直接存儲到tar存檔中:

$ innobackupex --stream=tar /root/backup/ > /root/backup/out.tar

將tar存檔發送到另一個主機:

$ innobackupex --stream=tar ./ | ssh user@destination "cat - > /data/backups/backup.tar"

注意

要提取Percona XtraBackup的存檔,必須使用tar和-i選項:

$ tar -xizf backup.tar.gz

使用首選的壓縮工具進行壓縮:

1

2

$ innobackupex --stream=tar ./ | gzip - > backup.tar.gz

$ innobackupex --stream=tar ./ | bzip2 - > backup.tar.bz2

恢複數據

xtrabackup有一個xtrabackup --copy-back選項,可以將備份恢復到伺服器的datadir:

$ xtrabackup --copy-back --target-dir=/data/backups/

它會將所有與數據相關的文件複製回伺服器的datadir,由伺服器的my.cnf配置文件決定。

複製數據後應檢查文件許可權。你可能需要用類似的方法來調整它們:

$ chown -R mysql:mysql /var/lib/mysql

復加密的備份

參數說明:

xtrabackup部署以及使用

打開今日頭條,查看更多精彩圖片

1 --compress:該選項表示壓縮innodb數據文件的備份。
2 --compress-threads:該選項表示並行壓縮worker線程的數量。
3 --compress-chunk-size:該選項表示每個壓縮線程worker buffer的大小,單位是位元組,默認是64K。
4 --encrypt:該選項表示通過ENCRYPTION_ALGORITHM的演算法加密innodb數據文件的備份,目前支持的演算法有ASE128,AES192,AES256。
5 --encrypt-threads:該選項表示並行加密的worker線程數量。
6 --encrypt-chunk-size:該選項表示每個加密線程worker buffer的大小,單位是位元組,默認是64K。
7 --encrypt-key:該選項使用合適長度加密key,因為會記錄到命令行,所以不推薦使用。
8 --encryption-key-file:該選項表示文件必須是一個簡單二進位或者文本文件,加密key可通過以下命令行命令生成:openssl rand -base64 24。
9 --include:該選項表示使用正則表達式匹配表的名字[db.tb],要求為其指定匹配要備份的表的完整名稱,即databasename.tablename。
10 --user:該選項表示備份賬號。
11 --password:該選項表示備份的密碼。
12 --port:該選項表示備份資料庫的埠。
13 --host:該選項表示備份資料庫的地址。
14 --databases:該選項接受的參數為數據名,如果要指定多個資料庫,彼此間需要以空格隔開;如:"xtra_test dba_test",同時,在指定某資料庫時,也可以只指定其中的某張表。如:"mydatabase.mytable"。該選項對innodb引擎表無效,還是會備份所有innodb表。此外,此選項也可以接受一個文件為參數,文件中每一行為一個要備份的對象。
15 --tables-file:該選項表示指定含有表列表的文件,格式為database.table,該選項直接傳給--tables-file。
16 --socket:該選項表示mysql.sock所在位置,以便備份進程登錄mysql。
17 --no-timestamp:該選項可以表示不要創建一個時間戳目錄來存儲備份,指定到自己想要的備份文件夾。
18 --ibbackup:該選項指定了使用哪個xtrabackup二進位程序。IBBACKUP-BINARY是運行percona xtrabackup的命令。這個選項適用於xtrbackup二進位不在你是搜索和工作目錄,如果指定了該選項,innoabackupex自動決定用的二進位程序。
19 --slave-info:該選項表示對slave進行備份的時候使用,列印出master的名字和binlog pos,同樣將這些信息以change master的命令寫入xtrabackup_slave_info文件。可以通過基於這份備份啟動一個從庫。
20 --safe-slave-backup:該選項表示為保證一致性複製狀態,這個選項停止SQL線程並且等到show status中的slave_open_temp_tables為0的時候開始備份,如果沒有打開臨時表,bakcup會立刻開始,否則SQL線程啟動或者關閉知道沒有打開的臨時表。如果slave_open_temp_tables在--safe-slave-backup-timeount(默認300秒)秒之後不為0,從庫sql線程會在備份完成的時候重啟。
21 --rsync:該選項表示通過rsync工具優化本地傳輸,當指定這個選項,innobackupex使用rsync拷貝非Innodb文件而替換cp,當有很多DB和表的時候會快很多,不能--stream一起使用。
22 --kill-long-queries-timeout:該選項表示從開始執行FLUSH TABLES WITH READ LOCK到kill掉阻塞它的這些查詢之間等待的秒數。默認值為0,不會kill任何查詢,使用這個選項xtrabackup需要有Process和super許可權。
23 --kill-long-query-type:該選項表示kill的類型,默認是all,可選select。
24 --ftwrl-wait-threshold:該選項表示檢測到長查詢,單位是秒,表示長查詢的閾值。
25 --ftwrl-wait-query-type:該選項表示獲得全局鎖之前允許那種查詢完成,默認是ALL,可選update。
26 --galera-info:該選項表示生成了包含創建備份時候本地節點狀態的文件xtrabackup_galera_info文件,該選項只適用於備份PXC。
27 --stream:該選項表示流式備份的格式,backup完成之後以指定格式到STDOUT,目前只支持tar和xbstream。
28 --defaults-file:該選項指定了從哪個文件讀取MySQL配置,必須放在命令行第一個選項的位置。
29 --defaults-extra-file:該選項指定了在標準defaults-file之前從哪個額外的文件讀取MySQL配置,必須在命令行的第一個選項的位置。一般用於存備份用戶的用戶名和密碼的配置文件。
30 ----defaults-group:該選項表示從配置文件讀取的組,innobakcupex多個實例部署時使用。
31 --no-lock:該選項表示關閉FTWRL的表鎖,只有在所有表都是Innodb表並且不關心backup的binlog pos點,如果有任何DDL語句正在執行或者非InnoDB正在更新時(包括mysql庫下的表),都不應該使用這個選項,後果是導致備份數據不一致,如果考慮備份因為獲得鎖失敗,可以考慮--safe-slave-backup立刻停止複製線程。
32 --tmpdir:該選項表示指定--stream的時候,指定臨時文件存在哪裡,在streaming和拷貝到遠程server之前,事務日誌首先存在臨時文件里。在 使用參數stream=tar備份的時候,你的xtrabackup_logfile可能會臨時放在/tmp目錄下,如果你備份的時候並發寫入較大的話 xtrabackup_logfile可能會很大(5G+),很可能會撐滿你的/tmp目錄,可以通過參數--tmpdir指定目錄來解決這個問題。
33 --history:該選項表示percona server 的備份歷史記錄在percona_schema.xtrabackup_history表。
34 --incremental:該選項表示創建一個增量備份,需要指定--incremental-basedir。
35 --incremental-basedir:該選項表示接受了一個字元串參數指定含有full backup的目錄為增量備份的base目錄,與--incremental同時使用。
36 --incremental-dir:該選項表示增量備份的目錄。
37 --incremental-force-scan:該選項表示創建一份增量備份時,強制掃描所有增量備份中的數據頁。
38 --incremental-lsn:該選項表示指定增量備份的LSN,與--incremental選項一起使用。
39 --incremental-history-name:該選項表示存儲在PERCONA_SCHEMA.xtrabackup_history基於增量備份的歷史記錄的名字。Percona Xtrabackup搜索歷史表查找最近(innodb_to_lsn)成功備份並且將to_lsn值作為增量備份啟動出事lsn.與innobackupex--incremental-history-uuid互斥。如果沒有檢測到有效的lsn,xtrabackup會返回error。
40 --incremental-history-uuid:該選項表示存儲在percona_schema.xtrabackup_history基於增量備份的特定歷史記錄的UUID。
41 --close-files:該選項表示關閉不再訪問的文件句柄,當xtrabackup打開表空間通常並不關閉文件句柄目的是正確的處理DDL操作。如果表空間數量巨大,這是一種可以關閉不再訪問的文件句柄的方法。使用該選項有風險,會有產生不一致備份的可能。
42 --compact:該選項表示創建一份沒有輔助索引的緊湊的備份。
43 --throttle:該選項表示每秒IO操作的次數,只作用於bakcup階段有效。apply-log和--copy-back不生效不要一起用。

xtrabackup部署以及使用

總結

本篇簡單介紹了xtrabackup的部署和使用,當然還有很多地方比如增量備份還原以及各種參數的使用,將在以後進行深入說明。最後匯總一下 xtrabackup一些功能:

  • 在不暫停資料庫的情況下創建熱的InnoDB備份
  • 進行MySQL的增量備份
  • 將壓縮的MySQL備份傳輸到另一台伺服器
  • 在MySQL伺服器之間移動表格
  • 輕鬆創建新的MySQL複製從站
  • 在不增加伺服器負載的情況下備份MySQL

xtrabackup部署以及使用

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

似懂非懂 Comparable和 Comparator
為什麼有的大公司代碼也很爛?

TAG:程序員小新人學習 |