日常备份数据库大家都习惯使用MySQL自带的mysqldump,如果是中小数据体量的数据库,mysqldump没有问题,但是如果数据库体量很大,使用mysqldump备份就特别慢,所以这里推荐一个带指定线程数进行并发备份的工具
mydumper
,官网参考http://www.mysqldumper.org/, 目前已经到 0.9.1版本
1、安装
# 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
但是该文件所在路径已经在ldconfig中配置,如下
# 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
文件(在后面编译成功的时候就可以看到依赖这个)
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
的软连
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编译成功
最后安装
3、用法介绍
可以通过mydumper --help
和 myloader --help
查看具体的配置选项,这里不做赘述,只说明日常用到的参数
mydumper
-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 与上面的一致
- -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 原理图