XtraBackup 是 InnoDB 熱備份神器,支援非阻塞備份、增量備份、流式傳輸、壓縮加密。本文記錄在 CentOS 6 / Percona Server 5.6 環境下,從依賴安裝到首次備份驗證的完整過程,重點解決 libev.so.4 依賴缺失問題。
| 工具 | 功能 |
|---|---|
xtrabackup | C 編譯核心二進制,僅備份 InnoDB/XtraDB |
innobackupex | Perl 腳本封裝,支援 MyISAM/InnoDB 混合備份(MyISAM 需全局鎖) |
xbstream | 流式打包/解包工具,支援並行傳輸 |
xbcrypt | 備份文件加密/解密(AES) |
xbcloud | 雲存儲上傳/下載(S3/Swift/Azure) |
yum -y install perl perl-devel libaio libaio-devel \ perl-DBI perl-DBD-MySQL perl-TermReadKey perl-Time-HiRes
直接 rpm -ivh percona-xtrabackup-2.3.2-1.el6.x86_64.rpm 報錯:
error: Failed dependencies:
libev.so.4()(64bit) is needed by percona-xtrabackup-2.3.2-1.el6.x86_64
編譯安裝到 /usr/local/lib,配置 LD_LIBRARY_PATH,但 rpm 依然檢測不到(rpm 查詢系統庫路徑 /usr/lib64//lib64)。
# 查找對應版本 rpmfind.net 或 yum search libev # 安裝 64 位 RPM rpm -ivh libev-4.04-2.el6.x86_64.rpm # 驗證 rpm -ql libev # /usr/lib64/libev.so.4 # /usr/lib64/libev.so.4.0.0
rpm -ivh percona-xtrabackup-2.3.2-1.el6.x86_64.rpm \ percona-xtrabackup-test-2.3.2-1.el6.x86_64.rpm \ percona-xtrabackup-debuginfo-2.3.2-1.el6.x86_64.rpm
確保 /etc/my.cnf 指定正確 datadir:
[mysqld] datadir=/var/lib/mysql innodb_data_home_dir = /data/mysql/ibdata innodb_log_group_home_dir = /data/mysql/iblogs innodb_data_file_path = ibdata1:10M;ibdata2:10M:autoextend innodb_log_files_in_group = 2 innodb_log_file_size = 1G
# 全量備份到指定目錄 innobackupex --user=root --password=123456 /data/backup/ # 輸出示例 # xtrabackup: Transaction log of lsn (23853959) to (23853959) was copied. # 150918 16:35:12 completed OK!
/data/backup/2015-09-18_16-35-12/ ├── xtrabackup_checkpoints # 關鍵:LSN 範圍、備份類型 ├── xtrabackup_info # 工具版本、命令行、Server 版本 ├── backup-my.cnf # 備份時的 my.cnf 相關段 ├── ibdata1, ib_logfile* # InnoDB 系統表空間、Redo Log ├── mysql/ # 系統庫 frm/ibd ├── app_db/ # 業務庫 │ ├── table1.ibd │ └── table1.frm └── xtrabackup_logfile # 備份過程中捕獲的 Redo Log 片段
cat /data/backup/2015-09-18_16-35-12/xtrabackup_checkpoints backup_type = full-prepared from_lsn = 0 to_lsn = 23853959 last_lsn = 23853959 compact = 0
| 參數 | 說明 |
|---|---|
--apply-log | 準備階段(redo apply),使備份數據一致可用 |
--copy-back | 還原階段,將備份拷貝回 datadir(目標目錄必須為空) |
--incremental | 增量備份模式 |
--incremental-basedir | 基準全量/增量備份目錄 |
--redo-only | 增量合並時僅 redo,不 rollback 未提交事務 |
--stream=tar | 流式輸出 tar 格式,配合管道壓縮/傳輸 |
--compress | 壓縮備份(需 qpress 支援) |
--encrypt=AES256 | 加密備份 |
--slave-info | 從庫備份時記錄主庫 Binlog 位點(生成 xtrabackup_slave_info) |
--tmpdir | 指定臨時目錄(避免 xtrabackup_logfile 撐滿 /tmp) |
--stream=tar | ssh remote "cat > /backup/inc_$(date +%F_%H).tar"--apply-log --redo-only 合並增量鏈 → --copy-back