Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL 数据库如何使用 mydumper 和 myloader 数据快速备份和迁移

MySQL 数据库如何使用 mydumper 和 myloader 数据快速备份和迁移

原创
作者头像
Mintimate
发布于 2025-07-26 15:08:44
发布于 2025-07-26 15:08:44
2090
举报
文章被收录于专栏:Mintimate's BlogMintimate's Blog

博客:https://www.mintimate.cn Mintimate’s Blog,只为与你分享

当我们需要备份或者迁移大量 MySQL 数据时,可以使用 mydumper 和 myloader 工具进行快速备份和迁移。尤其是跨服务器迁移或者是本地数据库上云的时候,更快速地且稳定地完成数据迁移

相比 MySQL/MariaDB 自带的 mysqldump(mariadump) 工具,mydumper 和 myloader 更加高效,且支持多线程备份和多线程恢复,可以大大缩短备份和迁移的时间

别再打开 DBeaver、Navicat 或者 DataGrip 等数据库管理工具来两库对拷了

哈哈,应该有不少人是这样做的吧 ~
哈哈,应该有不少人是这样做的吧 ~

mydumper

mydumper 开源的 MySQL 数据库逻辑备份工具,GitHub 开源地址:mydumper/mydumper。包含两个组件:

  • mydumper: 负责导出 MySQL 数据库的一致性备份。
  • myloader: 读取 mydumper 生成的备份文件,连接目标数据库并执行导入.

相比于 MySQL 自带的 mysqldump 工具,主要的优势:

  • 多线程处理: 支持多线程备份,备份速度更快;同时使用事务快照,减少锁争用,降低对生产环境的影响。
  • 配置灵活: 支持正则表达式过滤表,支持压缩备份,支持长查询处理,支持导出 CSV 文件等。

效果演示

举个例子,我这里有一个使用 MariaDB 官方 Docker 镜像部署的数据库。数据量大概有 300 万条记录,大小 2.5G 左右。MariaDB 的镜像是基于 Ubuntu 24 的:

MariaDB 数据库 Docker 镜像
MariaDB 数据库 Docker 镜像

直接安装:

代码语言:bash
AI代码解释
复制
# 进入容器
docker exec -it mariadb /bin/bash
# 更新软件包
apt update && apt upgrade -y
# 安装 wget 用来下载 mydumper
apt install wget -y
# 下载 mydumper
wget https://github.com/mydumper/mydumper/releases/download/v0.19.1-3/mydumper_0.19.1-3.bookworm_amd64.deb
# 安装 mydumper
apt install ./mydumper_0.19.1-3.bookworm_amd64.deb
# 查看 mydumper 版本
mydumper --version

然后全数据库(剔除系统和测试库)全量备份,使用如下命令:

代码语言:bash
AI代码解释
复制
mydumper -u root -p '@******#' -t 4 --compress --regex '^(?!(mysql\.|sys\.|test\.))' -o /var/backups/fullMariaDB -v 3

大概解释以下命令构成,在没有指定远程地址情况默认为本地数据库:

  • -t 4: 使用 4 个线程进行备份。
  • --compress: 使用 gzip 压缩备份文件。
  • --regex '^(?!(mysql.|sys.|test.))': 使用正则表达式过滤表,只备份除了 mysql、sys、test 之外的表。
  • -o /var/backups/fullMariaDB: 备份文件输出到 /var/backups/fullMariaDB 目录下。
  • -v 3: 输出详细日志,包括成功的 info 级别日志。
mydumper 全量备份
mydumper 全量备份

腾讯云的轻量数据库,性能比 Docker 容器好很多,而且不需要我关注云备份和灾备;所以我想把备份文件迁移到腾讯云的轻量数据库上:

腾讯云轻量数据库
腾讯云轻量数据库

使用配套的 myloader 工具,将备份文件导入到腾讯云的轻量数据库上:

代码语言:bash
AI代码解释
复制
myloader -u root -p '4**********O' -h 10.0.4.15 -o --regex '^(?!(mysql\.|sys\.|test\.))' -d /var/backups/fullMariaDB -v 3

相比备份时候使用的mydumper,这次添加-h参数,指定远程地址:

  • -h 10.0.4.15: 指定远程地址为腾讯云轻量数据库的 IP 地址。
  • -d /var/backups/fullMariaDB: 指定备份文件目录。
  • -o: 如果目标数据库已经存在,那么进行覆盖。
数据迁移完成
数据迁移完成

视频教程

为了让大家更直观地了解如何使用 mydumper 和 myloader 进行数据迁移,我录制了一个视频教程,希望能帮助到大家。

