MySQL運維實戰之備份和恢復(8.1)xtrabackup全量備份

發表於2024-03-01

作者:俊達
xtrabackup是percona開源的mysql物理備份工具。xtrabackup 8.0支援mysql 8.0版本的備份和恢復。xtrabackup 2.4支援mysql 5.7及以下版本的備份和恢復。這裡我們以xtrabackup 8.0為例講解備份和恢復的具體操作方法。xtrabackup 2.4版本的使用上和8.0版本相差並不大。

全量備份

本地全量備份

將整個資料庫備份到本地目錄。

xtrabackup --backup --slave-info  -u root -H 127.0.0.1 -P3380 -pabc123 --target-dir /data/backup/ 
   2>/tmp/xtrabackup.log

關鍵引數說明:

  • backup:發起全量備份
  • -u, -H, -P, -p:連線mysql例項,使用者名稱、主機IP、埠、密碼
  • -slave-info:記錄slave複製位點資訊
  • -target-dir:備份檔案的存放路徑
  • 2>/tmp/xtrabackup.log:將備份過程中的日誌重定向到/tmp/xtrabackup.log檔案中

備份過程中的日誌資訊會輸出到標準錯誤中,一般可以重定向到文字檔案中
備份出來的檔案:

-rw-r----- 1 root root       448 6月  26 14:46 backup-my.cnf
-rw-r----- 1 root root       610 6月  26 14:46 binlog.000020
-rw-r----- 1 root root        36 6月  26 14:46 binlog.index
drwxr-x--- 2 root root      4096 6月  27 11:03 demo
-rw-r--r-- 1 root root      9326 6月  27 11:03 export.log
-rw-r----- 1 root root      5554 6月  26 14:46 ib_buffer_pool
-rw-r----- 1 root root 134217728 6月  27 11:03 ibdata1
-rw-r----- 1 root root  12582912 6月  27 11:03 ibtmp1
drwxr-x--- 2 root root      4096 6月  27 11:03 #innodb_redo
drwxr-x--- 2 root root      4096 6月  26 14:46 mysql
-rw-r----- 1 root root  25165824 6月  26 16:08 mysql.ibd
drwxr-x--- 2 root root      4096 6月  26 14:46 performance_schema
-rw-r--r-- 1 root root      7883 6月  26 16:08 prepare_full.log
-rw-r--r-- 1 root root      9109 6月  26 16:08 prepare_full.log.2
drwxr-x--- 2 root root      4096 6月  27 11:03 sys
-rw-r----- 1 root root  16777216 6月  26 16:08 undo_001
-rw-r----- 1 root root  16777216 6月  26 16:08 undo_002
-rw-r----- 1 root root       105 6月  26 14:46 xtrabackup_binlog_info
-rw-r----- 1 root root       134 6月  27 11:03 xtrabackup_checkpoints
-rw-r----- 1 root root       673 6月  26 14:46 xtrabackup_info
-rw-r----- 1 root root   8388608 6月  26 16:08 xtrabackup_logfile
-rw-r----- 1 root root       154 6月  26 14:46 xtrabackup_slave_info
-rw-r----- 1 root root        39 6月  27 11:03 xtrabackup_tablespaces

xtrabackup_logfile:innodb redo日誌備份

xtrabackup_binlog_info:binlog位點資訊和GTID資訊。使用該備份恢復後,需要從該binlog位點進行增量恢復。

xtrabackup_slave_info:備份例項的slave位點資訊。

xtrabackup_checkpoints

backup_type:full-prepared /

from_lsn:0表示全量備份。非0表示增量備份起始日誌序列號。

to_lsn:備份結束時的checkpoint lsn。也是下一個增量備份的開始lsn。如果資料塊的lsn小於to_lsn,則增量備份不需要備份這些資料塊。

last_lsn:apply log時需要應用到的最大日誌序列號。超過last_lsn的日誌不需要應用到資料檔案中

flushed_lsn:備份結束時,例項的checkpoint lsn。

