Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL备份mydumper实操与恢复

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

作者:·云扬·

数据库备份是将数据库中的数据和结构复制到另一个位置,以便在需要时可以恢复数据,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 备份文件结构

典型文件清单:

四、备份原理深度解析

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

您可能感兴趣的文章:
阅读全文