MySQL邏輯備份和恢復工具集( MyDumper & MyLoader)詳解
一、工具介紹

- 代碼倉庫:https://github.com/mydumper/mydumper
- 官方文檔:https://mydumper.github.io/mydumper/docs/html/index.html
核心定位
MyDumper 是一套高性能 MySQL 邏輯備份與恢復工具集,包含 mydumper(備份工具)和 myloader(恢復工具),采用 C 語言開發(fā),支持多線程并行處理,備份/恢復速度遠超傳統(tǒng) mysqldump,適用于 MySQL、Percona、MariaDB、TiDB 等兼容數(shù)據(jù)庫,由社區(qū)維護的開源工具(非 Percona/MariaDB/MySQL 官方產(chǎn)品)。
核心特性
- mydumper:
- 多線程并行備份,支持文件壓縮、binlog 導出、表數(shù)據(jù)分片備份;
- 保證事務性和非事務性表的一致性快照(遵循 MySQL 最佳實踐);
- 支持守護進程模式,可定時快照和連續(xù)備份二進制日志;
- 支持 PCRE 正則表達式篩選數(shù)據(jù)庫/表,輸出文件結(jié)構(gòu)清晰(分表存儲)。
- myloader:
- 多線程并行恢復,支持壓縮文件直接導入;
- 可指定恢復到不同數(shù)據(jù)庫,支持索引優(yōu)化策略(如延遲創(chuàng)建索引);
- 支持校驗和驗證,確?;謴蛿?shù)據(jù)一致性;
- 兼容 mydumper 生成的備份格式,支持自定義導入行為(如忽略表、替換表名)。
協(xié)議與兼容性
- 開源免費,遵循 GNU GPLv3 協(xié)議;
- 支持 MySQL 5.5+、MariaDB 10.x+、TiDB 等,兼容主流 Linux 發(fā)行版。
優(yōu)缺點
- 優(yōu)點:
- 并行處理大幅提升速度,備份/恢復效率高;
- 數(shù)據(jù)一致性有保障,支持細粒度篩選;
- 輸出/輸入文件易管理,支持壓縮和外部命令擴展;
- 恢復時可靈活調(diào)整策略(如索引優(yōu)化)。
- 缺點:
- mydumper 多線程備份基于表維度,單張大表場景需通過
-r參數(shù)分片優(yōu)化; - 對非事務性引擎(如 MyISAM)的一致性支持有限(需依賴 FTWRL)。
- mydumper 多線程備份基于表維度,單張大表場景需通過
相關工具對比
| 特點 | mysqldump | mysqlpump | mydumper | xtrabackup |
|---|---|---|---|---|
| 并發(fā)性 | 單線程 | 單線程 | 多線程 | 多線程 |
| 性能 | 較低 | 中等 | 較高 | 較高 |
| 備份速度 | 較慢 | 中等 | 較快 | 較快 |
| 恢復速度 | 較慢 | 中等 | 較快(使用myloader進行恢復) | 較快 |
| 兼容性 | MySQL 和 MariaDB | MySQL 5.7.8 及更高版本 | MySQL 和 MariaDB | MySQL 和部分 MariaDB版本 |
| 靈活性 | 高 | 高 | 高 | 高 |
| 壓縮備份 | 不支持 | 支持 | 支持 | 支持 |
| 官方支持 | 是(由Oracle官方提供) | 是(由Oracle官方提供) | 否(由社區(qū)維護) | 是(由Percona官方提供) |
| 跨平臺支持 | 是 | 是 | 是 | 是 |
| 備份類型 | 邏輯備份 | 邏輯備份 | 邏輯備份 | 物理備份 |
| 是否鎖表 | 是(備份過程中鎖表) | 是(部分情況下鎖表) | 否 | 否(可在不鎖表的情況下備份) |
| 增量備份 | 不支持 | 不支持 | 不支持 | 支持 |
二、核心原理
1. mydumper 備份原理
通過主線程+子線程協(xié)同實現(xiàn)一致性備份,流程如下:
- 主線程:
- 執(zhí)行
FLUSH TABLES WITH READ LOCK獲取全局讀鎖,防止備份期間數(shù)據(jù)寫入; - 讀取
SHOW MASTER/SLAVE STATUS記錄 binlog 位置等元數(shù)據(jù); - 創(chuàng)建子線程并分配備份任務(按表拆分),等待子線程建立快照;
- 子線程快照建立完成后釋放全局鎖,避免長時間阻塞業(yè)務。
- 執(zhí)行
- 子線程:
- 連接數(shù)據(jù)庫并設置
REPEATABLE READ隔離級別; - 執(zhí)行
START TRANSACTION WITH CONSISTENT SNAPSHOT獲取一致性快照; - 并行導出表結(jié)構(gòu)和數(shù)據(jù),生成獨立文件;
- 所有子線程完成后,主線程匯總生成
metadata文件(記錄備份時間、binlog 信息等)。
- 連接數(shù)據(jù)庫并設置