各個目錄:資料庫和表

ibdata1, mysql.ibd:innodb表空間檔案

undo_001 undo_002:undo表空間

其中xtrabackup_checkpoints記錄了innodb的lsn,在增量備份和資料庫恢復中都會依賴這個檔案。

# cat xtrabackup_checkpoints
backup_type = full-prepared
from_lsn = 0
to_lsn = 22021528
last_lsn = 24406197
flushed_lsn = 24210721
redo_memory = 0
redo_frames = 0

日誌資訊
xtrabackup會將備份過程中的重要資訊以日誌形式輸出到標準錯誤。建議將這些日誌重定向到檔案。透過這些日誌資訊,可以觀察到xtrabackup備份過程中的重要操作。比如何時鎖表、何時解鎖、何時開始備份、何時完成備份、備份是否成功等。

2023-06-21T10:29:36.685670+08:00 0 [Note] [MY-011825] [Xtrabackup] Connecting to MySQL server host: 127.0.0.1, user: root, password: set, port: 3380, socket: not set
2023-06-21T10:29:36.714220+08:00 0 [Note] [MY-011825] [Xtrabackup] Using server version 8.0.32

2023-06-21T10:29:36.719676+08:00 0 [Note] [MY-011825] [Xtrabackup] Executing LOCK INSTANCE FOR BACKUP ...
2023-06-21T10:29:36.721377+08:00 0 [Note] [MY-011825] [Xtrabackup] uses posix_fadvise().
2023-06-21T10:29:36.721453+08:00 0 [Note] [MY-011825] [Xtrabackup] cd to /data/mysql8.0/data/
2023-06-21T10:29:36.721478+08:00 0 [Note] [MY-011825] [Xtrabackup] open files limit requested 0, set to 65536

2023-06-21T10:29:37.086200+08:00 0 [Note] [MY-011825] [Xtrabackup] Starting to parse redo log at lsn = 22021170

2023-06-21T10:29:43.354808+08:00 0 [Note] [MY-011825] [Xtrabackup] Starting to backup non-InnoDB tables and files

2023-06-21T10:29:44.757598+08:00 0 [Note] [MY-011825] [Xtrabackup] Finished backing up non-InnoDB tables and files
2023-06-21T10:29:44.757659+08:00 0 [Note] [MY-011825] [Xtrabackup] Executing FLUSH NO_WRITE_TO_BINLOG BINARY LOGS
2023-06-21T10:29:44.789922+08:00 0 [Note] [MY-011825] [Xtrabackup] Selecting LSN and binary log position from p_s.log_status
2023-06-21T10:29:44.796572+08:00 0 [Note] [MY-011825] [Xtrabackup] Copying /data/mysql8.0/binlog/binlog.000010 to /data/backup/binlog.000010 up to position 1353
2023-06-21T10:29:44.796664+08:00 0 [Note] [MY-011825] [Xtrabackup] Done: Copying /data/mysql8.0/binlog/binlog.000010 to /data/backup/binlog.000010
2023-06-21T10:29:44.806407+08:00 0 [Note] [MY-011825] [Xtrabackup] Writing /data/backup/binlog.index
2023-06-21T10:29:44.806515+08:00 0 [Note] [MY-011825] [Xtrabackup] Done: Writing file /data/backup/binlog.index
2023-06-21T10:29:44.811951+08:00 0 [Note] [MY-011825] [Xtrabackup] Writing /data/backup/xtrabackup_slave_info
2023-06-21T10:29:44.812042+08:00 0 [Note] [MY-011825] [Xtrabackup] Done: Writing file /data/backup/xtrabackup_slave_info
2023-06-21T10:29:44.819173+08:00 0 [Note] [MY-011825] [Xtrabackup] Writing /data/backup/xtrabackup_binlog_info
2023-06-21T10:29:44.819251+08:00 0 [Note] [MY-011825] [Xtrabackup] Done: Writing file /data/backup/xtrabackup_binlog_info
2023-06-21T10:29:44.823595+08:00 0 [Note] [MY-011825] [Xtrabackup] Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
2023-06-21T10:29:44.861004+08:00 0 [Note] [MY-011825] [Xtrabackup] The latest check point (for incremental): '22021528'
2023-06-21T10:29:44.861053+08:00 0 [Note] [MY-011825] [Xtrabackup] Stopping log copying thread at LSN 24406197
2023-06-21T10:29:44.862265+08:00 1 [Note] [MY-011825] [Xtrabackup] >> log scanned up to (24414089)
2023-06-21T10:29:45.885625+08:00 0 [Note] [MY-011825] [Xtrabackup] Executing UNLOCK INSTANCE
2023-06-21T10:29:45.885916+08:00 0 [Note] [MY-011825] [Xtrabackup] All tables unlocked


