前言:最近打算对公司内部某核心系统数据库进行升级改造,替换原先的Mariadb10.1.12为官方版本MySQL5.7.21,初步测试了一下,貌似不能通过平滑升级的方案进行直接升级,这里打算采用逻辑导出再导入的方法,因为可维护的窗口时间较短,所以要尽可能减少导出再恢复的时间。
一、mydumper安装
去mydumper官网下载最新版本,我这里下载的是0.9.1版本,安装方法很简单。
1.上传服务器,解压缩
2.进入解压缩目录以后
cmake .makemake 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 --helpUsage:mydumper [OPTION...] multi-threaded MySQL dumpingHelp Options:-?, --help Show help optionsApplication 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 --helpUsage:myloader [OPTION...] multi-threaded MySQL loaderHelp Options:-?, --help Show help optionsApplication 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/shecho `date`/usr/local/mysql/bin/mysqldump -uroot -pQB24Hour#7801! QJWB24NEWS --single-transaction >/tmp/1.sqlecho `date`
[root@mysql-qb-02 tmp]# cat mydumper_4.sh#!/bin/shecho `date`/usr/local/mydumper/mydumper -u root -p QB24Hour#7801! -t 4 -B QJWB24NEWS -o /tmp/2.sqlecho `date`
[root@mysql-qb-02 tmp]# cat mydumper_8.sh#!/bin/shecho `date`/usr/local/mydumper/mydumper -u root -p QB24Hour#7801! -t 8 -B QJWB24NEWS -o /tmp/2.sqlecho `date`
五、测试结果
| 工具 | 时间 |
|---|---|
| mysqldump | 63min |
| mydumper_4 | 39min |
| mydumper_8 | 33min |