2. myloader 恢復原理
- 解析 mydumper 備份目錄中的
metadata和表文件; - 主線程分配恢復任務(表結(jié)構(gòu)→表數(shù)據(jù)→觸發(fā)器/存儲過程),子線程并行執(zhí)行;
- 支持延遲創(chuàng)建索引(
--optimize-keys),先導入數(shù)據(jù)再建索引提升效率; - 可選校驗和驗證,確保恢復數(shù)據(jù)與備份一致。

三、安裝方式
1. RPM 包安裝
# 下載地址:https://github.com/mydumper/mydumper/releases rpm -ivh mydumper-<version>-<dist>.x86_64.rpm # 驗證安裝 which mydumper which myloader
2. Docker 構(gòu)建
# 從源碼構(gòu)建(支持 ZSTD 壓縮)
docker build --build-arg CMAKE_ARGS='-DWITH_ZSTD=ON' -t mydumper \
https://github.com/mydumper/mydumper.git#master:docker四、用法命令
1. mydumper 常用參數(shù)與場景
核心參數(shù)
mydumper --help -B, --database 逗號分隔的備份數(shù)據(jù)庫列表(非單庫指定) -T, --tables-list 逗號分隔的備份表列表(需包含庫名,如 test.t1,test.t2) -o, --outputdir 備份輸出目錄(必填) -e, --build-empty-files 表無數(shù)據(jù)時生成空文件 -x, --regex 正則匹配 db.table -t, --threads 線程數(shù)(0=CPU核心數(shù),默認4,最小2) -r, --rows 按行數(shù)分片(格式 MIN:START_AT:MAX,MAX=0無限制) -v, --verbose 日志級別(0=靜默,1=錯誤,2=警告,3=信息,默認2) --less-locking 已廢棄,默認行為由 --trx-tables 替代 --trx-tables 僅備份事務表(優(yōu)化鎖策略) --no-trx-tables 包含非事務表(鎖釋放更慢) -G, --triggers 導出觸發(fā)器(默認不導出) -E, --events 導出事件(默認不導出) -R, --routines 導出存儲過程/函數(shù)(默認不導出) --exec 外部命令處理文件(如 --exec "/usr/bin/zstd FILENAME") --defaults-file 指定配置文件路徑(默認 /etc/mydumper.cnf) --no-views 不導出視圖 --no-data 僅導出表結(jié)構(gòu) --daemon 守護進程模式(定時備份) --snapshot-interval 守護進程快照間隔(分鐘,默認60) --clear 備份前清空輸出目錄 --format 輸出格式(INSERT/LOAD_DATA/CSV/CLICKHOUSE,默認INSERT)
實戰(zhàn)場景
# (1)單庫備份(詳細日志) mydumper -h 192.168.31.110 -P 3306 -u root -p AAA12345 -B testdb -o /data/backup/testdb --verbose=3 --logfile /data/backup/testdb.log # (2)多庫備份(逗號分隔) mydumper -h 192.168.31.110 -P 3306 -u root -p AAA12345 -B testdb,my_test -o /data/backup/multi_db -t 8 # (3)單表分片備份(最小1萬行,起始2萬行,無上限) mydumper -h 192.168.31.110 -P 3306 -u root -p AAA12345 -B testdb -T testdb.orders -r 10000:20000:0 -o /data/backup/orders # (4)僅備份事務表(優(yōu)化鎖策略) mydumper -h 192.168.31.110 -P 3306 -u root -p AAA12345 -B testdb --trx-tables -o /data/backup/testdb_trx # (5)守護進程模式定時備份(每30分鐘快照,保留2份) mydumper -h 192.168.31.110 -P 3306 -u root -p AAA12345 -B testdb -o /data/backup/daemon_backup --daemon --snapshot-interval 30 # (6)備份前清空目錄 mydumper -h 192.168.31.110 -P 3306 -u root -p AAA12345 -B testdb -o /data/backup/testdb --clear # (7)導出為CSV格式 mydumper -h 192.168.31.110 -P 3306 -u root -p AAA12345 -B testdb -T testdb.orders --format CSV -o /data/backup/csv_data # (8)開數(shù)據(jù)壓縮 -c mydumper -h 192.168.31.110 -P 3306 -u root -p AAA12345 -B testdb -c -o /data/backup/testdb_c
2. myloader 常用參數(shù)與場景
核心參數(shù)
myloader --help -d, --directory 備份文件目錄(必填) -B, --database 恢復到的目標數(shù)據(jù)庫 -t, --threads 恢復線程數(shù)(0=CPU核心數(shù),默認4,最小2) --drop-table 處理已存在表(FAIL/NONE/DROP/TRUNCATE/DELETE,默認FAIL) --optimize-keys 索引優(yōu)化策略(AFTER_IMPORT_PER_TABLE/AFTER_IMPORT_ALL_TABLES/SKIP,默認前者) --enable-binlog 恢復過程記錄binlog(建議用配置文件替代) -v, --verbose 日志級別(0=靜默,1=錯誤,2=警告,3=信息,默認2) --defaults-file 指定配置文件路徑 --skip-definer 跳過存儲過程/函數(shù)的DEFINER語句 --replace 用REPLACE替代INSERT(避免主鍵沖突) --ignore-errors 忽略指定錯誤碼(如 --ignore-errors 1050) --source-data 從metadata恢復復制配置 --checksum 校驗和處理策略(skip/fail/warn,默認fail) --resume 斷點續(xù)傳恢復
實戰(zhàn)場景
# (1)恢復單庫到新庫名(刪除目標表) myloader -h 192.168.31.110 -P 3306 -u root -p AAA12345 -d /data/backup/testdb -B testdb_new1 --drop-table DROP # (2)延遲創(chuàng)建索引(所有表導入后建索引) myloader -h 192.168.31.110 -P 3306 -u root -p AAA12345 -d /data/backup/testdb -B testdb_new2 --optimize-keys AFTER_IMPORT_ALL_TABLES # (3)斷點續(xù)傳恢復 myloader -h 192.168.31.110 -P 3306 -u root -p AAA12345 -d /data/backup/testdb -B testdb_new3 --resume # (4)忽略表已存在錯誤 myloader -h 192.168.31.110 -P 3306 -u root -p AAA12345 -d /data/backup/testdb -B testdb_new4 --ignore-errors 1050
五、配置文件使用
1. 配置文件示例(/etc/mydumper.cnf)
[mydumper] host = 192.168.31.110 user = root password = AAA12345 port = 3306 # 默認備份的數(shù)據(jù)庫名 database = testdb # 備份線程數(shù)(0=CPU核心數(shù),默認4) threads = 8 # 僅備份事務表(優(yōu)化鎖策略,1=啟用) trx-tables = 1 # 日志級別(0=靜默,1=錯誤,2=警告,3=信息) verbose = 3 # 日志輸出文件路徑 logfile = /var/log/mydumper.log # 正則匹配表(備份testdb庫下非tmp_開頭的表) regex = ^(testdb\.)(?!tmp_) [myloader] host = 192.168.31.110 user = root password = AAA12345 port = 3306 # 默認恢復的目標數(shù)據(jù)庫名 database = testdb_restore # 恢復線程數(shù)(0=CPU核心數(shù),默認4) threads = 8 # 處理已存在表的策略(DROP=刪除原表后重建) drop-table = DROP # 索引優(yōu)化策略(所有表導入完成后統(tǒng)一建索引) optimize-keys = AFTER_IMPORT_ALL_TABLES # 日志級別(0=靜默,1=錯誤,2=警告,3=信息) verbose = 3
2. 指定配置文件的使用方式
# mydumper 使用配置文件備份 mydumper --defaults-file=/etc/mydumper.cnf -o /data/backup/testdb_from_config # myloader 使用配置文件恢復 myloader --defaults-file=/etc/mydumper.cnf -d /data/backup/testdb_from_config -B testdb_restore_from_config
注意:
- 配置文件中無需參數(shù)的選項(如
trx-tables)設置為1/true即啟用;--overwrite-tables已廢棄,需用--drop-table DROP替代;--less-locking已廢棄,事務表場景用--trx-tables,非事務表用--no-trx-tables;- mydumper 的
-B參數(shù)支持逗號分隔多庫,非單庫專屬;- myloader 的
--optimize-keys默認值為AFTER_IMPORT_PER_TABLE(每張表導入后建索引);
到此這篇關于MySQL邏輯備份和恢復工具集( MyDumper & MyLoader)詳解的文章就介紹到這了,更多相關mysql邏輯備份恢復 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mysql日志系統(tǒng)redo log和bin log介紹
這篇文章主要介紹了mysql日志系統(tǒng)redo log和bin log介紹,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08
mysql實現(xiàn)connect by start with方式
本文介紹了MySQL中實現(xiàn)層級查詢的幾種方法,并分享了一種使用變量循環(huán)賦值的方式,通過實驗驗證了該方法的有效性2024-12-12
MySQL慢查詢?nèi)罩緩呐渲玫絻?yōu)化實踐全解析
慢查詢?nèi)罩臼荕ySQL性能優(yōu)化的關鍵工具,記錄執(zhí)行時間超過閾值的SQL語句,幫助定位性能瓶頸和優(yōu)化SQL,本文介紹MySQL慢查詢?nèi)罩緩呐渲玫絻?yōu)化實踐全解析,感興趣的朋友跟隨小編一起看看吧2026-01-01
基于sqlalchemy對mysql實現(xiàn)增刪改查操作
這篇文章主要介紹了基于sqlalchemy對mysql實現(xiàn)增刪改查操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06

