MySQL 官方多线程逻辑备份工具


介绍

MySQL Shell 是 MySQL 的高级命令行客户端和代码编辑器。除了 SQL,MySQL Shell 还为 JavaScript 和 Python 提供脚本功能。当 MySQL Shell 通过 X 协议连接到 MySQL 服务器时,X DevAPI 可用于处理关系数据和文档数据。

MySQL Shell 8.0.21 包括一些新的易用、高性能和集成的工具(MySQL Shell Dump & Dump Loading Utility)用来创建逻辑转储和执行逻辑还原。该序列工具以 MySQL Shell 8.0.17 中引入的多线程 CSV 导入工具 util.importTable() 为基础构建以便轻松转储和加载整个数据库实例或一组 schema。该序列工具包括:

  • util.dumpInstance():转储整个数据库实例,包括用户

  • util.dumpSchemas():转储一组数据库 schema

  • util.loadDump():将转储加载到目标数据库中

主要特色功能包括:

  • 多线程转储,将较大的表分成较小的块,速度高达 3GB / s

  • 并行加载块,结合 MySQL Server 8.0.21 中的禁用 InnoDB Redo Log 的功能,加载性能可以超过 200MB / s

  • 在转储的同时进行加载

  • 中断后继续加载数据(断点续传)

  • 内置压缩(zstd 和 gzip)

  • 加载数据后推迟二级索引的创建

  • 直接从 OCI 对象存储中转储和加载

  • 兼容 OCI 的 MySQL 数据库服务模式,使得向云的迁移变得容易

MySQL Shell 安装

MySQL Shell 提供了 Windows、Linux 和 Mac 的安装支持,具体请查看如下的官方安装文档:

https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-install.html

Dump & Dump Loading Utility

MySQL Shell Dump & Dump Loading Utility 的使用以及与其它各种主流逻辑转储和加载工具 mysqldump,、mysqlpump 和 mydumper 的比较结果如下:

  • 数据以大约 256 MB 的块形式转储
1
2
3
4
mysqlsh-js> util.dumpSchemas(["<db>"], 
"<directory>",
{threads: 88,
bytesPerChunk: "256M"})

  • 加载
1
2
mysqlsh-js> util.loadDump("<directory>", 
{threads: 88})

Redo Log 禁用的情况下,MySQL Shell 能够快速转储数据,高达近 3GB/s,并以 200MB/s 以上的速度加载数据。

参考

[1] https://dev.mysql.com/blog-archive/mysql-shell-dump-load-part-1-demo

[2] https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-dump-instance-schema.html

[3] https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-load-dump.html