mydumper 是針對 MySQL 的多線程邏輯備份工具,速度遠超 mysqldump,支援 PCRE 過濾、一致性快照、中繼資料輸出等特性。本文記錄源碼編譯安裝、四大常見編譯錯誤排查、參數說明與實戰建議。
FLUSH TABLES WITH READ LOCK → 讀取主從狀態 → 工作線程 START TRANSACTION WITH CONSISTENT SNAPSHOT → UNLOCK TABLES。mysqldump --no-data。# 1. 安裝建構依賴 # CentOS/RHEL yum install -y glib2-devel mysql-devel zlib-devel pcre-devel openssl-devel cmake # Ubuntu/Debian apt-get install -y libglib2.0-dev libmysqlclient-dev zlib1g-dev libpcre3-dev libssl-dev cmake # 2. 下載源碼 wget https://launchpad.net/mydumper/0.6/0.6.2/+download/mydumper-0.6.2.tar.gz tar -xzf mydumper-0.6.2.tar.gz cd mydumper-0.6.2 # 3. 編譯安裝 cmake . make && make install
| 錯誤訊息 | 原因 | 解決 |
|---|---|---|
| PCRE_INCLUDE_DIR / PCRE_PCRE_LIBRARY NOTFOUND | 缺 pcre-devel | yum install pcre-devel / apt-get install libpcre3-dev |
| MYSQL_INCLUDE_DIR NOTFOUND | mysql-devel 未裝或路徑未加入 PKG_CONFIG_PATH | 裝 mysql-devel;若非預設路徑,export PKG_CONFIG_PATH=/usr/local/mysql/lib/pkgconfig:$PKG_CONFIG_PATH |
| libmysqlclient.so.18: cannot open shared object file | 執行時找不到 MySQL 客戶端庫 | ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/ 或 echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf && ldconfig |
| option parsing failed: Error parsing option -r | 參數與值緊貼(如 -r1000) | **參數與值需空格分開**:-r 1000 |
mydumper -u user -p pwd -h host -P port -B db -o /backup/dir -t 8 -c -F 64 -r 100000 # -B, --database 目標資料庫 # -T, --tables-list 指定表清單(逗號分隔) # -o, --outputdir 輸出目錄 # -t, --threads 線程數 (預設 4) # -c, --compress 壓縮輸出 # -F, --chunk-filesize 分塊大小 MB (預設 64) # -r, --rows 每塊行數 (啟用後關閉 -F) # -x, --regex PCRE 過濾 db.table # -k, --no-locks 不加全域讀鎖 (不一致備份,極慎用) # --less-locking 減少 InnoDB 鎖定時間 # -l, --long-query-guard 長查詢守護秒數 (預設 60) # -K, --kill-long-queries 殺掉長查詢而非中止備份 # -D, --daemon 守護進程模式 # -I, --snapshot-interval 快照間隔分鐘 (需 -D) # --tz-utc 統一時區 +00:00 (預設開啟) # --use-savepoints 使用存檔點減少 MDL (需 SUPER) # -V, --version 版本資訊 # -v, --verbose 輸出等級 0-3
# 全庫備份,8 線程,壓縮,64MB 分塊 mydumper -u root -p pwd -h 127.0.0.1 -B prod_db -o /backup/prod_$(date +%F) -t 8 -c -F 64 # 排除 mysql、test 庫 mydumper ... -x '^(?!(mysql|test)\.)' # 只備份特定表 mydumper ... -T orders,order_items,customers
myloader -u root -p pwd -h 127.0.0.1 -B prod_db -d /backup/prod_2024-01-15 -t 8 # -d, --directory 備份目錄 # -q, --queries-per-transaction 每事務查詢數 (預設 1000) # --overwrite-tables 覆蓋既有表 # --enable-binlog 還原時寫入 binlog
mydumper/myloader 組合是 MySQL 邏輯備份還原的高效能標準配置,建議納入常態備份策略。