mydumper与myloader使用介绍

1.介绍

mydumper与myloader是github上的一个开源工具,用于mysql数据库的备份与恢复。

相比于mysql自带的备份与恢复工具,mydumper和myloader的优势在于使用的是多线程进行备份与恢复,所以它的效率更高。

mydumper:对指定的库表进行备份

myloader:利用mydumper备份的文件进行恢复

2.用法

用法参考官方文档

mydumper文档地址:
https://github.com/mydumper/mydumper/blob/master/docs/mydumper_usage.rst
myloader文档地址:https://github.com/mydumper/mydumper/blob/master/docs/myloader_usage.rst

这里列举一些常用的选项

mydumper选项

选项描述
-u -p -h -P与mysql一致,用于指定要备份的mysql的用户名、密码、主机和端口
-B要备份的库
-T要备份的表,多个用逗号分隔,如果没有指定-T,则是备份整个库
-t备份时使用的线程数,默认为4,根据cpu核数决定;多线程可同时对多个表进行备份
-o备份文件的输出目录
-c压缩导出的备份文件,默认使用gzip压缩
-v是一个数字,表示备份时日志的输出级别,0不输出提示;1输出错误信息;2输出警告和错误信息;3输出所有信息
-F块大小,单位MB,备份时根据此信息将一个表拆分为多个备份文件。假设现在有一个1TB大小的表,块大小设置为1024MB(1GB),那么会生成约1024个该表的备份文件,每个1GB,如果开启了压缩(-c),则每个文件可能只有几百MB
-k不使用共享读锁,这样备份时不会阻塞业务,但可能导致备份数据不一致

myloader选项

基本选项与mydumper一致,如-u -p -h -P指定mysql信息,-v指定日志级别等

选项描述
-r指定执行insert语句时一次插入的记录条数。因为使用的是inert into ... values(),()...如果一次性插入过多数据,可能导致sql过大,mysql不能处理,与max_allowed_packet有关
-q每个事务的查询数,默认1000。我猜测恢复时可能开启了多个事务来插入数据,假设-r设为1000,-q也设为1000,则一个事务会插入十万条数据
-d备份文件所在的目录,即mydumper使用-o指定的文件输出位置
-o恢复时如果表已经存在了,则会删除表再恢复
3.实际使用

一般,我们进行备份恢复时,因为库表较大,通常会让程序在后台运行,即配合nohup使用。

3.1执行情况监控

命令执行后,任务就在后台开始执行了,可以使用以下命令查看情况

  • jobs 查看后台进行的任务,可判断任务是否执行完

  • du -h 查看目录大小,我们可以进入备份文件所在目录的父目录,查看备份文件目录的大小

  • ps -ef | grep mydumper 查看mydumper进程是否存在

  • top 查看mydumper进程的执行信息,可以通过cpu使用率判断当前有几个线程在备份,如400则表示有4个线程在进行备份操作

  • vivim 最有效的监控方式还是查看日志文件,通过日志文件的是否有警告和错误来进行决策,一般搜索critical和warn关键字来判断备份或恢复的过程中是否出现问题。

3.2备份整个库
nohup mydumper -u zhuzi -p '123456' -P 3306 -h 192.168.86.111 -B db01 -o /data/backup/db01/ -c -t 8 -v 3 > /data/log/db01-export-2024-04-13.log 2>&1 &

我这里备份的是db01整个库,将备份文件输出到/data/backup/db01目录下,使用了8个线程,开启了压缩和打印全部日志信息,并将日志信息重定向到了/data/log/db01-export-2024-04-13.log文件中

3.3备份指定表
nohup mydumper -u zhuzi -p '123456' -P 3306 -h 192.168.86.111 -B db02 -T t1,t2,t3 -o /data/backup/db02/ -c -t 8 -v 3 > /data/log/db02-export-2024-04-13.log 2>&1 &

针对db02库下的t1、t2和t3三个表进行备份

3.4备份并排除某些表

在mydumper中,没有什么exclude选项,而是通过正则表达式来进行匹配的

nohup mydumper -u zhuzi -p '123456' -P 3306 -h 192.168.86.111 --regex '^(?=(?:(db01\.)))(?!(?:(db01\.t1$|db01\.t2$)))' -o /data/backup/db01/ -c -t 8 -v 3 > /data/log/db01-export-2024-04-13.log 2>&1 &

通过–regex指定匹配库表的正则表达式,使用后就不需要使用-B和-T来指定库表了

这里备份db01库下除了t1和t2之外的所有表

3.5恢复
nohup myloader -u zhuzi -p '123456' -P 3306 -h 192.168.86.111 -B db01 -d /data/backup/db01/ -t 6 -q 1 -o -v 3 > /data/log/db01-import-2024-04-13.log 2>&1 &

这里-q指定为1,即一个事务只执行一个插入操作(效率低,稳妥起见),-o则覆盖已存在的表
恢复时,指定好要恢复的库和备份文件的位置即可,他完全是根据你的备份文件来恢复的,没有过滤库表的功能,因此,如果此时只想恢复某个表,但备份文件是整个库或还有其他表的信息,则需要针对该表重新备份。

4.备份恢复的一些注意事项
  • 恢复过程中,如果日志显示表已存在了,则需要添加-o参数覆盖表
  • 备份往往比恢复要快很多,毕竟一个是查询,一个是插入。稳妥起见,把线程数、查询数和一次插入数进行合理设置,如果某个大表恢复了一大半,结果mysql连接断开了,那真是…
  • 对于迁移数据到分布式数据库,计算节点通常设置了一些策略,如表必须有主键,那么恢复时,如果表没有主键,则会报错。恢复过程中出现了问题,需要注意是否是计算节点的配置导致的
  • 注意磁盘大小,备份时,可以使用-c压缩文件,所以磁盘空间要求低;而恢复时,则要求磁盘空间比数据文件要大
  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值