MySQL Shell 是与 MySQL 一起使用的流行工具,它在 Oracle 云基础设施 (OCI) 中完美地集成了 MySQL 数据库服务 (MDS) 的所有内容。
对于任何逻辑转储和数据加载,尤其是将数据转储到 MDS,MySQL Shell Utility 是推荐的解决方案。
MySQL Shell Dump & Load 速度更快、并行且与 OCI 兼容(块存储、MDS 授权、自动主键创建等)
这篇文章是关于压缩的。
默认情况下,MySQL Shell Dump 使用zstd压缩。
Zstd 是 Zstandard 的缩写,是一种快速无损压缩算法,针对 zlib 级别压缩率的实时压缩场景。
可以使用压缩选项指定用于 MySQL Shell Dump Utility 的压缩算法。
接受的值为:
- none
- zstd (default)
- gzip
如果您打算使用压缩和多线程(并行),建议为 MySQL Shell 准备一个强大的实例。
为了比较压缩算法和旧的mysqldump,我使用了一个 8 核的服务器(Intel® Xeon® Platinum 8167M CPU @ 2.00GHz - OCI 上的 VM.Standard2.4)。数据是一张47GB InnoDB Data的单表!
转储数据
MySQL Shell 的默认并行度是使用 4 个线程。
如果您有大型数据集要转储和加载,我建议您拥有一台具有更多内核的机器,并使用线程选项指定更多线程,例如:
JS util.dumpSchemas(["ontime"], "/home/opc/dump_zstd",{"threads": 32})
带有 Zstd 的 MySQL Shell
让我们从 MySQL Shell Dump 和 zstd(默认)开始:
JS util.dumpSchemas(["ontime"], "/home/opc/dump_zstd",{"compression": "zstd"})
Duration: 00:01:49s
Schemas dumped: 1
Tables dumped: 1
Uncompressed data size: 34.64 GB
Compressed data size: 3.03 GB
Compression ratio: 11.4
Rows written: 105336666
Bytes written: 3.03 GB
Average uncompressed throughput: 317.36 MB/s
Average compressed throughput: 27.80 MB/s
带有 gzip 的 MySQL Shell
现在,我们尝试使用 gzip 作为压缩方法:
JS util.dumpSchemas(["ontime"], "/home/opc/dump_gzip",{"compression": "gzip"})
Duration: 00:03:33s
Schemas dumped: 1
Tables dumped: 1
Uncompressed data size: 34.64 GB
Compressed data size: 4.22 GB
Compression ratio: 8.2
Rows written: 105336666
Bytes written: 4.22 GB
Average uncompressed throughput: 162.36 MB/s
Average compressed throughput: 19.76 MB/s
转储
正如我已经声称的,mysqldump (和 mysqlpump),不应再使用,但只是为了提供信息,mysqldump+gzip需要21m12sec,mysqldump+zstd需要15m20sec。
结果
如果我们检查转储的大小和速度,很明显带有 Zstd(压缩比为 11.1)的 MySQL Shell 是最佳选择:
[root@mysql-shell opc]# du -sh *
4.0G dump_gzip 2.9G dump_zstd
4.1G mysqldump_gzip.sql.gz 3.8G
mysqldump_zstd.sql.zst
正如我之前所写,MySQL Shell 机器的能力很重要。我们可以比较一下 CPU 使用率:
MySQL Shell 使用了实例的所有功能,但这在用于此类操作的专用实例上当然不是问题。
结论
默认情况下,MySQL Shell Dump & Load 实用程序提供了非常好的压缩算法,可以为您节省大量磁盘空间。此外,由于它的并行性,Load & Dump 比传统的mysqldump快得多。MySQL Shell甚至可以在单个表中并行转储和加载!
如您所见,我们从 47GB 开始,以 3GB 数据结束,压缩率为 93%!
如果您正在寻找逻辑转储解决方案,MySQL Shell 是最佳选择。