作者 | 吳守陽
審校 | 重樓
介紹
Percona XtraBackup 是一款開源的備份工具,專為 MySQL 及其分支(如 Percona Server 和 MariaDB)數(shù)據(jù)庫設計。它允許在不中斷數(shù)據(jù)庫操作的情況下執(zhí)行熱備份,確保數(shù)據(jù)的一致性和可恢復性。Percona XtraBackup 是該工具的最新版本,帶來了若干改進和新功能。
工作原理
1. 基本原理
重做日志(Redo Log):
- 重做日志 是 InnoDB 用于記錄每一個數(shù)據(jù)更改的日志文件。即使在崩潰的情況下,重做日志也可以幫助恢復數(shù)據(jù)的一致性。
- InnoDB 啟動時會檢查數(shù)據(jù)文件和重做日志,并執(zhí)行兩個步驟:
(1)應用已提交的事務:將已提交的事務日志條目應用到數(shù)據(jù)文件,使其最新。
(2)撤銷未提交的事務:撤銷任何已修改但未提交的數(shù)據(jù),以確保數(shù)據(jù)一致性。
2. 備份過程
啟動備份:
- XtraBackup 啟動時會記錄當前的 LSN(Log Sequence Number,日志序列號),這是數(shù)據(jù)庫在該時間點的快照。
復制數(shù)據(jù)文件:
- XtraBackup 開始復制 InnoDB 數(shù)據(jù)文件。由于數(shù)據(jù)文件在備份期間可能發(fā)生更改,因此它們可能會反映不同時間點的數(shù)據(jù)狀態(tài)。
復制重做日志:
- XtraBackup 在后臺運行一個進程,監(jiān)視并復制重做日志中的更改。這是為了確保所有從備份開始到結束的更改都被捕捉到。
- 重做日志以循環(huán)方式寫入,當日志空間用完時會重用,因此 XtraBackup 需要持續(xù)監(jiān)視日志,以防遺漏任何更改。
3. 恢復過程
應用重做日志:
- 備份完成后,XtraBackup 會執(zhí)行“準備”階段,即將重做日志中的所有更改應用到數(shù)據(jù)文件。這一步類似于 InnoDB 的崩潰恢復過程。
- 通過應用重做日志,確保數(shù)據(jù)文件在恢復時的一致性和完整性。
4. 使用備份鎖
備份鎖:
- XtraBackup 利用 MySQL 8.0 中引入的備份鎖 LOCK INSTANCE FOR BACKUP 和LOCK BINLOG FOR BACKUP,這些鎖在備份過程中可以避免長時間的表鎖定。
- 當備份鎖不可用時,XtraBackup 使用 FLUSH TABLES WITH READ LOCK 鎖定 MyISAM 和其他非 InnoDB 表,但只在最后階段短時間內進行鎖定,以避免對 DML 操作的影響。
5. 增量備份
增量備份:
- 增量備份基于上一次備份的 LSN,僅備份從那時起發(fā)生的更改。這樣可以減少備份時間和存儲空間。
- 增量備份完成后,可以與基礎備份和之前的增量備份合并,通過應用重做日志來恢復完整數(shù)據(jù)。
6. 具體步驟
1)記錄 LSN:啟動備份時記錄當前 LSN。
2)復制數(shù)據(jù)文件:開始復制數(shù)據(jù)文件。
3)復制重做日志:持續(xù)監(jiān)視和復制重做日志中的更改。
4)結束時的操作:
- 如果需要鎖定 MyISAM 表,XtraBackup 會在最后階段短時間內鎖定這些表,避免長時間阻塞。
- 備份完成后,XtraBackup 將重做日志中的更改應用到數(shù)據(jù)文件,確保數(shù)據(jù)一致性。
7. 恢復
1)恢復數(shù)據(jù)文件:使用--copy-back 或--move-back 選項將備份數(shù)據(jù)恢復到目標目錄。
2)應用重做日志:在準備階段,XtraBackup 將重做日志中的所有更改應用到數(shù)據(jù)文件,確保數(shù)據(jù)庫的一致性。
3)啟動數(shù)據(jù)庫:恢復完成后,可以啟動數(shù)據(jù)庫并正常使用。
優(yōu)點
- 無停機備份:支持在線備份,無需停止數(shù)據(jù)庫服務。
- 高性能:備份過程中對數(shù)據(jù)庫性能影響最小。
- 增量備份:支持增量備份,減少存儲空間和備份時間。
- 數(shù)據(jù)一致性:保證備份期間數(shù)據(jù)的一致性。
- 恢復靈活:支持部分恢復和時間點恢復。
- 速度快:恢復時間更快,正常運行時間更長。
- 資源限制:控制IO、線程、內存等資源限制。
缺點
- 學習曲線:對于新手來說,配置和使用可能需要一定的學習時間。
- 復雜環(huán)境支持:在某些復雜環(huán)境中(如多源復制或非常大的數(shù)據(jù)庫),配置和使用可能較為復雜。
- 硬件需求:增量備份和還原可能需要更多的硬件資源(如磁盤和內存)。
版本限制
- XtraBackup 2.4:適用于 MySQL 5.6 和 5.7 及相應版本的 Percona Server 和 MariaDB。
- XtraBackup 8.0:適用于 MySQL 8.0 及相應版本的 Percona Server。
- XtraBackup 8.3:主要用于 MySQL 8.3及相應版本的 Percona Server。
使用場景
- 高可用環(huán)境:需要在不影響數(shù)據(jù)庫運行的情況下進行備份。
- 大型數(shù)據(jù)庫:適合處理大型數(shù)據(jù)庫的備份需求。
- 數(shù)據(jù)恢復:提供可靠的數(shù)據(jù)恢復解決方案,包括部分恢復和時間點恢復。
- 增量備份需求:需要定期進行增量備份以節(jié)省存儲空間和備份時間。
安裝步驟
Percona-XtraBackup-8.3.0
1、下載rpm包
wget
2、安裝
Shell > yum install epel-release
Shell > yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm sudo
Shell > percona-release setup ps80
Shell > yum install openssl-libs libev libgcrypt procps-ng perl-DBD-MySQL zstd
Shell > rpm -ivh percona-xtrabackup-83-8.3.0-1.1.el8.x86_64.rpm
Percona-XtraBackup-8.0.35
Shell > yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
Shell > percona-release enable-only tools
Shell > yum install openssl-libs libev libgcrypt procps-ng perl-DBD-MySQL zstd
Shell > yum install percona-xtrabackup-80
賬戶授權
CREATE USER 'xtrabackup'@'localhost' IDENTIFIED BY 's3cr%T';
GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'xtrabackup'@'localhost';
GRANT SELECT ON performance_schema.log_status TO 'xtrabackup'@'localhost';
GRANT SELECT ON performance_schema.keyring_component_status TO xtrabackup@'localhost';
GRANT SELECT ON performance_schema.replication_group_members TO xtrabackup@'localhost';
FLUSH PRIVILEGES;
備份示例
流式全量備份
- 流式全量備份到遠程主機,不在本機落盤
xtrabackup --defaults-file=/etc/my.cnf --port=3306 --user=xtrabackup --host=10.20.20.20 --password='*****sel' --compress --compress-threads=4 --parallel=4 --throttle=300 --stream=xbstream --use-memory=200MB --tmpdir=/tmp --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup > /jesong/xtrabackup/backup-image_`date +"%F_%H_%M_%S"`
- 流式全量備份到遠程主機,不在本機落盤
xtrabackup --defaults-file=/etc/my.cnf --port=3306 --user=xtrabackup --host=10.20.20.20 --password='*****sel' --compress --compress-threads=4 --parallel=4 --throttle=300 --stream=xbstream --use-memory=200MB --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup > /jesong/xtrabackup/backup-image_`date +"%F_%H_%M_%S"` | sshpass -p 'Tisdfsdfsdfdsfdsfds' ssh -p 22 root@10.20.20.20 "cat - > /jesong/backup.xbstream"
- 鏡像抽取
xbstream -x < /jesong/xtrabackup/backup-image -C /jesong/xtrabackup/xbstream-dir/
- 解壓
xtrabackup --decompress --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/xbstream-dir/
- 應用日志:
xtrabackup --prepare --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/xbstream-dir/
- 恢復
xtrabackup --copy-back --target-dir=/jesong/xtrabackup/xbstream-dir/
壓縮全量備份
- 全量備份本地壓縮
xtrabackup --defaults-file=/etc/my.cnf --slave-info --port=3306 --user=xtrabackup --host=196.168.10.10 --password='*******' --compress --compress-threads=4 --parallel=4 --throttle=300 --use-memory=200MB --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup --target-dir=/jesong/xtrabackup/backup-image_`date +"%F_%H_%M_%S"`
- 解壓
xtrabackup --decompress --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/backup-image_2024-05-30_17_56_25/
- 應用日志
xtrabackup --prepare --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/backup-image_2024-05-30_17_56_25/
- 恢復
xtrabackup --copy-back --target-dir=/jesong/xtrabackup/xbstream-dir/
增量備份
- 流式全量備份
xtrabackup --defaults-file=/etc/my.cnf --slave-info --port=3306 --user=xtrabackup --host=196.168.10.10 --password='*******' --compress --compress-threads=4 --parallel=4 --throttle=300 --stream=xbstream --use-memory=200MB --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup --extra-lsndir=/jesong/xtrabackup/full > /jesong/xtrabackup/full/backup-image
- 增量
1xtrabackup --defaults-file=/etc/my.cnf --slave-info --port=3306 --user=xtrabackup --host=196.168.10.10 --password='*******' --compress --compress-threads=4 --parallel=4 --throttle=300 --stream=xbstream --use-memory=200MB --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup --extra-lsndir=/jesong/xtrabackup/incremental_1 --incremental-basedir=/jesong/xtrabackup/full > /jesong/xtrabackup/incremental_1/backup-image
- 增量
2xtrabackup --defaults-file=/etc/my.cnf --slave-info --port=3306 --user=xtrabackup --host=196.168.10.10 --password='*******' --compress --compress-threads=4 --parallel=4 --throttle=300 --stream=xbstream --use-memory=200MB --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup --extra-lsndir=/jesong/xtrabackup/incremental_2 --incremental-basedir=/jesong/xtrabackup/incremental_1 > /jesong/xtrabackup/incremental_2/backup-image
- 鏡像抽取全量
xbstream -x < /jesong/xtrabackup/full/backup-image -C /jesong/xtrabackup/xbstream-dir/
- 增量
1xbstream -x < /jesong/xtrabackup/incremental_1/backup-image -C /jesong/xtrabackup/incremental_1_work
- 增量
2xbstream -x < /jesong/xtrabackup/incremental_2/backup-image -C /jesong/xtrabackup/incremental_2_work
解壓
- 全量
xtrabackup --decompress --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/xbstream-dir/
- 增量
1xtrabackup --decompress --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/incremental_1_work
- 增量
2xtrabackup --decompress --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/incremental_2_work
應用日志:--apply-log-only在合并增量備份時應使用,但最后一個備份除外。
- 全量
xtrabackup --prepare --apply-log-only --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/xbstream-dir/
- 增量
1xtrabackup --prepare --apply-log-only --parallel=4 --use-memory=200MB --incremental-dir=/jesong/xtrabackup/incremental_1_work --target-dir=/jesong/xtrabackup/xbstream-dir/
- 增量
2xtrabackup --prepare --parallel=4 --use-memory=200MB --incremental-dir=/jesong/xtrabackup/incremental_2_work --target-dir=/jesong/xtrabackup/xbstream-dir/
- 恢復
xtrabackup --copy-back --target-dir=/jesong/xtrabackup/xbstream-dir/
為什么最后一步不使用--apply-log-only
- 執(zhí)行回滾:在應用最后一個增量備份時不使用--apply-log-only,這樣會執(zhí)行回滾操作,將未提交的事務回滾,使得備份數(shù)據(jù)變得一致。
- 備份一致性:即使在最后一步使用了--apply-log-only,備份仍然是一致的,但在恢復后數(shù)據(jù)庫服務器會在啟動時執(zhí)行回滾操作。這可能會增加恢復時間,因此推薦在備份準備階段完成回滾。
部分備份
- 指定表或以什么開頭都會備份
xtrabackup --defaults-file=/etc/my.cnf --slave-info --port=3306 --user=xtrabackup --host=196.168.10.10 --password='*******' --parallel=4 --throttle=300 --use-memory=200MB --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup --datadir=/jesong/mysql --target-dir=/jesong/xtrabackup/test --tables="^tolldb[.]tc_deduction_plan"
- 庫里的表
xtrabackup --defaults-file=/etc/my.cnf --slave-info --port=3306 --user=xtrabackup --host=196.168.10.10 --password='*******' --parallel=4 --throttle=300 --use-memory=200MB --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup --datadir=/jesong/mysql --target-dir=/jesong/xtrabackup/test --tables="^tolldb[.].*"
- 文件方式導入
echo "mydatabase.mytable" > /tmp/tables.txt
xtrabackup --defaults-file=/etc/my.cnf --slave-info --port=3306 --user=xtrabackup --host=196.168.10.10 --password='*******' --parallel=4 --throttle=300 --use-memory=200MB --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup --datadir=/jesong/mysql --target-dir=/jesong/xtrabackup/test --tables-file=/tmp/tables.txt
- 應用日志
xtrabackup --prepare --export --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/test
恢復方案一:需要清空數(shù)據(jù)目錄
xtrabackup --copy-back --target-dir=/jesong/xtrabackup/test
恢復方案二:拷貝數(shù)據(jù)文件
要從備份中恢復分區(qū),必須丟棄表空間的該表:
ALTER TABLE name_p4 DISCARD TABLESPACE;
下一步是將文件從備份復制到MySQL數(shù)據(jù)目錄:.ibd
cp /mnt/backup/2012-08-28_10-29-09/imdb/name#P#p4.ibd /var/lib/mysql/imdb/name_p4.ibd
最后一步是導入表空間:
ALTER TABLE name_p4 IMPORT TABLESPACE;
相關參數(shù)
- --print-defaults 打印程序參數(shù)列表并退出。
- --no-defaults 不從任何選項文件中讀取默認選項,除了登錄文件。
- --defaults-file=# 只從指定的文件 # 讀取默認選項。
- --defaults-extra-file=# 在讀取全局文件后讀取此文件。
- --defaults-group-suffix=# 還讀取與 concat(group, suffix) 結合的組。
- --login-path=# 從登錄文件中讀取此路徑。
- --no-login-paths 不從登錄路徑文件中讀取登錄路徑。
- -v, --version 打印 xtrabackup 版本信息。
- --target-dir=name 目標目錄。
- --backup 將備份存儲到 target-dir。
- --prepare 準備一個備份以在備份的 MySQL 服務器上啟動。
- --export 在準備時創(chuàng)建文件以導入到另一個數(shù)據(jù)庫。
- --apply-log-only 在準備階段應用日志后停止恢復過程,不繼續(xù)推進 LSN。
- --print-param 打印 mysqld 需要的參數(shù)及其當前值。
- --use-memory=# 使用此值代替 buffer_pool_size。
- --use-free-memory-pct=# 此選項指定在準備階段緩沖池使用的空閑內存百分比(默認是 0% - 禁用)。
- --estimate-memory 啟用/禁用估算準備備份所需的內存。估算在備份期間進行。(默認關閉)
- --throttle=# 限制每秒 IO 操作(讀寫對)的數(shù)量,用于 --backup。
- --log[=name] 為兼容 MySQL 選項而忽略的選項。
- --log-copy-interval=# 日志復制線程之間檢查的時間間隔(以毫秒為單位,默認是 1 秒)。
- --extra-lsndir=name (用于 --backup):在此目錄中保存 xtrabackup_checkpoints 文件的額外副本。
- --incremental-lsn=name (用于 --backup):僅復制比指定 LSN 'high:low' 更新的 .ibd 頁面。
- --incremental-basedir=name (用于 --backup):僅復制比指定目錄中的備份更新的 .ibd 頁面。
- --redo-log-arch-dir=name 設置重做日志存檔目標目錄(如果服務器尚未設置)。
- --incremental-dir=name (用于 --prepare):應用增量目錄中的 .delta 文件和日志文件。
- --to-archived-lsn=# 不應用具有較大日志序列號的存檔日志。
- --tables=name 使用表名的正則表達式進行過濾。
- --tables-file=name 通過文件中的確切數(shù)據(jù)庫表名列表進行過濾。
- --databases=name 通過數(shù)據(jù)庫列表進行過濾。
- --databases-file=name 通過文件中的數(shù)據(jù)庫列表進行過濾。
- --tables-exclude=name 使用表名的正則表達式進行過濾,并排除匹配的名稱。
- --databases-exclude=name 基于名稱排除數(shù)據(jù)庫,并排除匹配的名稱。
- --create-ib-logfile **當前不起作用** 創(chuàng)建 ib_logfile* 文件用于 '--prepare'。
- --stream[=name] 使用 xbstream 格式流傳輸所有備份文件。
- --compress[=name] 使用指定的壓縮算法壓縮單個備份文件。支持的算法有 'lz4' 和 'zstd'。默認算法是 'zstd'。
- --compress-threads=# 并行數(shù)據(jù)壓縮的線程數(shù)。默認值為 1。
- --compress-chunk-size=# 壓縮線程的工作緩沖區(qū)大?。ㄒ宰止?jié)為單位)。默認值為 64K。
- --compress-zstd-level=# Zstandard 壓縮級別,從 1 到 19。默認值為 1。
- --encrypt=name 使用指定的加密算法加密單個備份文件。
- --encrypt-key=name 使用的加密密鑰。
- --encrypt-key-file=name 包含加密密鑰的文件。
- --encrypt-threads=# 并行數(shù)據(jù)加密的線程數(shù)。默認值為 1。
- --encrypt-chunk-size=# 加密線程的工作緩沖區(qū)大?。ㄒ宰止?jié)為單位)。默認值為 64K。
- --rebuild-threads=# 使用此線程數(shù)重建緊湊備份中的索引。僅在 --prepare 和 --rebuild-indexes 選項下有效。
- --incremental-force-scan 即使服務器啟用了頁面跟蹤,也執(zhí)行全掃描增量備份。
- --close-files 不保持文件打開。請自行承擔風險。
- --core-file 在致命信號時寫入核心文件。
- --copy-back 將先前制作的備份中的所有文件從備份目錄復制到其原始位置。
- --move-back 將先前制作的備份中的所有文件從備份目錄移動到實際的數(shù)據(jù)目錄位置。請謹慎使用,因為這會刪除備份文件。
- --galera-info 創(chuàng)建 xtrabackup_galera_info 文件,包含備份時本地節(jié)點的狀態(tài)。
- --slave-info 備份復制從服務器時打印主服務器的二進制日志位置和名稱。
- --page-tracking 使用服務器的頁面跟蹤功能進行增量備份。
- --no-lock 禁用鎖定 DDL 和表鎖定。
- --lock-ddl 在備份開始時鎖定表/實例以阻止所有 DDL 操作。
- --lock-ddl-timeout=# 如果在給定超時時間內 LOCK TABLES FOR BACKUP 未返回,則中止備份。
- --lock-ddl-per-table 在 xtrabackup 開始復制階段之前為每個表鎖定 DDL,直到備份完成。
- --backup-lock-timeout=# 獲取元數(shù)據(jù)鎖的嘗試超時時間(以秒為單位)。
- --backup-lock-retry-count=# 獲取元數(shù)據(jù)鎖的嘗試次數(shù)。
- --dump-innodb-buffer-pool 通過設置 innodb_buffer_pool_dump_now=ON 指示 MySQL 服務器轉儲 innodb 緩沖池。
- --dump-innodb-buffer-pool-timeout=# 指定 xtrabackup 等待 innodb 緩沖池轉儲完成的秒數(shù)。
- --dump-innodb-buffer-pool-pct=# 指定要轉儲的緩沖池的百分比。
- --safe-slave-backup 在備份開始時停止從服務器 SQL 線程,直到?jīng)]有打開的臨時表為止。
- --rsync 使用 rsync 實用程序優(yōu)化本地文件傳輸。
- --force-non-empty-directories 在 --copy-back 或 --move-back 傳輸文件到非空目錄時指定此選項。
- --no-server-version-check 允許在服務器版本高于 PXB 支持的版本時繼續(xù)備份。
- --no-version-check 禁用版本檢查。
- --tables-compatibility-check 啟用引擎兼容性警告。
- --no-backup-locks 控制是否在備份階段使用備份鎖,而不是 FLUSH TABLES WITH READ LOCK。
- --rollback-prepared-trx 強制回滾準備的 InnoDB 事務。
- --decompress 解壓縮使用 --compress 選項壓縮的所有文件。
- -u, --user=name 指定連接到服務器時使用的 MySQL 用戶名。
- -H, --host=name 指定使用 TCP/IP 連接到數(shù)據(jù)庫服務器時的主機。
- -P, --port=# 指定使用 TCP/IP 連接到數(shù)據(jù)庫服務器時的端口。
- -p, --password[=name] 指定連接到數(shù)據(jù)庫時使用的密碼。
- -S, --socket=name 指定使用 UNIX 域套接字連接到本地數(shù)據(jù)庫服務器時的套接字。
- --incremental-history-name=name 指定存儲在 PERCONA_SCHEMA.xtrabackup_history 歷史記錄中的備份系列的名稱,以此為基礎進行增量備份。
- --incremental-history-uuid=name 指定特定歷史記錄的UUID,存儲在PERCONA_SCHEMA.xtrabackup_history表中,用作增量備份的基礎。
- --decrypt=name 解密先前使用--encrypt選項創(chuàng)建的備份中所有帶有.xbcrypt擴展名的文件。
- --remove-original 解密和解壓縮后刪除所有的.qp、.zst、.lz4和.xbcrypt文件。
- --ftwrl-wait-query-type=name 指定在innobackupex開始全局鎖前允許完成的查詢類型。默認為所有。
- --kill-long-query-type=name 指定用于解鎖全局鎖的需要被終止的查詢類型。默認為"SELECT"。
- --history[=name] 啟用備份歷史記錄跟蹤到PERCONA_SCHEMA.xtrabackup_history表??蛇x的歷史系列名稱可用于當前備份記錄。
- --kill-long-queries-timeout=# 指定innobackupex在啟動FLUSH TABLES WITH READ LOCK和終止阻塞它的查詢之間等待的秒數(shù)。默認為0,表示不終止任何查詢。
- --ftwrl-wait-timeout=# 指定innobackupex在運行FTWRL之前等待阻塞FTWRL的查詢的秒數(shù)。如果超時時仍有此類查詢,innobackupex將終止并返回錯誤。默認為0,即立即啟動FTWRL。
- --ftwrl-wait-threshold=# 指定innobackupex檢測到長時間運行查詢的運行時間閾值,用于非零值的--ftwrl-wait-timeout。直到存在此類長時間運行查詢,F(xiàn)TWRL才會啟動。如果--ftwrl-wait-timeout為0,則此選項無效。默認值為60秒。
- --debug-sleep-before-unlock=# 僅用于XtraBackup測試套件的調試選項,指定睡眠時間(秒)。
- --safe-slave-backup-timeout=# --safe-slave-backup應該等待Slave_open_temp_tables變?yōu)榱愕拿霐?shù)。默認為300秒。
- --check-privileges 在執(zhí)行任何查詢之前檢查數(shù)據(jù)庫用戶的權限。
- --read-buffer-size[=#] 設置數(shù)據(jù)文件讀取緩沖區(qū)大小,給定的值會按頁大小進行縮放。默認為10Mb。
- --server-public-key-path=name 服務器公共RSA密鑰的文件路徑,以PEM格式。
- --get-server-public-key 獲取服務器的公鑰。
- --ssl-mode=name SSL連接模式。
- --ssl-ca=name PEM格式的CA文件。
- --ssl-capath=name CA目錄。
- --ssl-cert=name PEM格式的X509證書。
- --ssl-cipher=name 使用的SSL密碼。
- --ssl-key=name PEM格式的X509密鑰。
- --ssl-crl=name 證書吊銷列表。
- --ssl-crlpath=name 證書吊銷列表路徑。
- --tls-version=name 使用的TLS版本,允許的值有:TLSv1.2、TLSv1.3。
- --ssl-fips-mode=name SSL FIPS模式(僅適用于OpenSSL),允許的值有:OFF、ON、STRICT。
- --tls-ciphersuites=name 使用的TLS v1.3密碼套件。
- --ssl-session-data=name 用于啟用SSL會話重用的會話數(shù)據(jù)文件。
- --ssl-session-data-continue-on-failed-reuse 如果設置為ON,即使無法重用會話數(shù)據(jù),也允許連接成功。
- --tls-sni-servername=name 傳遞給服務器的SNI服務器名稱。
- --transition-key[=name] 用于加密表空間密鑰的過渡密鑰。
- --xtrabackup-plugin-dir=name xtrabackup插件的目錄。
- --plugin-load=name 要加載的插件列表。
- --generate-new-master-key 在執(zhí)行copy-back時生成新的主密鑰。
- --generate-transition-key 生成過渡密鑰并存儲到密鑰環(huán)中。
- --keyring-file-data[=name] 密鑰環(huán)文件的路徑。
- --component-keyring-config[=name] 加載組件配置的路徑。用于--prepare、--move-back、--copy-back。
- --component-keyring-file-config[=name] 加載密鑰環(huán)組件配置的路徑。用于--prepare、--move-back、--copy-back。(已棄用,請使用--component-keyring-config代替)
- --parallel=# 并行數(shù)據(jù)文件傳輸?shù)木€程數(shù)。默認值為1。
- --fifo-streams=# 用于并行數(shù)據(jù)文件流的FIFO文件數(shù)。將此參數(shù)設置為1將禁用FIFO,數(shù)據(jù)流將發(fā)送到STDOUT。
- --fifo-dir=name 寫入命名管道的目錄。如果省略,則使用--target-dir。
- --fifo-timeout=# 等待另一端打開FIFO流以供讀取的秒數(shù)。默認為60秒。
- --strict 在傳遞給xtrabackup的參數(shù)無效時失敗并顯示錯誤。(默認啟用;使用--skip-strict禁用)
- --rocksdb-checkpoint-max-age=# ROCKSDB檢查點的最大年齡(秒)。
- --rocksdb-checkpoint-max-count=# ROCKSDB檢查點的最大計數(shù)。
- -h, --datadir=name 數(shù)據(jù)庫根目錄的路徑。
- -t, --tmpdir=name 臨時文件的路徑??梢灾付ǘ鄠€路徑,用冒號(:)分隔,此時會輪流使用這些路徑。
- --log[=name] MySQL選項兼容性中忽略的選項。
- --log-bin[=name] 日志序列的基本名稱。
- --log-bin-index=name 保存二進制日志文件名稱的文件。
- --innodb[=name] MySQL選項兼容性中忽略的選項。
- --innodb-adaptive-hash-index 啟用InnoDB自適應哈希索引(默認啟用)。使用--skip-innodb-adaptive-hash-index來禁用。(默認啟用;使用--skip-innodb-adaptive-hash-index來禁用。)
- --innodb-autoextend-increment=# 數(shù)據(jù)文件自動擴展增量(以兆字節(jié)為單位)。
- --innodb-buffer-pool-size=# InnoDB用于緩存數(shù)據(jù)和索引的內存緩沖池大小。
- --innodb-checksums 啟用InnoDB校驗和驗證(默認啟用)。使用--skip-innodb-checksums來禁用。(默認啟用;使用--skip-innodb-checksums來禁用。)
- --innodb-data-file-path=name 各個文件及其大小的路徑。
- --innodb-data-home-dir=name InnoDB表空間的公共部分。
- --innodb-io-capacity[=#] 服務器可以執(zhí)行的IOPs數(shù)。調整后臺IO速率。
- --innodb-read-io-threads=# InnoDB后臺讀IO線程數(shù)。
- --innodb-write-io-threads=# InnoDB后臺寫IO線程數(shù)。
- --innodb-file-per-table 將每個InnoDB表存儲到數(shù)據(jù)庫目錄中的.ibd文件中。
- --innodb-flush-log-at-trx-commit[=#] 設置為0(每秒寫入和刷新一次)、1(每個事務提交時寫入和刷新)或2(提交時寫入、每秒刷新一次)。
- --innodb-flush-method=name 刷新數(shù)據(jù)的方法。
- --innodb-force-recovery=# 在數(shù)據(jù)庫磁盤映像損壞時幫助保存數(shù)據(jù)。
- --innodb-log-buffer-size=# InnoDB用于將日志寫入磁盤上日志文件的緩沖區(qū)大小。
- --innodb-log-file-size=# 日志組中每個日志文件的大小。
- --innodb-log-files-in-group=# 日志組中的日志文件數(shù)。InnoDB循環(huán)寫入這些文件。建議值為3。
- --innodb-log-group-home-dir=name InnoDB日志文件的路徑。
- --innodb-max-dirty-pages-pct=# 緩沖池中允許的臟頁百分比。
- --innodb-open-files=# 同時在最大值上保持打開的InnoDB文件數(shù)。
- --innodb-use-native-aio 如果平臺支持,則使用本機AIO。
- --innodb-page-size=# 數(shù)據(jù)庫的通用頁大小。
- --innodb-log-block-size=# 事務日志文件的日志塊大小。不支持更改已創(chuàng)建的日志文件。請自行決定風險!
- --innodb-buffer-pool-filename=name 用于轉儲/加載InnoDB緩沖池的文件名。
- --debug-sync=name 調試同步點。僅用于xtrabackup測試套件。
- --innodb-checksum-algorithm=name InnoDB用于頁面校驗和的算法。[CRC32, STRICT_CRC32, INNODB, STRICT_INNODB, NONE, STRICT_NONE]
- --innodb-log-checksums 是否計算并要求InnoDB重做日志塊的校驗和。(默認啟用;使用--skip-innodb-log-checksums來禁用。)
- --innodb-undo-directory=name Undo表空間文件所在的目錄。此路徑可以是絕對路徑。
- --innodb-directories=name 用于掃描表空間文件的目錄列表。默認為掃描'innodb-data-home-dir;innodb-undo-directory;datadir'。
- --temp-tablespaces-dir=name 臨時表空間文件所在的目錄。此路徑可以是絕對路徑。
- --innodb-undo-tablespaces=# 使用的撤消表空間數(shù)。
- --innodb-redo-log-encrypt 啟用或禁用REDO表空間的加密。
- --innodb-undo-log-encrypt 啟用或禁用UNDO表空間的加密。
- --defaults-group=name 配置文件中的默認組(默認為“mysqld”)。
- --open-files-limit=# 使用setrlimit()保留的最大文件描述符數(shù)。
- --server-id=# 被備份的服務器實例。
- --rocksdb-datadir=name RocksDB數(shù)據(jù)目錄。
- --rocksdb-wal-dir=name RocksDB WAL目錄。
- --register-redo-log-consumer 在備份開始時注冊重做日志消費者。如果啟用此選項,將阻止服務器清除重做日志,如果PXB重做,跟隨線程仍在復制,則會阻塞服務器上的DML。
總結
Percona XtraBackup 8 是一個強大的備份工具,適用于需要高可用性和數(shù)據(jù)一致性的 MySQL 數(shù)據(jù)庫環(huán)境。它的主要優(yōu)點包括無停機備份、高性能、增量備份和靈活的恢復選項。盡管有一定的學習曲線,但其開源免費、可靠性高的特性使其成為大型數(shù)據(jù)庫備份的理想選擇。通過合理配置和使用相關參數(shù),可以實現(xiàn)高效的全量和增量備份,確保數(shù)據(jù)的安全性和可恢復性。
作者介紹
吳守陽,51CTO社區(qū)編輯,擁有8年DBA工作經(jīng)驗,熟練管理MySQL、Redis、MongoDB等開源數(shù)據(jù)庫。精通性能優(yōu)化、備份恢復和高可用性架構設計。善于故障排除和自動化運維,保障系統(tǒng)穩(wěn)定可靠。具備良好的團隊合作和溝通能力,致力于為企業(yè)提供高效可靠的數(shù)據(jù)庫解決方案。