MySQL备份神器mydumper的原理、实操与恢复完全指南

 更新时间:2026年04月04日 09:08:52   作者:·云扬·  
数据库备份是将数据库中的数据和结构复制到另一个位置,以便在需要时可以恢复数据,MySQL自带了备份工具mysqldump,可以备份整个数据库或特定的表,这篇文章主要介绍了MySQL备份神器mydumper的原理、实操与恢复的相关资料,需要的朋友可以参考下

前言

在 MySQL 数据库运维中,备份是数据安全的核心保障。相较于传统的 mysqldump,mydumper 凭借多线程并发、文件易管理、数据一致性强等优势,成为中大型数据库备份的优选工具。本文将从核心特点、安装配置、备份 / 恢复实战、原理剖析四个维度,带你全面掌握 mydumper 的使用技巧。

一、mydumper 核心优势

mydumper 之所以成为运维人员的 “心头好”,核心在于三大特性:

  1. 多线程并发备份:多线程并行处理不同数据表,备份速度较单线程工具提升数倍,适配海量表场景;

  2. 文件结构清晰:表结构(.sql)与数据文件分离存储,支持单表快速恢复,无需解析完整备份包;

  3. 一致性保障

    • InnoDB 引擎:通过事务快照(REPEATABLE READ 隔离级别)确保数据一致性;

    • MyISAM 引擎:通过全局读锁(FTWRL)避免备份过程中数据写入冲突。

二、安装与环境准备

2.1 安装 mydumper(CentOS 7)

# 1. 下载 RPM 包(v0.14.5-2 稳定版)
cd /usr/src/
wget https://github.com/mydumper/mydumper/releases/download/v0.14.5-2/mydumper-0.14.5-2.el7.x86_64.rpm
# 2.  yum 安装(自动解决依赖)
yum install mydumper-0.14.5-2.el7.x86_64.rpm -y
# 3. 验证安装
mydumper --help  # 显示帮助信息即安装成功

2.1 安装 mydumper(CentOS 7)

2.2 环境配置(必做步骤)

2.2.1 创建备份专用用户

避免 root 账号直接操作,创建最小权限备份用户:

-- 创建用户(用户名:u_mydumper,密码:Ud8agc_a)
create user u_mydumper@'%' identified WITH mysql_native_password BY 'Ud8agc_a';
-- 授予备份必需权限
grant create,insert,select,reload,process,lock tables,replication client,replication_slave_admin,show view,trigger,backup_admin on *.* to 'u_mydumper'@'%';

2.2.1 创建备份专用用户

2.2.2 配置备份目录

# 创建专用备份目录(示例路径)
mkdir -p /data/backup/mydumper_bak
cd /data/backup/mydumper_bak

2.2.3 开启 General Log(可选,用于问题排查)

-- 开启全局日志
set global general_log=on;
-- 查看日志存储路径(默认:/var/lib/mysql/[主机名].log)
show variables like 'general_log_file';

2.2.3 开启 General Log(可选,用于问题排查)

三、实战:mydumper 备份操作

3.1 执行备份命令

以备份 bak1 数据库为例,备份文件存储至 /data/backup/mydumper_bak/bak1

cd /data/backup/mydumper_bak/
mydumper -u 'u_mydumper' -p 'Ud8agc_a' -S /tmp/mysql.sock -B bak1 -o ./bak1

3.2 关键参数说明

