安装
1、安装相关依赖
yum -y install glib2-devel mysql-devel zlib-devel pcre-devel zlib gcc-c++ gcc cmake
2、下载
https://github.com/mydumper/mydumper/releases/tag/
https://launchpad.net/mydumper
3、安装rpm包
rpm -ivh mydumper-0.15.2-6.el7.x86_64.rpm
安装完成后会生成两个二进制文件mydumper和myloader,都位于/usr/local/bin目录下。(新版本安装后在/usr/bin目录下)
4、编译
cmake .
make
make install
使用
mydumper 参数
-B, --database 要备份的数据库,不指定则备份所有库 -T, --tables-list 需要备份的表,名字用逗号隔开 -o, --outputdir 备份文件输出的目录 -s, --statement-size 生成的insert语句的字节数,默认1000000 -r, --rows 将表按行分块时,指定的块行数,指定这个选项会关闭 --chunk-filesize -F, --chunk-filesize 将表按大小分块时,指定的块大小,单位是 MB -c, --compress 压缩输出文件 -e, --build-empty-files 如果表数据是空,还是产生一个空文件(默认无数据则只有表结构文件) -x, --regex 是同正则表达式匹配 'db.table' -i, --ignore-engines 忽略的存储引擎,用都厚分割 -m, --no-schemas 不备份表结构 -k, --no-locks 不使用临时共享只读锁,使用这个选项会造成数据不一致 --less-locking 减少对InnoDB表的锁施加时间(这种模式的机制下文详解) -l, --long-query-guard 设定阻塞备份的长查询超时时间,单位是秒,默认是60秒(超时后默认mydumper将会退出) --kill-long-queries 杀掉长查询 (不退出) -b, --binlogs 导出binlog -D, --daemon 启用守护进程模式,守护进程模式以某个间隔不间断对数据库进行备份 -I, --snapshot-interval dump快照间隔时间,默认60s,需要在daemon模式下 -L, --logfile 使用的日志文件名(mydumper所产生的日志), 默认使用标准输出 --tz-utc 跨时区是使用的选项,不解释了 --skip-tz-utc 同上 --use-savepoints 使用savepoints来减少采集metadata所造成的锁时间,需要 SUPER 权限 --success-on-1146 Not increment error count and Warning instead of Critical in case of table doesn't exist -h, --host 连接的主机名 -u, --user 备份所使用的用户 -p, --password 密码 -P, --port 端口 -S, --socket 使用socket通信时的socket文件 -t, --threads 开启的备份线程数,默认是4 -C, --compress-protocol 压缩与mysql通信的数据 -V, --version 显示版本号 -v, --verbose 输出信息模式, 0 = silent, 1 = errors, 2 = warnings, 3 = info, 默认为 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
myloader使用参数
-d, --directory 备份文件的文件夹 -q, --queries-per-transaction 每次事物执行的查询数量,默认是1000 -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 压缩协议 -V, --version 显示版本 -v, --verbose 输出模式, 0 = silent, 1 = errors, 2 = warnings, 3 = info, 默认为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 -u root -p 'xxxxxDB2015!@#' -o /mnt/backup/
备份指定数据库mysqlhqdb:
mydumper -u root -p 'xxxxxDB2015!@#' -B mysqlhqdb -o /mnt/backup/
备份多张表(tableA,tableB):
mydumper -u root -p 'xxxxxDB2015!@#' -B mysqlhqdb -T tableA,tableB -o /mnt/backup/
只备份tableA表的数据,不备份表结构
mydumper -u root -p 'xxxxxDB2015!@#' -B mysqlhqdb -T tableA -m -o /mnt/backup/
备份tableA表的数据并进行压缩
mydumper -u root -p 'xxxxxDB2015!@#' -B mysqlhqdb -T tableA -c -o /mnt/backup/
还原
还原mysqlhqdb库
myloader -u root -p 'xxxxxDB2015!@#' -B mysqlhqdb -d /mnt/backup/
还原tableA表
myloader -u root -p 'xxxxxDB2015!@#' -B mysqlhqdb -o tableA -d /mnt/backup/