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实操与恢复内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pymysql.err.DataError:(1264, ")异常的有效解决方法(最新推荐)

    pymysql.err.DataError:(1264, ")异常的有效解决方法(最新推荐)

    遇到pymysql.err.DataError错误时,错误代码1264通常指的是MySQL数据库中的Out of range value for column错误,这意味着你尝试插入或更新的数据超过了对应数据库列所允许的范围,这篇文章主要介绍了pymysql.err.DataError:(1264, ")异常的有效问题,需要的朋友可以参考下
    2024-05-05
  • MySQL 8.0 Online DDL快速加列的相关总结

    MySQL 8.0 Online DDL快速加列的相关总结

    在实际的MySQL运维过程中,我们经常会遇到业务需要给某张表添加字段的情况,本文将介绍几种加字段的方法,感兴趣的朋友可以参考下
    2021-06-06
  • MySQL插入中文不乱码的5种方法

    MySQL插入中文不乱码的5种方法

    这篇文章主要介绍了MySQL 插入中文不乱码的5种方法,需要的朋友可以参考下
    2016-06-06
  • MySQL如何添加数据insert命令

    MySQL如何添加数据insert命令

    这篇文章主要介绍了MySQL如何添加数据insert命令问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • MySQL 序列(AUTO_INCREMENT)的使用示例

    MySQL 序列(AUTO_INCREMENT)的使用示例

    本文主要介绍了MySQL 序列(AUTO_INCREMENT)的使用示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-11-11
  • Mysql查询以某"字符串"开头的查询方式

    Mysql查询以某"字符串"开头的查询方式

    这篇文章主要介绍了Mysql查询以某"字符串"开头的查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • mysql中GROUP_CONCAT函数使用及遇到问题详解

    mysql中GROUP_CONCAT函数使用及遇到问题详解

    这篇文章主要给大家介绍了关于mysql中GROUP_CONCAT函数使用及遇到问题的相关资料,GROUP_CONCAT是用于将分组后的多个行连接为一个字符串的聚合函数,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Mysql删除重复的数据 Mysql数据去重复

    Mysql删除重复的数据 Mysql数据去重复

    这篇文章主要介绍了Mysql删除重复的数据 Mysql数据去重复,需要的朋友可以参考下
    2016-08-08
  • Navicat for MySQL 15注册激活详细教程

    Navicat for MySQL 15注册激活详细教程

    这篇文章主要介绍了Navicat for MySQL 15注册激活详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • MySQL数据表修改与管理的完整指南

    MySQL数据表修改与管理的完整指南

    在数据库的日常使用中,我们经常需要对已有的数据表进行调整和优化,无论是修改表结构、删除不再需要的表,还是管理临时数据,本文将全面讲解MySQL数据表的修改、删除和临时表管理,让你轻松应对各种表管理需求,需要的朋友可以参考下
    2026-02-02

最新评论