白日依山尽,黄河入海流。欲穷千里目,更上一层楼。 -- 唐·王之涣

mysql数据库备份工具mydumper使用总结

日常备份数据库大家都习惯使用MySQL自带的mysqldump,如果是中小数据体量的数据库,mysqldump没有问题,但是如果数据库体量很大,使用mysqldump备份就特别慢,所以这里推荐一个带指定线程数进行并发备份的工具mydumper,官网参考http://www.mysqldumper.org/, 目前已经到 0.9.1版本

1、安装

1
2
3
4
5
6
7
8
9
10
# download
wget http://mp-weixin.colinspace.com/mydumper/mydumper-0.9.1.tar.gz
# untar
tar -zxf mydumper-0.9.1.tar.gz
# cmake
cd mydumper-0.9.1
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mydumper

# install
make && make install

2、安装问题

本次安装是在二进制安装Percona MySQL的环境,在进行 cmake 的时候报错,提示找不到 libperconaserverclient

mydumper-cmake-error

但是该文件所在路径已经在ldconfig中配置,如下

1
2
# cat /etc/ld.so.conf.d/mysql-x86_64.conf
/opt/app/mysql/lib

且 执行 ldconfig 使其生效,但是cmake依旧报错。

这个时候有两种方式修复:
2.1、安装mysql-devel,安装之后会在系统/usr/lib64/下生成 mysql 目录,里面有 libmysqlclient.so 文件(在后面编译成功的时候就可以看到依赖这个)

1
2
3
4
5
6
7
8
9
yum install mysql-devel

[root@devops-walle-vpc mydumper-0.9.1]# ls -l /usr/lib64/mysql
total 32356
-rw-r--r-- 1 root root 23379846 Sep 7 15:50 libmysqlclient.a
lrwxrwxrwx 1 root root 20 Oct 29 09:54 libmysqlclient.so -> libmysqlclient.so.20
lrwxrwxrwx 1 root root 25 Oct 29 09:54 libmysqlclient.so.20 -> libmysqlclient.so.20.3.23
-rwxr-xr-x 1 root root 9703280 Sep 7 15:50 libmysqlclient.so.20.3.23
-rw-r--r-- 1 root root 46558 Sep 7 15:50 libmysqlservices.a

2.2、受上面的启发,知道Cmake的时候会找/usr/lib64 或者 /lib64,所以在这两个目录下,做/opt/app/mysql/lib/libperconaserverclient.so.20.3.16的软连

1
2
ln -s /opt/app/mysql/lib/libperconaserverclient.so.20.3.16 /lib64/libperconaserverclient.so
ln -s /opt/app/mysql/lib/libperconaserverclient.so.20.3.16 /usr/lib64/libperconaserverclient.so

之后cmake编译成功

mydumper-cmake-success

最后安装

mydumper-make-install

3、用法介绍

可以通过mydumper --helpmyloader --help 查看具体的配置选项,这里不做赘述,只说明日常用到的参数

mydumper
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-h/--host 
-u/--user
-p/--password
-P/--port

-B/--database 需要备份的数据库
-T/--tables-list 逗号分割的表清单

-m/--no-schemas 不备份表的结构
-d/--no-data 不备份表的数据

-G/--triggers 备份触发器
-E/--events 备份events事件
-R/--routines 备份存储过程和函数

-c/--compress 压缩备份结果文件
-v/--verbose 备份结果日志输出 默认是2 warnings,建议是3 info
-t/--threads 备份启用的线程数 默认是4
-o/--outputdir 备份存放的目录,该目录下每个表单独一个文件,如果启用-c则为独立的压缩文件
-L/--logfile 备份过程的日志文件
myloader

-h/-u/-p/-P/-v/-t 与上面的一致

1
2
- -d/--directory 数据库备份的目录,从这个目录进行数据恢复
- -o/--overwrite-tables 如果表存在,则先清理表

4、实例案例

针对实际的数据库做备份和恢复,太简单这里就不写实际的脚本了

备份数据库
  • 常规备份

mydumper -h localhost -u root -p passwd -B dbanme -c -t 6 -v 3 -o /data/backup/dbname -L /data/backup/dbname-mydumper.log

  • 备份所有数据库

mydumper -h localhost -u root -p passwd -c -t 6 -v 3 -o /data/backup/dbinstance -L /data/backup/dbinstance-mydumper.log

  • 备份指定的表(或者多表, 多个表之间逗号分割)

mydumper -h localhost -u root -p passwd -B dbanme -T table1,table2 -c -t 6 -v 3 -o /data/backup/dbname -L /data/backup/dbname-mydumper.log

  • 带存储过程触发器的备份

mydumper -h localhost -u root -p passwd -B dbanme -G -R -c -t 6 -v 3 -o /data/backup/dbname -L /data/backup/dbname-mydumper.log

恢复数据库
  • 常规恢复

myloader - localhost -u root -p passwd -B dbanme -d /data/backup/dbname -o -v 3

  • 恢复到指定的数据库,备份的是dbsource,恢复到 dbtarget

myloader - localhost -u root -p passwd -B dbtarget –source-db=dbsource -d /data/backup/dbname -o -v 3

附加

mydumper 原理图

mydumper-原理图

作者

Colin

发布于

2021-10-10

许可协议