暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mydumper 备份工具

原创 谭磊Terry 恩墨学院 2022-05-24
1252

mydumper 简介

mydumper 是一款社区开源的逻辑备份工具。该工具主要由 C 语言编写,目前由 MySQL 、Facebook 等公司人员开发维护。

官网地址:https://launchpad.net/mydumper
GitHub 地址:https://github.com/maxbube/mydumper

参考官方介绍,mydumper 主要有以下几点特性:

  • 支持多线程导出数据,速度更快。
  • 支持一致性备份。
  • 支持将导出文件压缩,节约空间。
  • 支持多线程恢复。
  • 支持以守护进程模式工作,定时快照和连续二进制日志。
  • 支持按照指定大小将备份文件切割。
  • 数据与建表语句分离。

mydumper 安装

安装方法大概有两种,一种是编译安装,一种是 yum 直接安装 rpm 包。下面以 CentOS 系统为例,简单展示下安装方法:

# 1.编译安装
[root@localhost ~]# yum -y  install glib2-devel mysql-devel zlib-devel pcre-devel zlib gcc-c++ gcc cmake
[root@localhost ~]# wget https://launchpad.net/mydumper/0.9/0.9.1/+download/mydumper-0.9.1.tar.gz
[root@localhost ~]# tar zxf mydumper-0.9.1.tar.gz
[root@localhost ~]# cd mydumper-0.9.1/
[root@localhost mydumper-0.9.1]# cmake .
[root@localhost mydumper-0.9.1]# make
[root@localhost mydumper-0.9.1]# make install
# 安装完成后生成两个二进制文件 mydumper 和 myloader 位于 /usr/local/bin 目录下
[root@localhost bin]# ls /usr/local/bin/
mydumper  myloader

# 2.直接安装 rpm 包
# rpm包地址:https://github.com/maxbube/mydumper/releases 请根据自己的系统类型选择下载版本
[root@localhost ~]# yum install https://github.com/maxbube/mydumper/releases/download/v0.10.7-2/mydumper-0.10.7-2.el7.x86_64.rpm
# 安装完成后生成两个二进制文件 mydumper 和 myloader 位于 /usr/bin 目录下

# 若使用报错
cp /app/mysql/lib/libmysqlclient.so.20 /usr/{lib,lib64}

mydumper 使用

# 备份全部数据库,包含触发器、事件、存储过程及函数
mydumper -u root -p 123456 -o /mysql_backup/all/
mydumper -G -E -R --skip-tz-utc --complete-insert -h 100.64.101.81 -P 3307 -u root -p xxx -t 16 -o /tmp/riskdb -D -L /tmp/mydumper.log
# 全量备份会备份 mysql、sys 系统库及其他自建库

# 还原( -o, --overwrite-tables  若表存在则删除)
nohup myloader -h 100.64.101.187 -P 3307 -u root -p xxx  -t 16 -o -d /ftpserver/yacedb/databack/frontdb20191109/0  &

# 备份全部数据库 
mydumper -u root -p 123456 -G -R -E -o /mysql_backup/all2/

# 使用正则备份指定库,不能通过像 mysqldump 那样以逗号分隔备份多个库,而是通过正则表达式来达到备份多个库的目的。
mydumper -u root -p root -h 192.168.2.249 -P 3306 --regex '^(db3\.|db2\.)'  -o /backup/mysql/db3_db2_3306

mydumper -u root -p root -h 192.168.2.249 -P 3306 --regex 'db3|db2'  -o /backup/mysql/db3_db2_3306

# 使用正则排除系统库
mydumper -u root -p 123456 -G -R -E --regex '^(?!(mysql|test))' -o /mysql_backup/all3

# 备份指定表
mydumper -u root -p 123456 -B db1 -T tb1,tb2 -o /mysql_backup/tb/

