多线程逻辑复制工具,实现chunk级别的并行备份,备份还可以将一张表写入一个甚至多个备份文件。 这样恢复时,不仅能实现表与表之间的并行恢复,还能实现同一张表在不同备份文件之间的并行恢复。
安装
下载安装
https://github.com/mydumper/mydumper/tags
tar xvf mydumper-0.15.0-7.tar.gz
tar zxvf mydumper-0.9.1.tar.gz
cd mydumper-0.9.1
cmake .
make
make install
yum install glib2-devel mysql-devel zlib-devel pcre-devel openssl-devel gcc-c++ cmake
安装完成后,在/usr/local/bin下有 mydumper 、myloader
安装报错问题解决
mydumper: error while loading shared libraries: libmysqlclient.so.21: cannot open shared object file: No such file or directory
```none
# locate libmysqlclient.so.21
# ll /usr/local/mysql/lib/
# cp /usr/local/mysql/lib/libmysqlclient.so.21 /usr/lib/
# ldconfig
# ldd /usr/local/bin/mydumper
# mydumper --help
```
mydumper: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory
```none
wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
cd openssl-1.1.1o
./config
make
sudo make install
cp ./libssl.so.1.1 /usr/lib/
cp ./libcrypto.so.1.1 /usr/lib/
ldconfig
```
mydumper -V
mydumper v0.15.0-7, built against MySQL 8.0.25 with SSL support
mydumper -h 116.63.145.178 -P 3306 -u super -p super -t 10 -o /data/backup
mysqldump -usuper -p’super’ -h116.63.145.178 -P3306 --single-transaction --master-data=2 --set-gtid-purged=OFF --hex-blob --triggers --routines --events -A > /tmp/all.sql
metadata中记录备份的信息
File = mysql-bin.000002
Position = 736867
Executed_Gtid_Set = ff5d8661-1338-11ee-936b-fa163e8de5fc:1-17
常用选项
mydumper选项
-B,–database
指定备份库,指定多个中间用,隔开
-T,–tables-list
指定表,表必须是database.table形式,可以指定多张表,中间用,隔开
-O, --omit-from-file
忽略文件中指定表的备份
-x,–regex
指定库的备份,支持正则表达式
-i, --ignore-engines
忽略指定引擎表的备份,逗号隔开
–trigger --events --routines
触发器,定时器,存储过程备份
-W, --no-views
不备份视图
-m, --no-schemas
不备份表结构
-d, --no-data
不备份数据
–where
只导出满足where条件的数据
-r, --rows
使用该选项会将表分成多个chunk进行并行备份,否则只进行表级别的备份。
-F, --chunk-filesize
对于不能进行并行备份的表,会写到一个文件中,恢复也只能启动一个线程来恢复,
可以使用该参数,将单表数据写到多个文件中,这样恢复时,可以启动多个线程进行并行恢复
–max-rows
限制单个chunk的最大行数,默认是1000000
-k, --no-locks
备份过程中不加任何锁
–use-savepoints
每个表备份之前设置savepoint,可提高DDL并发性
–lock-all-tables
使用LOCK TABLE …READ 命令加表锁代替全局读锁
-c,–compress
压缩备份
-t,–threads
指定备份的数量,默认是4
-L,–logfile
将日志输出到指定文件,默认是输出到终端
myloader选项
-h,–host
-p,–port
-u,–user
-p,–password
-S,–socket
-s,–source-db
指定要导入的库,只能指定单个库
-B,–database
将表导入到-B指定的库
–skip-trigger
不导入触发器
–skip-post
不导入定时器,存储过程和函数
–no-data
不导入数据
-T,–tables-list
只导入指定表,必须是database.table形式
–skip-definer
移除create中的definer子句
-q, --queries-per-transaction
多久提交一次,默认是1000个insert
–innodb-optimize-keys
先导入数据,再添加索引
-o, --overwrite-tables
导入时,对于已经存在的表,会首先执行drop table操作
-e, --enable-binlog
导入时,开启binlog,默认sql_log_bin设置为0
–purge-mode
-o, --overwrite-tables的基础上,可指定DROP truncate delete操作
–max-threads-per-table
针对单表的最大线程数,默认是4
-t, --threads
导入线程的数量
常见用法
备份
mydumper -h 116.63.145.178 -P 3306 -u super -p super -G -E -R -r100000 -F 64 -t 10 -o /data/backup/mydumper
-r指定分片大小(行)
-F 单个chunk大小,单位M
-t指定线程数量
mydumper -h 116.63.145.178 -P 3306 -u super -p super -B world -o /data/backup/world
备份单个库
mydumper -h 116.63.145.178 -P 3306 -u super -p super -T world.city,world.country -o /data/backup/world1
备份指定表
mydumper -h 116.63.145.178 -P 3306 -u super -p super -G -E -R -F 64 -t 10 -o /data/backup/mydumper
忽略world库的备份
忽略指定表-O world.city
恢复
mydumper -h 116.63.145.178 -P 3306 -u super -p super -B world -o /data/backup/world1111111111
drop database world;
myloader -h 116.63.145.178 -P 3306 -u super -p super -o -e -t 8 -d /data/backup/world1111111111
-o 用于删除已经存在的表或视图
-e用于开启binlog
-t 指定导入线程的并发线程数
myloader -h 116.63.145.178 -P 3306 -u super -p super -e -s world -d /data/backup/world1111111111
导入指定库-
myloader -h 116.63.145.178 -P 3306 -u super -p super -e -s world -B word_1 -d /data/backup/world1111111111
导入到另外一个库




