Percona XtraBackup 的 innobackupex 封裝腳本是 MySQL 物理熱備主流選擇,支持 InnoDB 非阻塞備份、並行壓縮、流式傳輸、節流限速。本文記錄生產環境異機恢復全流程,含參數調優、常見報錯排查。
/u01/mysql,數據目錄 /u01/mysql/data/u02/backup# 流式打包 + 並行 + 節流(推薦生產)
./innobackupex \
--user=root --password=root \
--host=172.17.210.112 \
--parallel=4 --throttle=400 \
--stream=tar \
/mysqlbak/innobackupex \
2>/mysqlbak/innobackupex/bak.log \
1>/mysqlbak/innobackupex/fullbak.tar
# 不壓縮版本(本地磁盤充足時)
./innobackupex --user=root --password=root --host=172.17.210.112 \
--parallel=4 --throttle=400 \
/mysqlbak/innobackupex \
2>/mysqlbak/innobackupex/bak.log
| 參數 | 作用 | 建議值 |
|---|---|---|
--parallel=N | 拷貝文件並行線程數 | CPU 核心數 2-4,IO 密集型可調大 |
--throttle=KB/s | 限制讀取源文件速率 | 避免備份佔滿 IO,影響業務;如 400=400KB/s |
--stream=tar | 標準輸出流式打包 | 異機備份必備,管道傳輸無落地中間文件 |
2>bak.log | 標準錯誤重定向 | 記錄備份過程、LSN、錯誤信息 |
1>fullbak.tar | 標準輸出重定向 | 流式打包後的 tar 文件 |
141011 09:44:04 innobackupex: completed OK!
日誌關鍵信息:
Latest check point (for incremental): '14275993522' → 記錄 LSN,增量備份基準log scanned up to (14275993522) → redo log 掃描結束位置Backup created in directory '/mysqlbak/innobackupex'ls /u01/mysql/data # 必須無任何文件,否則報 "Original data directory is not empty!"
./innobackupex --user=root --password=root1 \
--defaults-file=/etc/my.cnf \
--apply-log /u02/backup/
作用:重放 ibbackup_logfile 至 datadir,生成 ib_logfile0/1,使數據文件達到一致性點。
./innobackupex --user=root --password=root1 \
--defaults-file=/etc/my.cnf \
--copy-back /u02/backup/
關鍵輸出:
innobackupex: Copying /u02/backup/ibdata1 to '/u01/mysql/data/ibdata1'
innobackupex: Copying /u02/backup/ib_logfile1 to '/u01/mysql/data/ib_logfile1'
innobackupex: Finished copying back files.
cd /u01/mysql/data
chown -R mysql.mysql .
| 現象 | 原因 | 解決 |
|---|---|---|
啟動失敗 The server quit without updating PID file | 數據目錄未初始化或權限錯誤 | mysql_install_db --basedir=/u01/mysql --datadir=/u01/mysql/data --user=mysql 後重試 |
| PID 文件權限報錯 | root 操作產生文件屬主為 root | chown -R mysql.mysql /u01/mysql/data 含 PID 目錄 |
連接報 Can't connect to local MySQL server through socket '/tmp/mysql.sock' | Socket 文件缺失或路徑不一致 | touch /tmp/mysql.sock && chown mysql.mysql /tmp/mysql.sock;檢查 my.cnf socket 參數 |
innobackupex: Error: ibdata1 size mismatch | 備份與目標實例 innodb_data_file_path 不一致 | 恢復時必須使用備份自帶 backup-my.cnf 或 server-my.cnf 作為 --defaults-file |
--stream=tar | ssh target "cat > /backup/fullbak.tar",目標端直接解包應用。/etc/my.cnf 需與源機關鍵 InnoDB 參數一致(innodb_log_file_size、innodb_page_size、innodb_data_file_path)。innobackupex 以 --parallel 加速、--throttle 護業務、--stream=tar 異機無落地,三步驟 apply-log → copy-back → chown 恢復清晰可靠。生產建議:
md5sum。ibdata1 格式不兼容。