前言:最近打算对公司内部某核心系统数据库进行升级改造,替换原先的Mariadb10.1.12为官方版本MySQL5.7.21,初步测试了一下,貌似不能通过平滑升级的方案进行直接升级,这里打算采用逻辑导出再导入的方法,因为可维护的窗口时间较短,所以要尽可能减少导出再恢复的时间。

一、mydumper安装

mydumper官网下载最新版本,我这里下载的是0.9.1版本,安装方法很简单。
1.上传服务器,解压缩
2.进入解压缩目录以后

  1. cmake .
  2. make
  3. make install

3.在解压缩的目录后会生成两个文件mydumper和myloader,分别用于备份和恢复。

二、mydumper使用

具体使用方法直接加—help即可

  1. 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
  2. [root@mysql-qb-02 mydumper]# ./mydumper --help
  3. Usage:
  4. mydumper [OPTION...] multi-threaded MySQL dumping
  5. Help Options:
  6. -?, --help Show help options
  7. Application Options:
  8. -B, --database 需要备份的数据库
  9. -T, --tables-list 需要备份的表,用,隔开
  10. -o, --outputdir 导出目录
  11. -s, --statement-size Attempted size of INSERT statement in bytes, default 1000000
  12. -r, --rows 试图分裂成很多行块
  13. -F, --chunk-filesize 将表进行切割
  14. -c, --compress 压缩文件
  15. -e, --build-empty-files 空表也生成一个文件
  16. -x, --regex 支持正则表达式
  17. -i, --ignore-engines 忽略存储引擎用,隔开
  18. -m, --no-schemas 不导出表结构
  19. -d, --no-data 不导出数据
  20. -G, --triggers 导出触发器
  21. -E, --events 导出job
  22. -R, --routines 导出存储过程和函数
  23. -k, --no-locks 不执行临时共享读锁,警告:将导致不一致的备份
  24. --less-locking innodb引擎表最小锁定时间
  25. -l, --long-query-guard 长查询,默认60s
  26. -K, --kill-long-queries kill掉长时间执行的查询
  27. -D, --daemon 启用守护进程
  28. -I, --snapshot-interval dump快照间隔时间,默认60S,需要在守护模式下
  29. -L, --logfile 日志文件
  30. --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.
  31. --skip-tz-utc
  32. --use-savepoints 启用快照减少medatalock时间,需要super权限
  33. --success-on-1146 Not increment error count and Warning instead of Critical in case of table doesn't exist
  34. --lock-all-tables 锁定所有表
  35. -U, --updated-since Use Update_time to dump only tables updated in the last U days
  36. --trx-consistency-only 事务一致性
  37. -h, --host 主机
  38. -u, --user 用户名
  39. -p, --password 密码
  40. -P, --port 端口
  41. -S, --socket socket
  42. -t, --threads 多线程,默认4
  43. -C, --compress-protocol 在mysql连接上使用压缩
  44. -V, --version 输出版本
  45. -v, --verbose 更多输出

三、myloader使用

  1. [root@mysql-qb-02 mydumper]# ./myloader --help
  2. Usage:
  3. myloader [OPTION...] multi-threaded MySQL loader
  4. Help Options:
  5. -?, --help Show help options
  6. Application Options:
  7. -d, --directory 导入的目录
  8. -q, --queries-per-transaction 每次执行的查询数量,默认1000
  9. -o, --overwrite-tables 如果表存在删除
  10. -B, --database 需要还原的库
  11. -s, --source-db Database to restore
  12. -e, --enable-binlog 启用二进制恢复
  13. -h, --host 主机
  14. -u, --user 用户名
  15. -p, --password 密码
  16. -P, --port 端口
  17. -S, --socket socket
  18. -t, --threads 恢复使用的线程数,默认4
  19. -C, --compress-protocol 使用mysql连接进行压缩
  20. -V, --version 查看版本
  21. -v, --verbose 更多输出

四、mysqldump、mydumper对比测试

为了测试两个导出工具的效率,写了个简单的脚本如下:

  1. [root@mysql-qb-02 tmp]# cat mysqldump.sh
  2. #!/bin/sh
  3. echo `date`
  4. /usr/local/mysql/bin/mysqldump -uroot -pQB24Hour#7801! QJWB24NEWS --single-transaction >/tmp/1.sql
  5. echo `date`
  1. [root@mysql-qb-02 tmp]# cat mydumper_4.sh
  2. #!/bin/sh
  3. echo `date`
  4. /usr/local/mydumper/mydumper -u root -p QB24Hour#7801! -t 4 -B QJWB24NEWS -o /tmp/2.sql
  5. echo `date`
  1. [root@mysql-qb-02 tmp]# cat mydumper_8.sh
  2. #!/bin/sh
  3. echo `date`
  4. /usr/local/mydumper/mydumper -u root -p QB24Hour#7801! -t 8 -B QJWB24NEWS -o /tmp/2.sql
  5. echo `date`

五、测试结果

工具 时间
mysqldump 63min
mydumper_4 39min
mydumper_8 33min