如何提高mysqldump迁移数据库的效率
前言
如果希望备份和恢复速度快,那么使用物理备份是毫无疑问的。物理备份和恢复是有使用限制的,源端和目标端必须是 MySQL,操作系统需要一致,最好连数据库小版本和 my.cnf 配置都一样,等于完全做一个数据库的克隆,这个场景更适用于扩展从库,或者通过备份重建主库。我们在做 MySQL 数据迁移的时候,更多的是做部分数据迁移,或异构数据库的迁移,或者无法保证对端数据库版本、my.cnf、操作系统、硬件等配置一样的情况的迁移,这个时候应当使用逻辑备份。
当然了,逻辑备份和恢复是很慢的,这很折磨 DBA。
逻辑备份常见有以下工具:
- mysqldump
- mysqlpump
- mydumper
- mysqlshell 的 Dump&Load 插件
这些工具中哪个备份最快?哪个恢复最快呢?在 2020 年 4 月 MySQL 官方为了证明其 mysqlshell 的 Dump&Load 插件强劲的实力,在以下条件对以上四款常见逻辑备份工具做了备份和恢复的性能测试。
- Oracle Linux 7.8
- MySQL8.0.21
- 关闭 redo log
- OCI BM.Standard.B1.44 - 44x Intel Xeon E5-2669 v4 - 512GB RAM,Storage: 8x 400GB - 240MB/s in RAID-0 的硬件
- 对比网上能下载到的 3 个示例库Ontime、Stackoverflow、EN Wikipedia、All(以上3个库的混合)
备份性能
备份性能(带压缩)
从图上可以看出,无论备份带不带压缩,速度最快的都是 mysqlshell 的 Dump&Load 插件,最慢的都是 mysqldump。另外,我们可以看到使用压缩,会使备份速度大打折扣,图中最高下降了 14 倍。
对于大多数 DBA 来说:
- mysqlshell 的使用并没有普及,并且官方文档中说他只适用于 MySQL 到 MySQL 的数据迁移,只适用于 InnoDB。
- mysqlpump 很鸡肋,相对 mysqldump 提升很小,他的并行备份和恢复功能,只能基于 database 级别。意味着你如果只有一个 sbtest 的数据库,是无法并行的,那用起来和 mysqldump 就差不多了。
- mydumper,很好、很快,互联网上很多人使用,但鉴于他是第三方出品,我不怎么使用,对新手 DBA 不做推荐。(还有一个原因,他没有给我广告费🙂)
对于刚入门的 DBA,最常见的备份工具是 mysqldump。
现在,我要引出我的主题,对于最慢的 mysqldump 工具,如何合理使用 mysqldump 提高迁移数据库的效率?