MySQL备份工具之mydumper

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

MySQL备份工具之mydumper

1 工具介绍

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

官网地址:https://launchpad.net/mydumper

GitHub 地址:https://github.com/maxbube/mydumper

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

  • 支持多线程导出数据,速度更快;

  • 支持一致性备份;

  • 支持将导出文件压缩,节约空间;

  • 支持多线程恢复;

  • 支持以守护进程模式工作,定时快照和连续二进制日志;

  • 支持按照指定大小将备份文件切割;

  • 数据与建表语句分离。

备份原理图:



备份过程主要步骤概括:

(1)  主线程 FLUSH TABLES WITH READ LOCK , 施加全局只读锁,以阻止 DML 语句写入,保证数据的一致性;

(2)  读取当前时间点的二进制日志文件名和日志写入的位置并记录在 metadata 文件中,以供即时点恢复使用;

(3)  N 个(线程数可以指定,默认是 4个)dump 线程 START TRANSACTION WITH CONSISTENT SNAPSHOT ; 开启读一致的事物;

(4)  dump non-InnoDB tables , 首先导出非事物引擎的表;

(5)  主线程 UNLOCK TABLES 非事物引擎备份完后,释放全局只读锁;

(6)  dump InnoDB tables , 基于事物导出 InnoDB 表;

(7)  事物结束。

2 常用备份工具对比


备份工具

安装难度

备份类型

备份速度

备份即时点

压缩备份

远程备份

mysqldump

自带

逻辑

不支持

不支持

支持

xtrabackup

比较难

物理

较快

支持

不支持

不支持

mydumper

简单

逻辑

支持

支持

支持


3 安装方法

下载对应的mydumper安装包,此处以centos或redhat的x86_64的安装包为例:

# wget https://github.com/maxbube/mydumper/releases/download/v0.10.7-2/mydumper-0.10.7-2.el7.x86_64.rpm

# rpm -ivh mydumper-0.10.7-2.el7.x86_64.rpm

4 参数说明

4.1 mydumper备份参数


参数名

缩写

含义

--user

-u

备份所使用的用户

--pasword

-p

连接所用的用户密码

--host

-h

MySQL 服务端地址

--port

-P

MySQL 端口号

--threads

-t

开启的备份线程数,默认是4

--database

-B

要备份的数据库,不指定则备份所有库

--tables-list

-T

需要备份的表,名字用逗号隔开

--outputdir

-o

备份文件输出的目录

--statement-size

-s

生成的insert语句的字节数,默认1000000,与--rows冲突

--rows

-r

将表按行分割,指定这个选项会关闭 --chunk-filesize

--chunk-filesize

-F

将表按大小分割时,指定分割大小,单位是 MB

--regex

-x

使用正则表达式匹配'db.table'

--compress

-c

压缩输出文件

--ignore-engines

-i

忽略的存储引擎

--no-schemas

-m

不备份表结构

--no-data

-d

不备份表数据

--triggers

-G

备份触发器

--events

-E

备份事件

--routines

-R

备份存储过程和函数

--no-views

-W

不备份视图

--no-locks

-k

不使用临时共享只读锁,使用这个选项会造成数据不一致

--daemon

-D

启用守护进程模式,守护进程模式以某个间隔不间断对数据库进行备份

--where


只导出选择的数据


使用示例:

# 备份全部数据库

mydumper -u root -p 123456  -r 100000 -o /mysql_backup/all/

注:全量备份会备份 mysql、sys 系统库及其他自建库

 

# 备份全部数据库 包含触发器、事件、存储过程及函数

mydumper -u root -p 123456 -G -R -E -o -r 100000 /mysql_backup/all2/

 

# 备份指定库

mydumper -u root -p 123456 -G -R -E -r 100000 -B  db1 -o /mysql_backup/db1/

 

# 使用正则 排除系统库

mydumper -u root -p 123456 -G -R -E  -r 100000 --regex '^(?!(mysql|sys))' -o /mysql_backup/all3

 

# 备份指定表

mydumper -u root -p 123456 -B db1 -T tb1,tb2  -r 100000 -o /mysql_backup/tb/

 

# 只备份表结构

mydumper -u root -p 123456 -d  -r 100000 -B  db1 -o /mysql_backup/nodata/

 

# 只备份表数据

mydumper -u root -p 123456 -m  -r 100000 -B db1 -o /mysql_backup/noschema/

 

# 压缩备份某个表

mydumper -u root -p 123456  -r 100000 -B db1 -T tb1 -c -o /mysql_backup/compress/


Tips:备份时建议配置-r 参数,按行分割,避免恢复时一次insert数据太多导致触发系统OOMKill。


4.2 myloader还原参数


参数名

缩写

含义

--user

-u

使用的用户名

--pasword

-p

连接所用的用户密码

--host

-h

