前言:最近打算对公司内部某核心系统数据库进行升级改造,替换原先的Mariadb10.1.12为官方版本MySQL5.7.21,初步测试了一下,貌似不能通过平滑升级的方案进行直接升级,这里打算采用逻辑导出再导入的方法,因为可维护的窗口时间较短,所以要尽可能减少导出再恢复的时间。
一、mydumper安装
去mydumper官网下载最新版本,我这里下载的是0.9.1版本,安装方法很简单。
1.上传服务器,解压缩
2.进入解压缩目录以后
cmake .
make
make install
3.在解压缩的目录后会生成两个文件mydumper和myloader,分别用于备份和恢复。
二、mydumper使用
具体使用方法直接加--help即可
binlog.h CMakeCache.txt cmake_install.cmake common.h config.h.in g_unix_signal.c install_manifest.txt mydumper mydumper.h myloader.c README server_detect.h
[root@mysql-qb-02 mydumper]# ./mydumper --help
Usage:
mydumper [OPTION...] multi-threaded MySQL dumping
Help Options:
-?, --help Show help options
Application Options:
-B, --database 需要备份的数据库
-T, --tables-list 需要备份的表,用,隔开
-o, --outputdir 导出目录
-s, --statement-size Attempted size of INSERT statement in bytes, default 1000000
-r, --rows 试图分裂成很多行块
-F, --chunk-filesize 将表进行切割
-c, --compress 压缩文件
-e, --build-empty-files 空表也生成一个文件
-x, --regex 支持正则表达式
-i, --ignore-engines 忽略存储引擎用,隔开
-m, --no-schemas 不导出表结构
-d, --no-data 不导出数据
-G, --triggers 导出触发器
-E, --events 导出job
-R, --routines 导出存储过程和函数
-k, --no-locks 不执行临时共享读锁,警告:将导致不一致的备份
--less-locking innodb引擎表最小锁定时间
-l, --long-query-guard 长查询,默认60s
-K, --kill-long-queries kill掉长时间执行的查询
-D, --daemon 启用守护进程
-I, --snapshot-interval dump快照间隔时间,默认60S,需要在守护模式下
-L, --logfile 日志文件
--tz-utc SET TIME_ZONE='+00:00' at top of dump to allow dumping of TIMESTAMP data when a server has data in different time zones or data is being moved between servers with different time zones, defaults to on use --skip-tz-utc to disable.
--skip-tz-utc
--use-savepoints 启用快照减少medatalock时间,需要super权限
--success-on-1146 Not increment error count and Warning instead of Critical in case of table doesn't exist
--lock-all-tables 锁定所有表
-U, --updated-since Use Update_time to dump only tables updated in the last U days
--trx-consistency-only 事务一致性
-h, --host 主机
-u, --user 用户名
-p, --password 密码
-P, --port 端口
-S, --socket socket
-t, --threads 多线程,默认4
-C, --compress-protocol 在mysql连接上使用压缩
-V, --version 输出版本
-v, --verbose 更多输出
三、myloader使用
[root@mysql-qb-02 mydumper]# ./myloader --help
Usage:
myloader [OPTION...] multi-threaded MySQL loader
Help Options:
-?, --help Show help options
Application Options:
-d, --directory 导入的目录
-q, --queries-per-transaction 每次执行的查询数量,默认1000
-o, --overwrite-tables 如果表存在删除
-B, --database 需要还原的库
-s, --source-db Database to restore
-e, --enable-binlog 启用二进制恢复
-h, --host 主机
-u, --user 用户名
-p, --password 密码
-P, --port 端口
-S, --socket socket
-t, --threads 恢复使用的线程数,默认4
-C, --compress-protocol 使用mysql连接进行压缩
-V, --version 查看版本
-v, --verbose 更多输出
四、mysqldump、mydumper对比测试
为了测试两个导出工具的效率,写了个简单的脚本如下:
[root@mysql-qb-02 tmp]# cat mysqldump.sh
#!/bin/sh
echo `date`
/usr/local/mysql/bin/mysqldump -uroot -pQB24Hour#7801! QJWB24NEWS --single-transaction >/tmp/1.sql
echo `date`
[root@mysql-qb-02 tmp]# cat mydumper_4.sh
#!/bin/sh
echo `date`
/usr/local/mydumper/mydumper -u root -p QB24Hour#7801! -t 4 -B QJWB24NEWS -o /tmp/2.sql
echo `date`
[root@mysql-qb-02 tmp]# cat mydumper_8.sh
#!/bin/sh
echo `date`
/usr/local/mydumper/mydumper -u root -p QB24Hour#7801! -t 8 -B QJWB24NEWS -o /tmp/2.sql
echo `date`
五、测试结果
工具 | 时间 |
---|---|
mysqldump | 63min |
mydumper_4 | 39min |
mydumper_8 | 33min |