主要内容:

  • Mydumper 的操作前提;
  • Mydumper 全量逻辑迁移演示;
  • Mydumper 高级用法概要。

做教程视频不易(技术教程,受众小,B站根本不会推荐引流),请务必<strong>一键三连</strong>嗷~

如何安装

安装方法非常简单。Ubuntu 的软件包管理器可以直接下载(但是可能版本比较旧)。其他系统可以在 Mydumper 的 Release 内下载dpkgrpm包安装:

mydumper 安装包
mydumper 安装包

比如: 在 Debian 12 上安装 mydumper 0.19.1-3:

代码语言:bash
AI代码解释
复制
# 下载 AMD64 版本的 mydumper
wget https://github.com/mydumper/mydumper/releases/download/v0.19.1-3/mydumper_0.19.1-3.bookworm_amd64.deb
# 安装
apt install ./mydumper_0.19.1-3.bookworm_amd64.deb
# 查看版本
mydumper --version

如果是在 macOS 上使用,可以使用 Homebrew 安装:brew install mydumper

另外,如果你的数据库是远程地址,本地没有 MySQL 的客户端;那么其实更建议拉取一个基于 MySQL 的 Docker 镜像并安装 mydumper;

最后备份的数据可以直接用 myloader 导入其他 MySQL 内,也可以直接用 docker cp 取出:

使用方法

权威的使用方法,可以参考:

比较重要的参数:

参数

说明

参数

说明

-h, --host

数据库主机地址

-u, --user

数据库用户名

-p, --password

数据库密码

-P, --port

数据库端口

-S, --socket

UNIX域套接字文件

-o, --outputdir

输出目录

-t, --threads

线程数(默认4)

-v, --verbose

输出详细程度,0: 无输出, 1: 错误, 2: 警告, 3 = 详细, 默认 2

-B, --database

指定数据库(逗号分隔)

-T, --tables-list

指定表(逗号分隔)

-x, --regex

正则匹配db.table格式

--where

WHERE条件过滤数据

-i, --ignore-engines

忽略的存储引擎

-O, --omit-from-file

从文件读取忽略列表

-F, --chunk-filesize

分割文件大小(MB)

-r, --rows

按行数分割表数据

-c, --compress

压缩格式(GZIP/ZSTD)

-l, --long-query-guard

查询超时时间(秒)

-m, --no-schemas

不备份表结构

-d, --no-data

只备份结构

-x, --regex

正则匹配需要备份的表

--partition-regex

正则匹配需要备份的分区

这里主要说一下使用场景,假设都是本地数据库,端口 3306:

代码语言:bash
AI代码解释
复制
# 备份指定表(指定数据库和表)
mydumper -u root -p Mintimate -B db1 -T tb1,tb2 -o /var/backups/
# 只备份表结构
mydumper -u root -p Mintimate -d -B db1 -o /var/backups/
# 不转储 mysql、sys 和 test 数据库(迁移常用)
mydumper -u root -p Mintimate --trx-tables --regex '^(?!(mysql\.|sys\.|test\.))' -o /var/backups/
# 仅转储 mysql 和 test 数据库
mydumper -u root -p Mintimate --trx-tables --regex '^(mysql\.|test\.)' -o /var/backups/
# 不转储以 test 开头的所有数据库
mydumper -u root -p Mintimate --trx-tables --regex '^(?!(test))' -o /var/backups/
# 转储不同数据库中的特定表
mydumper -u root -p Mintimate --trx-tables --regex '^(edumsdb\.el_edums_data_push_config$|externaldb\.authorization_token_info$)' -o /var/backups/
# 转储几个数据库,但要丢弃一些表
mydumper -u root -p Mintimate --trx-tables --regex '^(?=(?:(edumsdb\.|externaldb\.)))(?!(?:(edumsdb\.el_edums_data_push_config$|externaldb\.authorization_token_info$)))' -o /var/backups/

对应的 myloader 恢复命令:

代码语言:bash
AI代码解释
复制
# 恢复制定数据库
myloader -u root -p Mintimate -s db1 -o -d /var/backups/
# 恢复指定数据库到制定数据库
myloader -u root -p Mintimate -s db1 -B db_target -o -d /var/backups/
# 恢复指定数据库的表到制定据库内
myloader -u root -p Mintimate -s db1 -T db1.tb1,db1.tb2 -B db_target -o -d /var/backups/
# 全量恢复
myloader -u root -p Mintimate -o -d /var/backups/
# 全量结构恢复
myloader -u root -p Mintimate -o --no-data -d /var/backups/
# 使用正则排除制定数据库
myloader -u root -p Mintimate -o --regex '^(?!(mysql\.|sys\.|test\.))' -d /var/backups/