MySQL   服务端地址

--port

-P

MySQL   端口号

--threads

-t

开启的线程数,默认是4

--directory

-d

指定待恢复的备份目录

--queries-per-transaction

-q

每次事务执行的查询数量,默认是1000

--overwrite-tables

-o

如果要恢复的表存在,则先drop掉该表

--database

-B

需要还原到哪个数据库(目标数据库)

--source-db

-s

选择被还原的数据库(源数据库)

--enable-binlog

-e

在恢复时开启binlog


使用示例:

# 恢复备份文件中的全部 若表已存在则先删除

myloader -u root -p 123456 -o -d /backups/all3

 

# 从全备中恢复指定库

myloader -u root -p 123456 -s db1 -o -d /backups/all3

 

# 将某个数据库备份还原到另一个数据库中(目标库不存在则会新建)

myloader -u root -p 123456 -B recover_db1 -s db1 -o -d /backups/all3

myloader -u root -p 123456 -B recover_db1 -o -d /backups/db1

 

# 恢复时开启binlog(有备库的时候需要开启)

myloader -u root -p 123456 -e -o -d /backups/db1

 

# 无法直接还原单表 只能找到单表的sql文件 进入命令行source 执行

source db1.tb1-schema.sql 还原表结构

source db1.tb1.sql 还原表数据


5 主从复制搭建


搭建主从的话,首先需要从主库备份一致性的数据份文件。

份方法一、常用的mysqldump份虽然没有问题,但是用来搭建主从就不太合适,因不能记录准确的位点信息或GITD号,搭建过程可能会存在数据冲突或者数据失的风险致主从同步失

份方法二、xtrabackup在后台线程不断追踪InnoDB的日志文件,然后复制InnoDB的数据文件。数据文件复制完成之后,日志的复制线程也会束。这样就得到了不在同一时间点的数据副本和开始份以后的事日志。由于xtrabackup是物理级备,且无法远,故需要的磁盘间至少是一倍的数据占用空间,对于大数据量且无挂共享存境不太友好

份方法三、mydumper可以支持多线、压缩、远等备份的,同时也支持记录点信息,便于搭建主从复制。


5.1 使用mydumper工具搭建主从复制

步骤1、主库授权

mysql> create user '同步用户'@'%' IDENTIFIED WITH mysql_native_password BY '密码';

mysql> grant replication client,replication slave on *.* to '同步用户'@'%';

mysql> flush privileges;

 

步骤2、主库数据备份

# mkdir -p 备份目录

# mydumper -h 主库地址 -u 用户 -p 密码 -P 数据库端口 -G -R -E -c -t 8 -r 100000 -o备份目录

注: -c 表示压缩备份;-t 8表示8线程。另外可以在从库或其他机器执行远程备份就无需从主库拷贝备份文件到从库了。

 

步骤3、查看备份即时点

备份即时点记录在备份目录下的metadata文件,记录了主库的binlog文件和位点以及GTID号,便于搭建主从复制。如下图:


 

步骤4、确保从库处于运行状态

# systemctl start mysqld

# systemctl status mysqld

 

步骤5、还原从库

# myloader -h 从库地址 -u 用户 -p 密码 -t 8 -o -d 备份目录


由于还原的从库数据库的uuid记录还是主库的,不能搭建主从,需要重启从库

# systemctl restart mysqld

 

步骤6、配置并开启主从复制(从库执行,下面的GTID和位点方式二选一,推荐GTID方式)

方式一、GTID方式:

mysql> reset slave all;

mysql> SET @@GLOBAL.GTID_PURGED='查询到的GTID号';

mysql> CHANGE MASTER TO MASTER_HOST='主库主机地址',

    MASTER_USER='同步用户',

    MASTER_PASSWORD='同步用户的密码',

    MASTER_PORT=主库端口,

    MASTER_AUTO_POSITION=1;

mysql> start slave;

mysql> show slave status\G;


 

方式二(二选一)、位点方式(binlog文件号和位点号可在xtrabackup_info文件中查到):

mysql> reset slave all;

mysql> CHANGE MASTER TO MASTER_HOST='主库主机地址',

    MASTER_USER='同步用户',

    MASTER_PASSWORD='同步用户的密码',

    MASTER_PORT=主库端口,

    MASTER_LOG_FILE='binlog文件号',

    MASTER_LOG_POS=位点号;

mysql> start slave;

mysql> show slave status\G;



步骤7、从库设为只读模式,避免从库写入业务数据导致主从不一致(请务必将从库设为只读模式

mysql> set global read_only=ON;

mysql> set global super_read_only=ON;


MySQL备份工具之mydumper

1 工具介绍mydumper 是一款社区开源的逻辑备份工具。该工具主要由 C 语言编写,目前由 MySQL 、Facebook 等公司人员开发维护。官网地...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息