# 备份多个库下的大部分表(不需要备份的表数量较少)
mydumper -u root -p root -h 192.168.2.249 -P 3306 --regex '^(?!db3\.t1|db3\.t2|db2\.b1|db2\.b2)' -o /backup/mysql/bak

# 只备份表结构
mydumper -u root -p 123456 -d -B db1 -o /mysql_backup/nodata/

# 只备份表数据
mydumper -u root -p 123456 -m -B db1 -o /mysql_backup/noschema/

# 压缩备份某个表
mydumper -u root -p 123456 -B db1 -T tb1 -c -o /mysql_backup/compress/

# 基于空表产生表结构文件
#mydumper -u 用户名 -p 密码 -B 数据库名字 -T 空表 -e -o /tmp/bak
-e 即使表没有数据,还是产生一个空文件

# 设置长查询的上限,如果存在比这个还长的查询则退出mydumper,也可以设置杀掉这个长查询
#mydumper -u leshami -p pwd -B sakila --long-query-guard 200 --kill-long-queries

案例

备份多个库下的多张表
只备份多个库下的几张表(要备份的表数量较少,\b表示精确匹配)
mydumper -u root -p xxx -h 100.64.102.86 -P 3307 --regex '^(market.biz_group_qrcode)\b|(market.biz_marketing_manager)\b' --daemon -o /ftpserver/yacedb/databack/middle0430

备份多个库下的大部分表(不需要备份的表数量较少)
mydumper -u root -p root -h 192.168.2.249 -P 3306 --regex '^(?!db3\.t1\b|db3\.t2\b|db2\.b1\b|db2\.b2\b)' -o /backup/mysql/bak

mydumper -u root -p xxx -h 100.64.102.82 -P 3307  --regex '^(?!riskcontrol\.template_flow_instance|riskcontrol\.interface_log|riskcontrol\.his_template_flow_instance|riskcontrol\.credit_task|riskcontrol\.his_credit_task|riskcontrol\.his_customer_credit)'  --daemon  -o /ftpserver/yacedb/databack/riskdb20200307 

还原数据库
nohup myloader -u root -p xxx -h 100.64.101.187 -P 3307  -o -d /ftpserver/yacedb/databack/frontdb20191109/0 &

mydumper 文件

以上是针对不同场景给出的相应备份语句,实际执行后,我们发现:mydumper 备份会产生多个文件,比如建库、建表、表数据等都分别在不同文件中。以 db1 库的全备为例,来看下备份出的文件命名规则及作用。

[root@localhost ~]# cd /mysql_backup/db1/
[root@localhost db1]# tree .
.
├── db1-schema-create.sql
├── db1-schema-post.sql
├── db1.tb1.metadata
├── db1.tb1-schema.sql
├── db1.tb1-schema-triggers.sql
├── db1.tb1.sql
├── db1.tb2.metadata
├── db1.tb2-schema.sql
├── db1.tb2.sql
├── db1.tb3.metadata
├── db1.tb3-schema.sql
├── db1.view1-schema.sql
├── db1.view1-schema-view.sql
└── metadata

0 directories, 14 files

可能各个版本备份出来的文件命名稍有不同,从文件命名可以较为明显的看出该文件的内容,大致总结下文件命名规则如下:

  • dbname-schema-create.sql:建库语句。
  • dbname-schema-post.sql:包含事件、存储过程及函数创建语句(若存在则有该文件)。
  • dbname.tbname.metadata:记录这个表的行数。
  • dbname.tbname-schema.sql:此表的创建语句。
  • dbname.tbname-schema-triggers.sql:创建触发器语句(若该表存在触发器 则有此文件)。
  • dbname.tbname.sql:该表的插入数据语句(若该表为空 则不存在此文件)。
  • dbname.viewname-schema.sql:创建视图语句(只列举出视图字段)。
  • dbname.viewname-schema-view.sql:创建视图的真正语句。
  • metadata:记录开始及结束备份的时间以及二进制日志位置。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论