Mydumper 是針對 MySQL 與 Drizzle 設計的高效能多線程備份與還原工具,由 MySQL、Facebook、SkySQL 等公司開發者維護。相較官方 mysqldump,Mydumper 支援平行匯出、壓縮、斷點續傳等特性,大幅縮短大型資料庫備份時間。

# 安裝相依套件
yum install glib2-devel mysql-devel zlib-devel pcre-devel
# 下載原始碼
wget https://launchpad.net/mydumper/0.5/0.5.1/+download/mydumper-0.5.1.tar.gz
tar zxvf mydumper-0.5.1.tar.gz -C ../software/
cd ../software/mydumper-0.5.1
# 編譯安裝
cmake .
make
make install
mysql -u root -p
CREATE DATABASE test;
CREATE TABLE test.t1 (a INT);
| 參數 | 說明 |
|---|---|
| -B, --database | 指定要備份的資料庫 |
| -T, --tables-list | 指定資料表,逗號分隔 |
| -o, --outputdir | 輸出目錄 |
| -t, --threads | 執行緒數 (預設 4) |
| -c, --compress | 壓縮輸出檔案 |
| -r, --rows | 嘗試將大表依列數切分 |
| -k, --no-locks | 不加鎖 (警告:可能造成不一致) |
| -b, --binlogs | 匯出 binlog |
| -D, --daemon | 守護進程模式 |
| -v, --verbose | 輸出等級 0=silent 1=error 2=warn 3=info |
| 參數 | 說明 |
|---|---|
| -d, --directory | 備份目錄 |
| -t, --threads | 執行緒數 (預設 4) |
| -o, --overwrite-tables | 表存在則覆蓋 |
| -e, --enable-binlog | 啟用二進制日誌還原 |
| -q, --queries-per-transaction | 每交易查詢數 (預設 1000) |
--binlogs 時產生,置於 binlog_snapshot/。time mydumper -B test -o /tmp/test2.bak -r 5000 -t 8 -c

#!/bin/bash
# ocpyang@126.com
# 讀取 database.txt 列出的資料庫進行備份,若為空則全備
mydumper=/usr/local/bin/mydumper
dir_backup=/backup
mysql_host=localhost
mysql_port=3306
mysql_user=root
mysql_pass=123456
now_date=$(date +%Y%m%d%H%M)
[ ! -d "$dir_backup" ] && mkdir -p "$dir_backup"
filepath=$(cd "$(dirname "$0")"; pwd)
[ ! -s "${filepath}/database.txt" ] && {
echo "將在當前目錄下新建 database.txt"
echo "#Each line is a valid database name" > "${filepath}/database.txt"
chmod 700 "${filepath}/database.txt"
}
# 移除註解行
awk 'NR>=2 {print $1}' "${filepath}/database.txt" > "${filepath}/tmpdatabases.txt"
if [ -s "${filepath}/tmpdatabases.txt" ]; then
started_time=$(date +%s)
echo "備份開始..."
# 這裡可迴圈讀取 tmpdatabases.txt 每行呼叫 mydumper
# 範例略
fi
myloader -d /tmp/test2.bak -t 8 -o -B test -u root -p 123456
Mydumper 以多線程、分塊匯出、壓縮等特性,成為大型 MySQL 環境備份的首選工具。搭配 Shell 腳本與 crontab 即可建立自動化、可監控的備份體系。