【赵渝强老师】使用mydumper备份MySQL

发布于:2025-06-26 ⋅ 阅读:(16) ⋅ 点赞:(0)

在这里插入图片描述

MySQL在备份方面包含了自身的mysqldump工具,但其只支持单线程工作,这就使得它无法迅速的备份数据。而mydumper作为一个实用工具,能够良好支持多线程工作,这使得它在处理速度方面十倍于传统的mysqldump。其特征之一是在处理过程中需要对列表加以锁定,因此如果我们需要在工作时段执行备份工作,那么会引起DML阻塞。但一般现在的MySQL都有主从,备份也大部分在从上进行,所以锁的问题可以不用考虑。这样,mydumper能更好的完成备份任务。

mydumper具备以下特点:

  • 轻量级C语言写的
  • 执行速度比mysqldump快10倍
  • 事务性和非事务性表一致的快照(适用于0.2.2以上版本)
  • 快速的文件压缩
  • 支持导出binlog
  • 多线程恢复(适用于0.2.1以上版本)
  • 以守护进程的工作方式,定时快照和连续二进制日志(适用于0.5.0以上版本)
  • 开源组件(GNU GPLv3)
视频讲解如下

【赵渝强老师】使用mydumper备份MySQL

下面通过具体的步骤来演示如何使用mydumper进行数据库的热备份与恢复。
(1)安装mydumper

yum install -y \
https://github.com/maxbube/mydumper/releases/download/v0.9.5/mydumper-0.9.5-2.el7.x86_64.rpm

(2)查看mydumper的帮助信息

mydumper --help

# 输出的信息如下:
Usage:
  mydumper [OPTION...] multi-threaded MySQL dumping

Help Options:
  -?, --help             Show help options

Application Options:
  -B, --database         Database to dump
  -T, --tables-list      Comma delimited table list to dump 
                            (does not exclude regex option)
  -O, --omit-from-file   File containing a list of database.table 
entries to skip, one per line 
(skips before applying regex option)
  -o, --outputdir        Directory to output files to
  ......

下表是mydumper常用参数的说明。
在这里插入图片描述

(3)创建mydumper备份的存储目录

mkdir -p /databackup/mydumper/all/

《MySQL数据库从零开始》

(4)备份所有数据库

mydumper -u root --password=Welcome_1 \
--socket /tmp/mysql.sock \
--outputdir /databackup/mydumper/all/

# 提示:这里的--socket /tmp/mysql.sock参数是必须的。在默认情况下mydumper在加载
       /var/lib/mysql/mysql.sock文件。如果该文件不存在,将出现下面的错误信息。
** (mydumper:69463): CRITICAL **: Error connecting to database: 
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

(5)查看目录/databackup/mydumper/下的内容

tree /databackup/mydumper/all | more

# 输出的信息如下:
/databackup/mydumper/all
├── demo1.audit_message-schema.sql
├── demo1.audit_message.sql
├── demo1.classes-schema.sql
├── demo1.dept-schema.sql
├── demo1.dept.sql
├── demo1.emp-schema.sql
├── demo1.emp.sql
├── demo1.indextable1-schema.sql
├── demo1.indextable1.sql
......

(6)查看文件/databackup/mydumper/demo1.emp.sql的内容

cat /databackup/mydumper/demo1.emp.sql

# 输出的信息如下:
/*!40101 SET NAMES binary*/;
/*!40014 SET FOREIGN_KEY_CHECKS=0*/;
/*!40103 SET TIME_ZONE='+00:00' */;
INSERT INTO `emp` VALUES
(7369,"SMITH","CLERK",7902,"1980/12/17",800,NULL,20),
(7499,"ALLEN","SALESMAN",7698,"1981/2/20",1600,300,30),
(7521,"WARD","SALESMAN",7698,"1981/2/22",1250,500,30),
(7566,"JONES","MANAGER",7839,"1981/4/2",3670,NULL,20),
(7654,"MARTIN","SALESMAN",7698,"1981/9/28",1250,1400,30),
(7698,"BLAKE","MANAGER",7839,"1981/5/1",2850,NULL,30),
(7782,"CLARK","MANAGER",7839,"1981/6/9",2550,NULL,10),
(7788,"SCOTT","ANALYST",7566,"1987/4/19",3000,NULL,20),
(7839,"KING","PRESIDENT",-1,"1981/11/17",5950,NULL,10),
(7844,"TURNER","SALESMAN",7698,"1981/9/8",1500,NULL,30),
(7876,"ADAMS","CLERK",7788,"1987/5/23",1100,NULL,20),
(7900,"JAMES","CLERK",7698,"1981/12/3",950,NULL,30),
(7902,"FORD","ANALYST",7566,"1981/12/3",3000,NULL,20),
(7934,"MILLER","CLERK",7782,"1982/1/23",1400,NULL,10);

# 提示:可以看出mydump也将数据备份成了SQL语句。

(7)备份指定数据库demo1

mkdir -p /databackup/mydumper/demo1/

mydumper -u root --password=Welcome_1 \
--socket /tmp/mysql.sock \
--database demo1 \
--outputdir /databackup/mydumper/demo1/

(8)备份指定数据库demo1下指定的表(员工表和部门表)

mkdir -p /databackup/mydumper/multi_tables/

mydumper -u root --password=Welcome_1 \
--socket /tmp/mysql.sock \
--database demo1 \
--tables-list emp,dept \
--outputdir /databackup/mydumper/multi_tables/

(9)删除demo1数据库

mysqladmin -uroot -pWelcome_1 drop demo1

# 输出的信息如下:
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'demo1' database [y/N] y
Database "demo1" dropped

(10)使用myloader执行恢复数据库demo1

mysqladmin -uroot -pWelcome_1 create demo1 

myloader -u root -p Welcome_1 --socket /tmp/mysql.sock \
--database demo1 \
-d /databackup/mydumper/demo1/

# 提示:在执行恢复之前,demo1如果没有,则需要事先创建。

(11)检查数据是否恢复

《MySQL数据库从零开始》


网站公告

今日签到

点亮在社区的每一天
去签到