程序员开发实例大全宝库

网站首页 > 编程文章 正文

MySQL数据库(六)mydumper多线程备份

zazugpt 2024-10-23 16:52:57 编程文章 21 ℃ 0 评论

1.1 mydumper工具介绍与使用

mydumper是针对mysql数据库备份的一个轻量级第三方的开源工具,备份方式为逻辑备份。它支持多线程,备份速度远高于原生态的mysqldump以及众多优异特性。因此该工具是DBA们的不二选择。


1.2 mydumper的特点

  • 轻量级C语言写的
  • 执行速度比mysqldump快10倍,多线程逻辑备份,生产的多个备份文件
  • 事务性和非事务性表一致的快照(适用于0.2.2以上版本)
  • 支持文件压缩,支持导出binlog,支持多线程恢复,支持将备份文件切块
  • 多线程恢复(适用于0.2.1以上版本)
  • 以守护进程的工作方式,定时快照和连续二进制日志(适用于0.5.0以上版本)
  • 保证备份数据的一致性,
  • 与mysqldump相同,备份时对 MyISAM 表示加FTWRL (FLUSH TABLES WITH READ LOCK), 会阻塞DML 语句


1.3 mydumper安装

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

安装

rpm安装
wget https://github.com/maxbube/mydumper/releases/download/v0.9.5/mydumper-0.9.5-2.el7.x86_64.rpm
rpm -ivh mydumper-0.9.5-2.el7.x86_64.rpm
?
或者
源码安装
yum -y install glib2-devel mysql-devel zlib-devel pcre-devel cmake gcc-c++ git
git clone https://github.com/maxbube/mydumper.git
cd mydumper
cmake .
make && make install
?
?
#测试安装可能会有以下报错:
报错一:
[root@ c6s02 mydumper]# mydumper -V
mydumper: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
?
#解决办法:
[root@ c6s02 ~]# find / -name libmysqlclient.so.18.1.0
/usr/local/mysql/lib/libmysqlclient.so.18.1.0   --#找到自己mysql数据库下的libmysqlclient.so.18.1.0并做软连接
/root/mysql-5.6.45/libmysql/libmysqlclient.so.18.1.0
?
#做软连接
[root@ c6s02 ~]# ln -sv  /usr/local/mysql/lib/libmysqlclient.so.18.1.0 /lib64/libmysqlclient.so.18
?
报错二:
mydumper: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
?
wget https://ftp.pcre.org/pub/pcre/pcre-8.00.tar.gz
tar -zxvf  pcre-8.00.tar.gz
cd pcre-8.00
./configure --enable-utf8
make
make check
make install
?
#显示以下效果表示安装成功
[root@ c6s02 ~]# mydumper -V
mydumper 0.10.0, built against MySQL 5.6.45


1.4 mydumper语法及参数介绍

mydumper -u [USER] -p [PASSWORD] -h [HOST] -P [PORT] -t [THREADS] -b -c -B [DB] -o [directory]

注意:命令行之间要有空格 -u 用户名 -p 密码 之间必须有空格

-B, --database 需要备份的库
-T, --tables-list 需要备份的表,用,分隔
-o, --outputdir 输出文件的目录
-s, --statement-size Attempted size of INSERT statement in bytes, default 1000000
-r, --rows 试图分裂成很多行块表
-c, --compress 压缩输出文件
-e, --build-empty-files 即使表没有数据,还是产生一个空文件
-x, --regex 支持正则表达式
-i, --ignore-engines 忽略的存储引擎,用,分隔
-m, --no-schemas 不导出表结构
-k, --no-locks 不执行临时共享读锁 警告:这将导致不一致的备份
-l, --long-query-guard 长查询,默认60s
--kill-long-queries kill掉长时间执行的查询(instead of aborting)
-b, --binlogs 导出binlog
-D, --daemon 启用守护进程模式
-I, --snapshot-interval dump快照间隔时间,默认60s,需要在daemon模式下
-L, --logfile 日志文件
-h, --host
-u, --user
-p, --password
-P, --port
-S, --socket
-t, --threads 使用的线程数,默认4
-C, --compress-protocol 在mysql连接上使用压缩
-V, --version
 -v, --verbose 更多输出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2


1.5 myloader参数介绍:

-d, --directory 导入备份目录
-q, --queries-per-transaction 每次执行的查询数量, 默认1000
-o, --overwrite-tables 如果表存在删除表
-B, --database 需要还原的库
-e, --enable-binlog 启用二进制恢复数据
-h, --host
-u, --user
-p, --password
-P, --port
-S, --socket
-t, --threads 使用的线程数量,默认4
-C, --compress-protocol 连接上使用压缩
-V, --version
-v, --verbose 更多输出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2


1.6 mydumper输出文件:

metadata:元数据 记录备份开始和结束时间,以及binlog日志文件位置。
table data:每个表一个文件
table schemas:表结构文件
binary logs: 启用--binlogs选项后,二进制文件存放在binlog_snapshot目录下
daemon mode:在这个模式下,有五个目录0,1,binlogs,binlog_snapshot,last_dump。
备份目录是0和1,间隔备份,如果mydumper因某种原因失败而仍然有一个好的快照,
当快照完成后,last_dump指向该备份。

1.7 常用备份示例:

备份单个库

mydumper -u 用户名 -p 密码 -B 需要备份的库名 -o /tmp/bak
?
-B,需要备份的库   -o 输出文件的目录(备份输出指定的目录)

备份所有数据库

全库备份期间除了information_schema与performance_schema之外的库都会被备份
?
mydumper -u 用户名 -p 密码 -o /tmp/bak
 
 -o 输出文件的目录(备份输出指定的目录)

备份单表

mydumper -u 用户名 -p 密码 -B 库名 -T 表名 -o /tmp/bak
?
-T 需要备份的表,多表用逗号分隔 -o指定输出备份文件路径 

备份多表

mydumper -u 用户名 -p 密码 -B 库名 -T 表1,表2 -o /tmp/bak
?
当前目录自动生成备份日期时间文件夹,不指定-o参数及值时默认为:export-20150703-145806
?
mydumper -u 用户名 -p 密码 -B 数据库名字 -T 表名

不带表结构备份表

mydumper -u 用户名 -p 密码 -B 数据名字 -T 表名 -m
?
-m 不导出表结构

压缩备份及连接使用压缩协议(非本地备份时)

mydumper -u 用户名 -p 密码 -B 数据库名字 -o /tmp/bak -c -C
?
-c  压缩输出文件 -C 在mysql连接上使用压缩协议  -o 输出文件的目录(备份输出指定的目录)

备份特定表

mydumper -u 用户名 -p 密码 -B 数据库名字  --regex=actor* -o /tmp/bak
?
只备份以actor*开头的表
?
-x 正则表达式: 'db.table'  --regex  

过滤特定库,如本来不备份mysql及test库

mydumper -u 用户名 -p 密码 -B 数据库名字 --regex '^(?!(mysql|test))' -o /tmp/bak

基于空表产生表结构文件

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

设置长查询的上限,如果存在比这个还长的查询则退出mydumper,也可以设置杀掉这个长查询

mydumper -u root -p pwd -B sakila --long-query-guard 200 --kill-long-queries

备份时输出详细更多日志

mydumper -u 用户名 -p 密码 -B 数据库名字 -T 空表 -v 3 -o /tmp/bak
?
-v 更多输出, 0 = silent, 1 = errors, 2 = warnings, 3 = info,详细输出 default 2

导出binlog,使用-b参数,会自动在导出目录生成binlog_snapshot文件夹及binlog

mydumper -u root -p pwd -P 3306 -b -o /tmp/bak

总结: mysql备份,备份数据库、备份数据表。恢复也是恢复数据库,恢复数据表。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表