前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 备份恢复(三)

MySQL 备份恢复(三)

作者头像
JiekeXu之路
发布2019-06-19 19:48:39
1.5K0
发布2019-06-19 19:48:39
举报
文章被收录于专栏:JiekeXu之路JiekeXu之路
前面两篇已经介绍了 MySQL

mydumper 最突出的特性就是可采用多线程并行备份,极大提高了数据导出的速度。其特征之一是在处理过程中需要对列表加以锁定,所以备份时尽量不要选择工作时间,避免引起 DML 阻塞。若是主从架构的话,从库一般处于只读状态,则可以直接在从库上执行备份操作,不会有 DML 堵塞了。

mydumper 特 性

①多线程备份

②因为是多线程逻辑备份,备份后会生成多个备份文件

③备份时对 MyISAM 表施加 FTWRL(FLUSH TABLES WITHREAD LOCK),会阻塞 DML 语句

④保证备份数据的一致性

⑤支持文件压缩

⑥支持导出 binlog

⑦支持多线程恢复

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

⑨支持将备份文件切块

mydumper 备份机制与流程

mydumper 备份也是属于逻辑备份,在进行数据备份时,mydumper 的主逻辑由一个主线程和多个备份子线程共同完成,默认情况下为四个子线程。

其主线程的主要流程为:

1、connect database : 连接数据库;

2、FLUSH TABLES WITH READ LOCK(FTWRL) : 将脏页刷新到磁盘并获得只读锁;

3、START TRANSACTION /!40108 WITH CONSISTENT SNAPSHOT / : 开启事务并获取一致性快照;

4、SHOW MASTER STATUS :获得 binlog 位点信息;

5、create thread and connect database : 创建子线程并连接数据库;

6、为子线程分配任务并 push 到队列 queue 中;

7、在子线程处理完所有非 InnoDB 表之后,UNLOCK TABLES / FTWRL / 释放锁;

8、thread.join() 等待子线程结束;

备份子线程的主要流程是:

1、connect database 连接数据库;

2、将 session 的隔离级别设置为 Repeatable Read;

3、START TRANSACTION /!40108 WITH CONSISTENT SNAPSHOT /开启事务并获取一致性快照;

4、从队列中 pop 任务并执行;

5、在所有非 InnoDB 表执行完之后,将事件通知给主线程。

mydumper工作流程图

mydumper 安 装

查看 mydumper 源码,是基于 c 语言编写的,使用 glibc 库,则 mydumper安装所依赖的软件包有 glibc, zlib, pcre, pcre-devel, gcc, gcc-c++, cmake, make, mysql 客户端库文件。

配置好 yum 源,安装依赖包(这里已经配置好本地 yum 源了)

代码语言:javascript
复制
代码语言:javascript
复制
yum install glib2-devel mysql-devel zlib-devel pcre-devel openssl-devel cmake
代码语言:javascript
复制

下载 mydumper 源码包,https://launchpad.net/mydumper/+download

然后编译安装即可。

代码语言:javascript
复制
tar -zxvf mydumper-0.6.2.tar.gz
cd mydumper-0.6.2/
cmake .
make
make install

查看帮助信息

代码语言:javascript
复制
[root@JiekeXu mydumper-0.6.2]# mydumper --help 
[root@JiekeXu mydumper-0.6.2]# myloader --help

使用 --help 便可以查看帮助信息,每个参数基本上都有解释,可以看下图英文介绍。

mydumper 重要参数说明:

代码语言:javascript
复制
-B, --database                要备份的数据库,不指定则备份所有库
-T, --tables-list             需要备份的表,名字用逗号隔开
-o, --outputdir               备份文件输出的目录
-m, --no-schemas              不备份表结构,只备份数据
-d, --no-data                 备份表结构,不备份数据
-G, --triggers                 Dumptriggers备份触发器
-c, --compress                压缩输出文件
-e, --build-empty-files       如果表数据是空,还是产生一个空文件(默认无数据则只有表结构文件)
-x, --regex                   使用正则表达式匹配'db.table'
--less-locking                减少对InnoDB表的锁施加时间
-h, --host                    连接的主机名
-u, --user                    用来备份的用户名
-p, --password                用户密码
-P, --port                    连接端口
-S, --socket                  使用socket通信时的socket文件
-t, --threads                 开启的备份线程数,默认是4
-C, --compress-protocol       压缩与mysql通信的数据
-V, --version                显示版本号

myloader 重要参数说明:

代码语言:javascript
复制
-d, --directory                   备份文件的文件夹
-o, --overwrite-tables            如果要恢复的表存在,则先drop掉该表,使用该参数,需要备份时候要备份表结构
-B, --database                    需要还原的数据库
-e, --enable-binlog               启用还原数据的二进制日志
-h, --host                        主机
-u, --user                        还原的用户
-p, --password                    密码
-P, --port                        端口
-S, --socket                      socket文件
-t, --threads                     还原所使用的线程数,默认是4
-C, --compress-protocol           压缩协议
-q, --queries-per-transaction     每次事物执行的查询数量,默认是1000
-V, --version                     显示版本

mydumper 实操备份恢复

备份全库,命令如下:

代码语言:javascript
复制
mydumper –u root –p root –o /tmp/backup/mydumper/

下面画重点了啊,得仔细看了,备份的目录要先建立好,用户名和密码后均有空格。还有备份后大多都是 .sql 文件记录了数据库的数据信息,schema.sql 文件记录了表结构信息,而有个叫 metdata 文件里却记录的是当前文件的 binlog 号和 position 号,用于后期搭建 slave 库。

备份指定的数据库 testdb 如下:

代码语言:javascript
复制
mydumper -u root -p root -B testdb -o /tmp/backup/mydumper/
代码语言:javascript
复制
[root@JiekeXumydumper]# ll
total12
-rw-r--r--1 root root 132 Apr 19 20:26 metadata
-rw-r--r--1 root root 223 Apr 19 20:26 testdb.t-schema.sql
-rw-r--r--1 root root 176 Apr 19 20:26 testdb.t.sql

还原指定的数据库 testdb 如下:

代码语言:javascript
复制
myloader –u root –p root –B testdb –d /tmp/backup/mydumper/

备份 testdb库下的t 表

代码语言:javascript
复制
mydumper -u root -p root -B testdb –T t -o /tmp/backup/mydumper/

#备份多个表用逗号分隔
mydumper -u root -p root -B testdb –T t,t1,t2 -o /tmp/backup/mydumper/

还原 testdb 库下的 t 表

代码语言:javascript
复制
myloader -u root -p root -B testdb –o t -d/tmp/backup/mydumper/

备份 testdb 库下的表 t 的表结构

代码语言:javascript
复制
mydumper -u root -p root -B testdb –T t –d  -o /tmp/backup/mydumper/

备份 testdb 库下的表 t 并压缩

代码语言:javascript
复制
mydumper -u root -p root -B testdb –T t –c  -o /tmp/backup/mydumper/

注意:建议备份恢复的时候加参数-v 3,显示详细的日志。

那么,今天也就讲到这里了,还有很多场景案例也许没有涉及到,但限于篇幅等有机会在说吧,XtraBackup 等备份工具等下次在介绍,保持关注就可以了!

参考资料:

https://cloud.tencent.com/developer/article/1149245

https://www.cnblogs.com/linuxnote/p/3817698.html

- End -

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JiekeXu之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mydumper 特 性
  • mydumper 备份机制与流程
  • mydumper 安 装
  • mydumper 实操备份恢复
  • 参考资料:
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档