1. 程式人生 > 實用技巧 >MySQL物理備份基礎知識(基於xtrabackup2.4版本)

MySQL物理備份基礎知識(基於xtrabackup2.4版本)

一 版本說明:

1、xtrabackup2.4可以備份5.1,5.5,5.6,5.7版本的MySQL,不能備份MySQL8.0及以上版本,
2、如果要備份MySQL8.x版本,使用xtrabackup8.0版本(xtrabackup8.0.12以前版本不支援MySQL8.0.20及以後版本的備份),
所以建議使用xtrabackup8.0.12及以上版本,另外xtrabackup8.x只能備份MySQL8.X系列,不能備份MySQL5.X版本

二 xtrabackup8.0.12相比之前版本有哪些新特性:

1、支援系統表空間加密
2、支援LZ4加密演算法(--compress=lz4   --compress-threads=N).

三 xtrabackup2.4介紹:

1、備份步驟

1)開始記錄redo log 的LSN
2) copy innodb表資料檔案,與此同時,一個後臺程序監視redo log的變化,將變化寫入redo log 的備份檔案
3)當innodb資料檔案備份完成後,加FLUSH TABLES WITH READ LOCK,備份non-innodb 檔案(lock table with backup 代替FTWRL鎖,不過只對於percona server 5.6+)
4) non-innodb檔案備份完成後,記錄當時的binlog位置,這時備份redo log程序還在
5)完成redo log備份,釋放FTWRL鎖,完成備份

2、安裝

當前最新版本2.4.20
https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/
1) 解壓
2) 設定環境變數
    vim /etc/profile
    export PATH=$PATH:/usr/local/mysql/bin:/tools/percona-xtrabackup-2.4.20-Linux-x86_64/bin
    source /etc/profile

3、先決條件

mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cret';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO
       'bkpuser'@'localhost';
mysql> FLUSH PRIVILEGES;

4、備份場景

1) 全量備份
2)增量備份
3)壓縮備份
4)加密備份

5、使用說明

 innobackupex
 innobackupex是xtrabackup的軟連結。Innobackupex仍然支援2.2版本所有功能和語法,但現在已被廢棄,並將在下一個主要版本中刪除。
 xtrabackup
 一個編譯的C二進位制檔案,它提供了備份整個MySQL資料庫例項的功能,包括MyISAM、InnoDB和XtraDB表。
 xbcrypt
 用於加密和解密備份檔案的實用程式。
 xbstream
 允許流和從xbstream格式提取檔案的實用程式。
 xbcloud
 實用程式,用於從/到雲下載和上傳xbstream存檔的全部或部分。
 
 強烈推薦使用xtrabackup工具進行日常備份。

6、xtrabackup主要選項

1)--backup
   執行備份必須的選項

2)--target-dir
   指定備份到該目錄,如果不存在目錄,會自動建立(注意不能是級聯目錄都不存在)
   
3)DSN(-h -P -u -p -S)   
   指定ip,port,user,password,socket等
   

4)以下兩個引數控制當系統中出現長事務時xtrabackup執行FTWRL鎖的行為

--ftwrl-wait-threshold=SECONDS 依賴於--ftwrl-wait-timeout=SECONDS,預設值60s,當--ftwrl-wait-timeout=0時,該引數不生效
--ftwrl-wait-timeout=SECONDS,預設值0,表示不關注長事務,直接執行FTWRL鎖。如果非0,表示xtrabackup通過show processlist的方式,獲取是否存在sql已經執行超過--ftwrl-wait-threshold 的值,如果超過了,
   則在執行FTWRL鎖之前等待--ftwrl-wait-timeout時間,如果該sql未執行完成,xtrabackup程序退出備份。如果一個慢sql剛剛開始執行,執行時間還未超過--ftwrl-wait-threshold 的值,
   那麼xtrabackup還是會執行FTWRL鎖,這時候執行FTWRL還是會被block住。
   


5) --apply-log-only 
   增量備份時,在prepare階段應用redo日誌
   
6)--binlog-info
   此選項控制xtrabackup備份工具應如何檢索與備份對應二進位制日誌座標,一般備份無需指定該引數,預設即可
   OFF: 不獲取binlog座標,不會生成xtrabackup_binlog_info檔案
   ON: 遍歷binlog檔案獲取座標,生成xtrabackup_binlog_info檔案
   LOCKLESS:目前只在Percona Server實現,官方MySQL版本不支援該值
   AUTO:預設值,在ON和LOCKLESS之間自動選擇,優先選擇LOCKLESS,如果不支援LOCKLESS,那麼選擇ON

7)--compress
   此選項告訴xtrabackup使用指定的壓縮演算法壓縮所有輸出資料,包括事務日誌檔案和元資料檔案。 目前唯一支援的演算法是quicklz,
   結果檔案具有qpress存檔格式,如*.qp格式
   
8)--compress-threads=#
   此選項指定xtrabackup用於並行資料壓縮的工作執行緒數。 此選項預設為1。 並行壓縮可以與並行檔案複製--parallel一起使用。 
   例如, --parallel=4 --compress --compress-threads=2 將建立4個I/O執行緒,這些執行緒將讀取資料並將其管道到2個壓縮執行緒。


9)--copy-back
   將先前備份的所有檔案從備份目錄複製到例項的資料目錄。
   
10)--move-back
   將先前備份的所有檔案從備份目錄move到例項的資料目錄。

11)--databases=#
 此選項指定應備份的資料庫和表列表。 該選項接受表單“databasename1[.table_name1]databasename2[.table_name2]...”的列表]

12)--databases-exclude=name
 不包括基於名稱的資料庫,操作方式與--databases相同,但匹配的名稱不包括在備份中。 請注意,此選項比--databases具有更高的優先順序。

13)--databases-file=#
 此選項指定檔案的路徑,該檔案包含應備份的資料庫和表列表。 該檔案可以包含表單databasename1[.table_name1]的列表元素,每行一個元素。

14)--decompress
    解壓.qp檔案,可以跟--parallel配合使用,採用多執行緒解壓

15)--defaults-file=[MY.CNF]
    指定my.cnf的路徑
    
16)--export
    用來恢復單個表
    
17)--parallel=#
    採用多執行緒備份,可以搭配copy-back,--decompress
    
18)--prepare
    應用redlo日誌,達到資料一致性
    
19)--safe-slave-backup
當指定時,xtrabackup將在執行FLUSH TABLES WITH READ LOCK之前停止從SQL執行緒,並等待直到SHOW狀態中的Slave_open_temp_tables為零才開始備份。 
如果沒有開啟的臨時表,將進行備份,否則將啟動和停止SQL執行緒,直到沒有開啟的臨時表。 如果Slave_open_temp_tables在xtrabackup-safe-slave-backup-timeout秒後沒有變為零,
則備份將失敗。 備份完成後將重新啟動從SQL執行緒。這個選項是為了處理複製臨時表問題而實現的,row格式不存在該問題。  
    
20)--slave-info
此選項在備份從伺服器時非常有用。 它列印主伺服器的二進位制日誌位置。 它還將二進位制日誌座標寫入xtrabackup_slave_info檔案,作為Change MASTER命令。 
可以通過xtrabackup_slave_info檔案中的二進位制日誌位置的CHANGE MASTER命令來設定此主伺服器的新從伺服器。

21)--throttle=#
用來限制頻寬,預設大小10MB, 如果--throttle=1表示頻寬為10MB/S