mysqlpump 是 MySQL 8.0 原生支持并行导出的官方工具,按库/表并发读取,可提速 3–5 倍,但 MyISAM 表自动降级串行;需显式指定 --parallel-schemas 才生效,--default-parallelism 为每库线程上限;--defer-table-indexes 默认启用,大幅提升恢复速度;权限要求更细,且不读取 my.cnf 的 [mysqlpump] 段。

mysqlpump 是 MySQL 8.0 并行逻辑备份的默认选择
MySQL 8.0 中真正原生支持并行导出的官方工具只有 mysqlpump,它从 5.7 引入、在 8.0 全面可用。和 mysqldump 的单线程模式不同,mysqlpump 默认按库或表粒度启动多个线程并发读取,对 TB 级数据能缩短 3–5 倍备份时间。但注意:它不支持 MyISAM 表的并行——遇到这类表会自动降级为串行处理,且不报错,容易误判效率。
如何配置 --parallel-schemas 和 --default-parallelism 才有效
--parallel-schemas 必须显式指定要并行的数据库名,不能用通配符;--default-parallelism 是每个库内部的线程数上限,不是全局总线程数。常见错误是只写 --default-parallelism=4 却漏掉 --parallel-schemas,结果全程单线程。
- 正确写法:
mysqlpump --parallel-schemas=test --parallel-schemas=prod --default-parallelism=3 -u backup -p > backup.sql - 若要并行导出所有库,需先查出库名列表:
mysql -Nse "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql','sys','information_schema','performance_schema')",再循环拼接--parallel-schemas -
--default-parallelism建议设为 CPU 核心数的 1–1.5 倍;超过 8 容易引发 IO 争抢,反而拖慢整体速度
--defer-table-indexes 对恢复性能的影响远大于备份
--defer-table-indexes(默认启用)会让 mysqlpump 把 CREATE INDEX 语句挪到所有 INSERT 之后执行。这对恢复阶段意义重大:避免边插数据边分裂索引页,InnoDB 恢复速度可提升 2–3 倍。但要注意,这个选项不影响备份内容本身,也不影响备份耗时,只是改变 SQL 输出顺序。
- 不加该参数时,恢复大表可能卡在 “Creating index” 阶段长达数小时
- 如果目标库已存在表结构(比如只导入数据),该参数无效,因为不会生成
CREATE TABLE语句 - 导出视图、存储过程等对象时,该参数无作用
权限和兼容性陷阱比语法更致命
mysqlpump 要求比 mysqldump 更细粒度的权限,尤其容易踩坑的是用户导出和系统库访问:
- 导出用户账户(
--users)需要SELECT权限在mysql库,而普通备份账号通常被禁止访问该库 - 导出事件(
--events)需要EVENT权限,但 MySQL 8.0 默认关闭event_scheduler,即使有权限也导不出内容 - 对含 JSON 列的表,并行导出可能触发字符集隐式转换,导致恢复时报
Incorrect string value;建议加--set-gtid-purged=OFF和--default-character-set=utf8mb4
最常被忽略的一点:mysqlpump 不识别 my.cnf 中的 [mysqlpump] 段落配置,所有关键参数必须写在命令行里,否则静默失效。


















