首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

使用 mydumper 多線程備份 MySQL:安裝、實測對比與生產級最佳實踐

     編輯:MySQL 資料庫相關知識

為什麼選 mydumper

  • 多線程並行:導出/導入速度提升 5-10 倍
  • 一致性快照:--single-transaction + `FLUSH TABLES WITH READ LOCK` 協調
  • 輸出分離:結構、資料、Binlog 分檔案,支援壓縮
  • Daemon 模式:持續備份、Binlog 即時同步
  • 輕量 C 語言:無 Python/Perl 依賴,部署簡單

安裝(Ubuntu 12.04 / 14.04 / 16.04 / 18.04 / 20.04)

# 依賴
apt-get update && apt-get install -y \
  libglib2.0-dev libmysqlclient-dev zlib1g-dev libpcre3-dev g++ cmake

# 編譯安裝最新版(GitHub Release)
cd /tmp
wget https://github.com/mydumper/mydumper/releases/download/v0.12.1/mydumper-0.12.1.tar.gz
tar -zxvf mydumper-0.12.1.tar.gz
cd mydumper-0.12.1
cmake .
make && make install

# 驗證
mydumper --version
myloader --version

核心參數速查

參數說明建議值
-B, --database備份庫名必填
-T, --tables-list指定表(逗號分隔)可選
-o, --outputdir輸出目錄必填
-t, --threads線程數CPU 核心數 × 2
-c, --compress壓縮輸出 (gzip)建議開啟
-r, --rows按行數分塊導出大表大表 500000
-k, --no-locks不加鎖(需 --single-transaction)生產環境建議
-b, --binlogs導出 BinlogPITR 需求開啟
-D, --daemon守護進程模式持續備份場景
--regex正則匹配表名批量庫/表

實戰測試:mydumper vs mysqldump

環境

  • 資料庫 A:中等體量,mysqldump 162s → mydumper 61s (2.7倍)
  • 資料庫 B:大體量,mysqldump 483s → mydumper 337s (1.4倍)

結論:提升倍數受限於 **磁碟 IO、CPU、網路、表結構**。SSD + 高核心 CPU 效果最明顯。

輸出結構解析

/backup/
├── metadata                    # 備份時間、Binlog 位置
├── db_name.table1-schema.sql   # 表結構
├── db_name.table1.sql          # 表資料
├── db_name.table2-schema.sql
├── db_name.table2.sql
└── binlog_snapshot/            # --binlogs 產出
    ├── mysql-bin.000001
    └── mysql-bin.000002

還原

# 建庫
mysql -u root -p -e "CREATE DATABASE db_name;"

# 多線程還原(-o 覆蓋既有表)
myloader -u root -p -h 127.0.0.1 -B db_name -d /backup/db_name -t 8 -o

生產級備份腳本範本

#!/bin/bash
# /usr/local/bin/mydumper_backup.sh
set -euo pipefail

DB_USER="backup_user"
DB_PASS="$(cat /etc/mysql/backup_pass)"
DB_HOST="127.0.0.1"
DB_NAME="prod_db"
OUT_DIR="/backup/mydumper/$(date +%F)"
THREADS=8
LOG="/var/log/mydumper_backup.log"

mkdir -p "$OUT_DIR"
exec >> "$LOG" 2>&1

echo "[$(date)] START backup $DB_NAME -> $OUT_DIR"

mydumper -u "$DB_USER" -p "$DB_PASS" -h "$DB_HOST" \
  -B "$DB_NAME" -o "$OUT_DIR" -t "$THREADS" -c -k -b \
  --long-query-guard 60 --kill-long-queries

echo "[$(date)] END backup"

# 保留 7 天
find /backup/mydumper -type d -mtime +7 -exec rm -rf {} \;

crontab 定時

# 每天 02:30
30 2 * * * /usr/local/bin/mydumper_backup.sh

監控與驗證

  1. 日誌審計:腳本輸出重導向至 syslog/ELK
  2. 校驗和:sha256sum $OUT_DIR/*.sql.gz > $OUT_DIR/manifest.sha256
  3. 還原演練:月度在 Staging 環境 myloader -o 驗證
  4. 告警:腳本非 0 退出碼、輸出目錄大小異常、磁碟剩餘 < 20% → PagerDuty/企業微信/釘釘

結語

mydumper 是大庫備份的標準答案。掌握多線程參數調優、輸出結構理解、Daemon 模式持續備份、myloader 高速還原、監控驗證閉環,構建企業級 MySQL 備份體系。配合 xtrabackup(物理備份)雙軌並行,實現 RPO=0、RTO<分鐘 的高可用保障。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved