Mydumper介绍
Mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具。
Mydumper主要特性:
轻量级C语言写的
执行速度比mysqldump快10倍
事务性和非事务性表一致的快照(适用于0.2.2以上版本)
快速的文件压缩
支持导出binlog
多线程恢复(适用于0.2.1以上版本)
以守护进程的工作方式,定时快照和连续二进制日志(适用于0.5.0以上版本)
开源 (GNU GPLv3)
注意事项
mydumper采用多线程导出,所以无法保证导出顺序和使用mysqldump一致,可能会给某些依赖时间的特性(routine,event等)带来数据不一致,建议把mysql库和其他数据库分开导出导入。
mydumper提供的库提取和库合并功能依赖于分割符,所以要求用户数据库名不包含点号(.) ,表名不包含减号(-)。
官网:
https://github.com/mydumper/mydumper
Mydumper安装说明
先安装依赖
yum -y install glib2-devel mysql-devel zlib-devel pcre-devel zlib gcc-c++ gcc cmake
下载链接:
https://github.com/mydumper/mydumper/releases/tag/
https://github.com/mydumper/mydumper/tags
https://launchpad.net/mydumper
rpm安装
下载rpm包后安装使用
rpm -ivh mydumper-0.15.2-6.el7.x86_64.rpm
安装完成后会生成两个二进制文件mydumper和myloader,都位于/usr/local/bin目录下。(新版本安装后在/usr/bin目录下)
源码编译安装
下载源码包,然后解压,进入目录后执行
cmake .
make
make install
ubuntu
安装依赖
apt-get install libatomic1
安装包
release=$(curl -Ls -o /dev/null -w %{url_effective} https://github.com/mydumper/mydumper/releases/latest | cut -d'/' -f8)
wget https://github.com/mydumper/mydumper/releases/download/${release}/mydumper_${release:1}.$(lsb_release -cs)_amd64.deb
dpkg -i mydumper_${release:1}.$(lsb_release -cs)_amd64.deb
其他
或直接从如下链接下载:
mydumper_v1.0.0.tar.gz
tar xzvf cdb_mydumper_v1.0.0.tar.gz
解压后,会出现mydumper文件夹,里面有2个二进制执行文件。文件说明如下:
mydumper:云数据库数据多线程导出工具。
myloader:云数据库数据多线程导入工具.
无需安装直接加上执行权限即可以使用
mydumper参数介绍
-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
详细说明:
# 连接相关
-u, --user # 用户名
-p, --password # 直接输入密码
-a, --ask-password # 终端获取密码
-h, --host 127.0.0.1 # 指定地址
-P, --port 3306 # 指定端口
-S, --socket # 指定socket文件
-C, --compress-protocol # 压缩连接
-t, --threads 8 # 指定线程
# 指定需要备份的库、表
-B, --database thc_5000_dev5a # 指定数据库
-T, --tables-list db.a,db.b,db.c # 指定表列表(明确定义,非正则)
-O, --omit-from-file # 文件中按照 db.table 的格式按行声明(不支持正则)跳过的 库.表(优先级大于正则匹配)
-x, --regex # 正则表达式, 匹配 "db.table" 部分. e.g: thc_5000_dev5a\.wh_.*
--partition-regex # 根据"数据库分区"进行备份
--where # 根据查询结果进行备份, 配合 -B, -T 或 -x 对库表进行限制,只需填写条件, --where id=3
-U, --updated-since # 根据 update_time 进行备份
# statement 相关设置
-s, --statement-size # 单条sql大小限制, 默认1000000,使用需调大
-r, --rows 0 # 导出时单个sql文件的行数,0 表示没有限制
# 锁设置
--trx-consistency-only # 单事务备份,对标 mysqldump --single-transaction 参数,刷盘后开启事务保持数据一致性
--less-locking. # 使用线程锁,减少全局锁的加锁时间
-k, --no-locks # 不锁
--no-backup-locks
# 对比检查相关,记录到 metadata 文件
-M, --checksum-all # 所有
--data-checksums # 计算并记录 数据sql sum 值
--schema-checksums # 计算并记录 创建sql sum值
--routine-checksums # 计算并记录 视图、函数、触发器 sum值
# 输出相关
-o, --outputdir /backup/xx # 输出目录
-c, --compress # 压缩文件
# 备份可选项
-G, --triggers # 备份触发器,默认不备份
-E, --events # 备份事件,默认不备份
-R, --routines # 备份存储过程、函数,默认不备份
--views-as-tables # 把视图当做表进行导出
-W, --no-views # 不备份视图, 默认进行备份
-d, --no-data # 只备份表结构
--skip-definer # 备份视图、函数、存储过程、事件等时不备份definer
--set-names utf8mb4 # 指定字符集
# 处理长时间查询
--long-query-retries # 尝试检查长时间的查询,默认0,不重试
--long-query-retry-interval # 检查长时间查询的语句的间隔,默认60s
--long-query-guard , -l # 长时间执行超时秒数,默认60s
--kill-long-query , -K # 杀掉长时间的查询而不是终止dump操作
# 其他
-v, --verbose # 指定日志级别,0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2
-L, --logfile # 记录日志
--disk-limits # --disk-limits 100:500 当磁盘剩余空间小于100M时暂停,500M时恢复
--defaults-file # 可指定配置文件,用于隐藏账号密码
--defaults-extra-file
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指向该备份。
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
详细说明:
-u, --user # 用户名
-p, --password # 直接输入密码
-a, --ask-password # 终端获取密码
-h, --host 127.0.0.1
-P, --port 3306
-C, --compress-protocol # 连接就压缩
-e, --enable-binlog. # 主从同步中, 导入数据开启 binlog 记录, 可同步到 slave
-o, --overwrite-tables # 先 drop, 再写入
-d, --directory # 指定恢复数据目录
-s, --source-db # 指定恢复库名
-B, --database # 指定恢复的库
# 比如我导出的库包括 DB_A, DB_B, DB_C, 希望将 DB_C 恢复为 DB_D,则 -s DB_C -B DB_D
--set-names utf8mb4 # 设置字符集
-T, --tables-list
-x, --regex
--skip-triggers # 不导入 triggers
--skip-post # 不导入 events
--no-data # 不导入 数据
命令示例
导出整个库
./mydumper -h 127.0.0.1 –P 3306 –u root -p 123 -G -R -E -l -A -o alldb
导入整个库
./myloader -h 127.0.0.1 –P 3306 –u root -p 123 -d alldb
导出多个库
./mydumper -h 127.0.0.1 -P 3306 -u root -p 123 -G -R -E -l -B alarmDB,db_cms_logging,test -o dbs
导入多个库
./myloader -h 127.0.0.1 –P 3306 –u root -p 123 -d dbs
导出单库多表
./mydumper -h 127.0.0.1 –P 3306 –u root -p 123 -G -R -E -l -B alarmDB -T alarm_history,alarm_strategy -o tbs
导入单库多表
./myloader -h 127.0.0.1 –P 3306 –u root -p 123 –t 2 -d tbs
提取库导入
./myloader -h 127.0.0.1 –P 3306 –u root -p 123 -B alarmDB, db_cms_logging -d alldb
提取表导入
./myloader -h 127.0.0.1 –P 3306 –u root -p 123 -B alarmDB -T alarm_history,alarm_strategy -d dbs
多库导入单库(合服)
./myloader -h 127.0.0.1 –P 3306 –u root -p 123 -A newdir -B alarmDB -T alarm_history,alarm_strategy -d dbs
除了t1外,将test库其余表导出来:
/usr/bin/mydumper -h 127.0.0.1 -P 3306 -u root -p 123 -B test --regex '^(?!(test.t1$))' -c -t 6 -v 3 --rows 1000000 -o /backup -L /backup/test.log
全库备份shell参考:
#! /usr/bin/bash
Date=`date +%Y%m%d`
echo $Date-备份
rm -rf /backup/mybak-${Date}.tar.gz
rm -rf /backup/mybak-${Date}
mkdir -p /backup/mybak-$Date
mydumper -u root -p root -R -G -E --regex '^(?!(mysql|sys|performance_schema|information_schema))' -o /backup/mybak-$Date/
tar -zcvf /backup/mybak-${Date}.tar.gz /backup/mybak-$Date
#find ./ -name mybak-* -exec rm -rf {}\;
可配合crontab进行定时任务。




