在 Red Hat Enterprise Linux 5.7 / CentOS 5.7 環境下運行 AutoMySQLBackup 3.0 時,備份完成但報錯:du: WARNING: use --si, not -H。本文深度解析根因並提供一行代碼修復方案。
============================================================================== Total disk space used for backup storage... Size - Location 1.8M /u01/db_backup/mysqlbackup/ ============================================================================== ###### WARNING ###### Errors reported during AutoMySQLBackup execution.. Backup failed Error log below.. du: WARNING: use --si, not -H; the meaning of the -H option will soon change to be the same as that of --dereference-args (-D) ================================== End of Backup ==============================
雖備份實際成功,但腳本判定失敗並觸發告警,影響自動化監控體系。
du -hsH "${CONFIG_backup_dir}"du (GNU coreutils) 5.97,-H 參數語義與 POSIX 標準不一致,且該版本提示「將改變 -H 行為以符合 --dereference-args」coreutils 8.4,du -H 行為已符合標準,不再報警# 編輯腳本文件
vi /usr/local/bin/automysqlbackup
# 定位並修改統計行(約第 1000 行左右)
# 原代碼
echo `du -hsH "${CONFIG_backup_dir}"`
# 修改為:移除 -H 參數
echo `du -hs "${CONFIG_backup_dir}"`
原理: -h(人類可讀)、-s(僅顯示總計)已滿足備份大小統計需求,-H(解引用命令行參數中的符號鏈接)非必需且觸發兼容性警告。
# 編譯安裝新版 coreutils 或使用第三方倉庫 # 注意:核心工具升級可能影響系統穩定性,生產環境需充分測試
# 手動執行備份腳本 /usr/local/bin/automysqlbackup # 輸出應無 WARNING,正常顯示 ============================================================================== Total disk space used for backup storage... Size - Location 1.8M /u01/db_backup/mysqlbackup/ ============================================================================== Backup completed successfully!
| OS 版本 | coreutils 版本 | du -H 行為 | 是否報警 |
|---|---|---|---|
| RHEL/CentOS 5.7 | 5.97 | 非 POSIX 兼容,語義將變更 | 是 |
| RHEL/CentOS 6.6+ | 8.4 | POSIX 兼容 | 否 |
| Ubuntu 14.04+ | 8.21+ | POSIX 兼容 | 否 |
xtrabackup(物理熱備)、mysqldumper、或雲廠商托管備份服務此問題本質是 舊版 GNU coreutils 違背 POSIX 標準 導致的兼容性警告。通過移除非必需的 -H 參數即可完美規避,零業務影響、零風險。提醒運維同學關注基礎工具鏈版本對自動化腳本的隱性影響,建立「腳本靜態檢查 + 版本兼容性矩陣」機制預防同類問題。