mysqldump 与 mysqlpump

Rya*_*ley 32 mysql mysqldump backup export

我刚刚听说mysqlpump - 看起来它是与 MySQL 5.7 一起发布的,但是 MySQL 5.7 仍然包含mysqldump。它们都是备份程序,但谁能总结一下主要区别?是否存在其中之一可能更好地工作的场景?mysqldump 会被 mysqlpump 淘汰吗?

小智 24

由于我碰巧自己正在研究这个,这里是我发现的摘要。

根据MySQL 开发团队 2015 年的一篇博客文章,mysqlpump 的主要优点是它可以并行使用多个线程来加速转储,并且它不共享 mysqldump 的向后兼容性要求,这应该为进一步打开大门改进。

但是,该帖子警告说 mysqlpump “目前作为通用备份替代品是不安全的”,因为各个线程可能会从数据库的不同状态生成它们的转储部分。它没有提到任何弃用 mysqldump 的计划。

Giuseppe Masia 在 2015 年尝试了 mysqlpump,发现转储加速相当小。他赞赏精确选择要转储的对象的新功能,但指出将转储加载回只能单线程完成,并且(与 mysqldump 不同)转储只能加载回同名的数据库中。

  • 警告:`mysqlpump` 是闭源软件(未来不确定)。`mysqlpump` 的开源替代方案是 https://github.com/maxbube/mydumper `mydumper` (3认同)

Sol*_*zky 16

我也一直在研究这两个实用程序之间的差异,除了@Neil的回答中提到的内容之外,mysqlpump似乎也比mysqldump具有更少的选项,例如不允许以下内容:

  • --compatible=
  • --tab,及其相关选项:
    • --fields-terminated-by=
    • --fields-enclosed-by=
    • --fields-optionally-enclosed-by=
    • --fields-escaped-by=
    • --lines-terminated-by=
  • --quote-names
  • --add-drop-trigger
  • --allow-keywords
  • --apply-slave-statements
  • --comments
  • --compact
  • --compatible
  • --create-options
  • --delete-master-logs
  • --disable-keys
  • --dump-date
  • --dump-slave
  • --enable-cleartext-plugin
  • --flush-logs
  • --flush-privileges
  • --force
  • --ignore-error
  • --include-master-host-port
  • --lock-all-tables
  • --lock-tables
  • --master-data
  • --no-autocommit
  • --no-tablespaces
  • --opt
  • --order-by-primary
  • --pipe
  • --quick
  • --quote-names
  • --set-gtid-purged
  • --shared-memory-base-name
  • --skip-add-drop-table
  • --skip-add-locks
  • --skip-comments
  • --skip-compact
  • --skip-disable-keys
  • --skip-extended-insert
  • --skip-opt
  • --skip-quick
  • --skip-quote-names
  • --skip-triggers
  • --skip-tz-utc
  • --verbose
  • --where
  • --xml

另一方面,mysqlpump有以下mysqldump所没有的选项

  • --compress-output
  • --default-parallelism
  • --defer-table-indexes
  • --exclude-databases=
  • --exclude-events=
  • --exclude-routines=
  • --exclude-triggers=
  • --exclude-users=
  • --include-events=
  • --include-routines=
  • --include-triggers=
  • --include-users=
  • --parallel-schemas=
  • --skip-definer
  • --users
  • --watch-progress

重命名或类似:

  • --no-data转储中==--skip-dump-rows泵中
  • --no-set-namesdump中不存在于pump 中,但它的同义词 -- --skip-set-charset-- 存在于两者中
  • --ignore-table=in dump主要是--exclude-tables=pump 中,除了--exclude-tables可以指定所有表,用逗号分隔,并允许通配符(%_
  • --tablesin dump主要--include-tables=pump 中,除了--include-tables可以指定所有表,用逗号分隔,并允许通配符(%_)。此外,在dump 中--tables覆盖,而在pump中没有。--databases--include-tables=
  • --databasesdumppump中主要是--include-databases=pump 中,除了--include-databases可以指定所有数据库,用逗号分隔,并允许通配符(%_)。


aak*_*gam 6

以下是我对这两种备份工具的理解的总结。

\n\n

手册页中给出了 mysqldump 的定义

\n\n
\n

mysqldump 客户端实用程序执行逻辑备份,生成一组可以执行以重现原始数据库对象定义和表数据的 SQL 语句。它转储一个或多个 MySQL 数据库以进行备份或传输到另一台 SQL 服务器。mysqldump 命令还可以生成 CSV、其他分隔文本或 XML 格式的输出。

\n
\n\n

mysqldump非常容易使用,语法也很简单。当我们执行此命令时,它将所有行转换为 SQL 查询并将其打印在标准输出中。我们可以将此输出重定向到 outfile(>) 或使用选项 \xe2\x80\x94 结果文件。

\n\n

默认情况下,mysqldump 不会转储 information_schema 表,也从不获取 Performance_schema。mysqldump 的主要缺点是它在进行备份和恢复时仅使用一个线程。

\n\n

Mysqlpump 是 MySQL 5.7 中引入的另一个实用程序,与 mysqldump 相比,它具有更多功能

\n\n

手册页中给出了 mysqlpump 的定义

\n\n
\n

mysqlpump 客户端实用程序执行逻辑备份,生成一组可以执行以重现原始数据库对象定义和表数据的 SQL 语句。它转储一个或多个 MySQL 数据库以进行备份或传输到另一台 SQL 服务器。

\n
\n\n

主要特点是

\n\n
    \n
  • 并行处理(多线程)以加快备份速度

  • \n
  • 进度指示器

  • \n
  • 将用户帐户转储为(创建、授予语句,而不是 MySQL 系统数据库的插入)

  • \n
\n\n

默认情况下,mysqlpump 不会备份系统数据库,例如信息模式、性能模式和一些 MySQL 系统表,除非明确提及。

\n\n

它还具有选项 \xe2\x80\x93include-database、\xe2\x80\x93exclude-database、\xe2\x80\x93include-table、\xe2\x80\x93exclude-table 以及模式匹配(%)。

\n\n

对于只想备份整个数据集中的少数对象的用户来说,这些选项更加方便。

\n\n

一般来说,mysqlpump 将其工作分成块,并将每个块分配给一个多线程队列。

\n\n
    \n
  • 这个多线程队列由 N 个线程处理(默认情况下使用 2 个线程)。

  • \n
  • 我们可以使用此选项 \xe2\x80\x93default-parallelism 和 \xe2\x80\x93parallel-schemas 定义多个线程。

  • \n
  • 恢复时,它使用单线程,与 mysqldump 相同,它缺乏并行恢复。

  • \n
\n\n

作为附加组件,我们还有一个工具可以在备份和恢复中执行并行化(mysqlpump 和 mysqldump 缺乏),称为mydumper 和 myloader。这在恢复大型数据集时将被大量使用。

\n\n

您可以在此博客\n mysqldump vs mysqlpump vs mydumper中找到这些工具的更多详细信息及其有用选项。

\n