参数作用
-u指定数据库用户名
-p指定用户密码
-SMySQL 套接字文件路径(默认 /tmp/mysql.sock
-B待备份的数据库名
-o备份文件输出目录
-t并发线程数(默认 4,可按需调整)

3.3 备份文件结构

备份完成后,进入输出目录查看文件:

cd /data/backup/mydumper_bak/bak1
ll  # 列出所有备份文件

3.3 备份文件结构

典型文件清单:

  • bak1-schema-create.sql:数据库创建语句;

  • bak1.t1-schema.sqlbak1.t2-schema.sql:表结构文件;

  • bak1.t1.00000.sqlbak1.t2.00000.sql:表数据文件;

  • metadata:备份元信息(备份时间、GTID、binlog 位点等)。

四、备份原理深度解析

结合 General Log 日志分析,mydumper 备份流程可拆解为 6 个关键步骤,兼顾效率与一致性:

  1. 刷新脏页:执行 FLUSH NO_WRITE_TO_BINLOG TABLES,将内存脏页刷入磁盘,避免数据丢失;

  2. 加全局读锁:主线程执行 FLUSH TABLES WITH READ LOCK,阻断写操作(MyISAM 表依赖此锁);

  3. 创建子线程与事务:默认创建 4 个子线程,每个线程开启 REPEATABLE READ 隔离级别的事务,获取一致性快照;

  4. 获取元信息:子线程查询 GTID、binlog 位点及表结构,写入对应 schema 文件;

  5. 多线程读数据:子线程并行执行 SELECT /*!40001 SQL_NO_CACHE */ * FROM 表名,读取数据并写入文件(禁用缓存提升效率);

  6. 释放锁与结束:所有表备份完成后,主线程释放全局读锁,子线程提交事务并退出。

五、实战:myloader 恢复操作

mydumper 配套恢复工具 myloader 支持多线程恢复,操作流程如下:

5.1 恢复前准备

-- 创建目标恢复数据库
create database bak1_recover;

5.2 执行恢复命令

myloader -u 'u_mydumper' -p 'Ud8agc_a' -S /tmp/mysql.sock -B bak1_recover -d /data/backup/mydumper_bak/bak1/

5.3 验证恢复结果

use bak1_recover;
show tables;  -- 确认表结构存在
select * from t1;  -- 验证数据完整性

5.3 验证恢复结果

5.4 恢复原理解析

myloader 恢复流程与备份呼应,核心步骤:

  1. 初始化线程:创建与备份线程数一致的子线程,切换至目标数据库;

  2. 并行建表:子线程同步执行表结构创建语句(先建表、后插数据);

  3. 事务写入数据:单个表的数据通过事务批量插入,避免单条插入的性能损耗;

  4. 事务提交:单表数据写入完成后提交事务,确保数据持久化;

  5. 流程收尾:所有表恢复完成后,子线程退出。

总结

mydumper 凭借多线程并发、文件结构化、一致性保障三大核心优势,完美解决了传统备份工具速度慢、恢复灵活度低的痛点。通过本文的安装配置、实战操作与原理解析,相信你已能熟练运用 mydumper 完成 MySQL 数据库的备份与恢复工作。在实际运维中,可根据数据库规模调整线程数(-t 参数),结合定时任务(crontab)实现自动化备份,进一步提升数据安全性。

到此这篇关于MySQL备份神器mydumper的原理、实操与恢复完全指南的文章就介绍到这了,更多相关MySQL备份mydumper实操与恢复内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql中count带条件计数实例代码

    Mysql中count带条件计数实例代码

    这篇文章主要给大家介绍了关于Mysql中count带条件计数的相关资料,Mysql中count()函数的一般用法是统计字段非空的记录数,所以可以利用这个特点来进行条件统计,需要的朋友可以参考下
    2023-09-09
  • Mysql性能调优之max_allowed_packet使用及说明

    Mysql性能调优之max_allowed_packet使用及说明

    这篇文章主要介绍了Mysql性能调优之max_allowed_packet使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • MySQL删除数据,表文件大小依然没变的原因

    MySQL删除数据,表文件大小依然没变的原因

    这篇文章主要介绍了MySQL删除数据,表文件大小依然没变的原因,帮助大家更好的理解MySQL中的数据表,感兴趣的朋友可以了解下
    2020-10-10
  • mysql 5.7.11 winx64安装配置方法图文教程

    mysql 5.7.11 winx64安装配置方法图文教程

    这篇文章主要为大家分享了mysql 5.7.11winx64安装配置方法图文教程,感兴趣的朋友可以参考一下
    2016-07-07
  • MySQL 创建多对多和一对一关系方法

    MySQL 创建多对多和一对一关系方法

    这篇文章主要介绍了MySQL 创建多对多和一对一关系方法,文章举例详细说明具有一定的参考价值,需要的小伙伴可以参考一下
    2022-03-03
  • mysql嵌套查询和联表查询优化方法

    mysql嵌套查询和联表查询优化方法

    本文描述了mysql嵌套查询和联表查询优化的方法,有些情况可以使用这种优化方法,而有些情况,这种方法就无能为力了
    2013-02-02
  • linux下安装mysql及mysql.sock问题

    linux下安装mysql及mysql.sock问题

    最近在linux上装mysql时遇到一些棘手的问题,百思不得其解,下面小编给大家带来了linux下安装mysql及mysql.sock问题,感兴趣的朋友一起看看吧
    2018-03-03
  • 关于MySQL的sql_mode合理设置详解

    关于MySQL的sql_mode合理设置详解

    这篇文章主要给大家介绍了关于MySQL的sql_mode合理设置的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • mysql中json基础查询详解(附图文)

    mysql中json基础查询详解(附图文)

    MySQL提供了一些函数来对JSON数据进行操作,下面这篇文章主要给大家介绍了关于mysql中json基础查询的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • MySQL创建用户以及用户权限详细图文教程

    MySQL创建用户以及用户权限详细图文教程

    在MySQL中可以通过创建用户来管理数据库的访问权限,下面这篇文章主要给大家介绍了关于MySQL创建用户以及用户权限的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-06-06

最新评论