2023-06-21T10:29:45.897933+08:00 0 [Note] [MY-011825] [Xtrabackup] MySQL binlog position: filename 'binlog.000010', position '1353', GTID of the last change '58224b02-09b7-11ee-90bd-fab81f64ee00:1-5827,7caa9a48-b325
-11ed-8541-fab81f64ee00:1-27'
2023-06-21T10:29:45.897948+08:00 0 [Note] [MY-011825] [Xtrabackup] MySQL slave binlog position: master host '172.16.121.234', purge list '58224b02-09b7-11ee-90bd-fab81f64ee00:1-5827,7caa9a48-b325-11ed-8541-fab81f64e
e00:1-27', channel name: ''
2023-06-21T10:29:45.898110+08:00 0 [Note] [MY-011825] [Xtrabackup] Writing /data/backup/backup-my.cnf
2023-06-21T10:29:45.898177+08:00 0 [Note] [MY-011825] [Xtrabackup] Done: Writing file /data/backup/backup-my.cnf
2023-06-21T10:29:45.906019+08:00 0 [Note] [MY-011825] [Xtrabackup] Writing /data/backup/xtrabackup_info
2023-06-21T10:29:45.906100+08:00 0 [Note] [MY-011825] [Xtrabackup] Done: Writing file /data/backup/xtrabackup_info
2023-06-21T10:29:46.919361+08:00 0 [Note] [MY-011825] [Xtrabackup] Transaction log of lsn (22021528) to (24511271) was copied.
2023-06-21T10:29:47.182490+08:00 0 [Note] [MY-011825] [Xtrabackup] completed 0

備份到遠端主機

xtrabackup支援流式備份,備份檔案本地不落盤,直接備份到遠端主機,避免單個主機故障導致資料庫和備份檔案同時丟失。

xtrabackup --backup --slave-info  -u root -H 127.0.0.1 -P3380 \
  -pabc123 --stream=xbstream --target-dir /data/backup/ \
 2>/data/backup/xtrabackup.log \
| ssh root@172.16.121.236 "cat -  > /data/backup/backup.s1"

--stream=xbstream引數,備份資料輸出到標準輸出

透過管道,將備份資料儲存到遠端主機。

壓縮備份檔案

可以在備份伺服器上進行壓縮,也可以在遠端伺服器上進行壓縮。

xtrabackup --backup --slave-info  -u root -H 127.0.0.1 -P3380 \
  -pabc123 --stream=xbstream --target-dir /data/backup/ \
 2>/data/backup/xtrabackup.log \
| gzip - > /data/backup/backup1.gz

透過管道將資料傳送到遠端伺服器壓縮:

./bin/xtrabackup --backup --slave-info  -u root -H 127.0.0.1 -P3380 \
  -pabc123 --stream=xbstream --target-dir /data/backup/ \
 2>/data/backup/xtrabackup.log \
| ssh root@172.16.121.236 "gzip - > /data/backup/backup1.gz"

壓縮軟體可以使用gzip,也可以使用pigz。pigz支援並行壓縮和並行解壓縮,可以加快壓縮和解壓的速度。

更多技術資訊請檢視雲掣官網https://yunche.pro/?t=yrgw

相關文章