比如: 恢复 umami 数据库内的 website 表结构到远程服务器上的 umami_mirror 数据库内:

myloader 恢复指定表结构
myloader 恢复指定表结构

END

本文主要介绍了如何使用 mydumper 和 myloader 工具进行数据库的备份和恢复,以及如何使用 mydumper 进行增量备份。

另外,如果有小伙伴出现 MariaDB 迁移到 MySQL 8.x,遇到: Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'。这是因为 MySQL 8.x 移除了NO_AUTO_CREATE_USER。你可以执行这段来修复:

代码语言:bash
AI代码解释
复制
find /var/backups/fullMariaDB/ -type f -name "*.sql" -print0 | xargs -0 sed -i "s/NO_AUTO_CREATE_USER,//g"

希望本文能帮助到大家,如果大家有更好的方法,欢迎留言交流。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MyDumper:秒杀Mysqldump的MySQL多线程备份神器!
MyDumper 是一个高性能的 MySQL 备份工具,由 MySQL 社区开发。它旨在克服 mysqldump 的一些性能限制,特别是对于大规模数据备份和恢复,MyDumper 通过多线程操作大幅提高了备份和恢复的速度。
DBA实战
2024/09/06
7980
MyDumper:秒杀Mysqldump的MySQL多线程备份神器!
快速备份恢复工具mydumper/myloader
一 前言 大家对于MySQL的逻辑备份工具mysqldump应该都比较了解,本文介绍一款由MySQL ,Facebook 等公司的开发维护另外一套逻辑备份恢复工具---mydumper/myloader。 目前已经开发到0.9.1 版本。 mydumper 具有如下特性 1 支持多线程导出数据,速度比mysqldump快,生产上150G 导出到本地SSD磁盘40min 。 2 支持一致性备份,使用FTWRL(FLUSH TABLES WITH READ LOCK)会阻塞DML语句,保证备份数据的一致性。 3 支持将导出文件压缩,节约空间。 4 支持多线程恢复。 5 支持以守护进程模式工作,定时快照和连续二进制日志 6 支持按照指定大小将备份文件切割。 7 数据与建表语句分离。
用户1278550
2018/08/09
5.5K0
mydumper备份工具介绍与使用
前面文章有介绍过 MySQL 系统自带的 mysqldump 备份工具的使用,其实还有一个开源工具 mydumper 同样适用于 MySQL 的逻辑备份。之前一直没有正式体验过,只是听说比 mysqldump 要快很多,具体使用效果如何, 一起来看下吧。
MySQL技术
2021/10/12
2.4K0
mydumper安装笔记
参考:http://www.tuicool.com/articles/2eAVVvN
保持热爱奔赴山海
2019/09/18
1.3K0
mydumper安装笔记
使用myloader恢复数据教程
上篇文章介绍了 mydumper 备份工具的使用方法,文中有提到 mydumper 和 myloader 是一对相互的命令,即 mydumper 负责备份(导出),myloader 负责恢复(导入)。那么 myloader 又该如何使用呢?本篇文章我们一起来看下。
MySQL技术
2021/10/21
1.8K0
使用myloader恢复数据教程
【赵渝强老师】使用mydumper备份MySQL
MySQL在备份方面包含了自身的mysqldump工具,但其只支持单线程工作,这就使得它无法迅速的备份数据。而mydumper作为一个实用工具,能够良好支持多线程工作,这使得它在处理速度方面十倍于传统的mysqldump。其特征之一是在处理过程中需要对列表加以锁定,因此如果我们需要在工作时段执行备份工作,那么会引起DML阻塞。但一般现在的MySQL都有主从,备份也大部分在从上进行,所以锁的问题可以不用考虑。这样,mydumper能更好的完成备份任务。
赵渝强老师
2025/06/23
1250
【赵渝强老师】使用mydumper备份MySQL
mydumper备份mysql数据库示例
    mydumper是针对mysql数据库备份的一个轻量级第三方的开源工具,备份方式为逻辑备份。它支持多线程,备份速度远高于原生态的mysqldump以及众多优异特性。因此该工具是DBA们的不二选择。本文主要描述该工具的使用方法并给出示例。
Leshami
2018/08/13
4.1K0
myloader恢复mysql数据库示例
    mydumper是针对mysql数据库备份的一个轻量级第三方的开源工具,备份方式为逻辑备份。它支持多线程,备份速度远高于原生态的mysqldump以及众多优异特性。与其相配套的恢复工具则是myloader,主要用于将dump出来的sql以并行的方式进行恢复。本文主要描述myloader的使用方法并给出示例。
Leshami
2018/08/13
5K0
MySQL 备份恢复(三)
mydumper 最突出的特性就是可采用多线程并行备份,极大提高了数据导出的速度。其特征之一是在处理过程中需要对列表加以锁定,所以备份时尽量不要选择工作时间,避免引起 DML 阻塞。若是主从架构的话,从库一般处于只读状态,则可以直接在从库上执行备份操作,不会有 DML 堵塞了。
JiekeXu之路
2019/06/19
1.7K0
MySQL 备份恢复(三)
Mysql备份与恢复
用于保证InnoDB备份数据时的一致性,配合RR隔离级别一起使用;当发起事务时,读取一个数据的快照,直到备份结束,都不会读取到本事务开始之后提交的任何数据
mikelLam
2022/10/31
3.6K0
[MYSQL] mysql备份方案
我们之前讲过在没有备份的时候怎么恢复数据,从ibd数据文件恢复, 从binlog日志恢复, 甚至从xfs文件系统恢复. 但这些都不能保证一定能恢复成功. 所以每次都会提到备份, 却发现我还没讲过mysql备份相关的文章. 啊! 这?
大大刺猬
2024/12/16
8560
[MYSQL]  mysql备份方案
加快mydumper与myloader导出导入
    mydumper与myloader是一个优秀的第三方mysql数据库逻辑备份恢复工具,使用多线程的导出与导入。弥补了mysqldump单线程的不足。本文描述的是如何加快mydumper与myloader的导出与导入供大家参考。
Leshami
2018/08/13
1.9K0
mysql 数据库备份和恢复
物理备份是指直接复制包含数据的文件夹和文件。这种类型的备份适用于大数据量且非常重要,遇到问题需要快速回复的数据库。
WindWant
2020/09/11
4.2K0
hhdb数据库介绍(9-5)
计算节点支持mysqlbinlog命令,mysqlbinlog命令能够解析binlog文件用于同步增量数据,从而减少了将单机数据迁移至计算节点时的停机时间。使用mysqlbinlog连接远程实例获取binlog文件并解析出其中的SQL语句,然后交由计算节点执行,从而将某个数据库的增量数据导入到计算节点某个逻辑库下。首先,登入到管理端口(默认端口为3325),执行dbremapping命令添加数据库映射关系,关于dbremapping命令用法,请参考计算节点管理命令文档。
恒辉信达
2024/11/28
1240
【MySQL基础】数据库的备份与还原
https://blog.csdn.net/2301_80220607/category_12971838.html?spm=1001.2014.3001.5482
GG Bond1
2025/06/08
4530
一键快速迁移MySQL至TiDB,无需学习,直接复制粘贴
Mydumper 采用更先进的Stream流式管道技术,能够通过一条命令实现备份和恢复,显著加快了恢复速度。它可以:
贺春旸的技术博客
2024/07/10
6000
mydumper安装及安装故障汇总
   mydumper是针对mysql数据库备份的一个轻量级第三方的开源工具,备份方式术语逻辑备份。它支持多线程,备份速度远高于原生态的mysqldump以及众多优异特性。因此该工具是DBA们的不二选择。本文主要描述该工具的安装及其出现异常的解决方法。
Leshami
2018/08/08
1.6K0
Mysql数据库备份与还原
在服务器进行数据传输、数据存储和数据交换,就有可能产生数据故障。比如发生意外停机或存储介质损坏。这时,如果没有采取数据备份和数据恢复手段与措施,就会导致数据的丢失,造成的损失是无法弥补与估量的。
Devops海洋的渔夫
2022/01/17
2.3K0
Mysql数据库备份与还原
数据库的备份,迁移
08.14自我总结 数据库的备份 一数据库的备份 1.单库备份 mysqldump -uroot -p123 db1 > db1.sql #库名 mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql #库名 表名 2.多库备份 mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql 3.备份所有库 mysqldump -uroot -
小小咸鱼YwY
2019/09/11
1.7K0
MySQL数据库备份实操
当前xtrabackup的8.0.13已经支持 mysql 8.0.20版本(8.0.20版本对innodb的数据文件模式进行了修改)
技术路漫漫
2020/07/20
1.1K0
相关推荐
MyDumper:秒杀Mysqldump的MySQL多线程备份神器!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档