mysqldump与mysqlpump


17

我刚刚听说过mysqlpump-看起来它是与MySQL 5.7一起发布的,但是MySQL 5.7仍然包含mysqldump。它们都是备份程序,但是谁能总结出主要区别?是否存在其中其中一种可能效果更好的方案?mysqldump是否将被mysqlpump淘汰?


这只是意味着几乎相同地命名两个相似的工具。
Erik

@Erik好像它是一个“ p arallel d UMP ”,它可以数据更快..但否则我同意。
jkavalik

1
您可能也对MyDumper感兴趣。看来,mysqlpump已经采取了几个从它的想法-不是一件坏事,因为项目还没有在一年多的时间:-(移动
Vérace

我希望看到一些性能测试!
瑞安·佛利

XtradbBackup是另一个严重的竞争者。
里克·詹姆斯

Answers:


16

由于我碰巧自己对此进行了研究,因此以下是我所发现的内容的摘要。

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

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

Giuseppe Maxia在2015年尝试使用mysqlpump,发现转储速度提高的幅度很小。他赞赏能够精确选择要转储的对象的新功能,但是指出,只能以单线程方式完成转储,而转储(与mysqldump不同)只能以相同的名称重新加载到数据库中。


2
警告:mysqlpump是开源软件(不确定的未来)。开源替代方案mysqlpumpgithub.com/maxbube/mydumper mydumper
Ivanov

12

除了@Neil的答案中提到的内容外,我还一直在研究这两个实用程序之间的区别 @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-names dump中不存在,但--skip-set-charset两者的同义词-
  • --ignore-table=转储中主要--exclude-tables=除了--exclude-tables可以指定所有的表,用逗号隔开,并允许通配符(%_
  • --tablesin dump主要是--include-tables=pump中,除了--include-tables可以指定所有用逗号分隔的表,并允许使用通配符(%_)。同样,在dump中--tables重写,而在pump中则没有。--databases--include-tables=
  • --databasesdumppump--include-databases=,除了可以指定所有数据库(用逗号分隔)并允许通配符(和)外,大多数都在pump中--include-databases%_

3

这是我对两种备份工具的了解的摘要。

手册页中给出的mysqldump的定义

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

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

默认情况下,mysqldump不会转储information_schema表,也不会使用performance_schema。mysqldump的主要缺点是在进行备份和还原时仅使用一个线程。

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

手册页中给出的mysqlpump的定义

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

主要特点是

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

  • 进度指标

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

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

它还具有带模式匹配(%)的选项–include-database,–exclude-database,–include-table,-exclude-table。

对于只希望从整个数据集中备份少量对象的用户而言,这些选项更为方便。

通常,mysqlpump将其工作划分为多个块,每个块都分配给一个多线程队列。

  • 该多线程队列由N个线程处理(默认情况下,它使用2个线程)。

  • 我们可以使用此选项–default-parallelism和–parallel-schemas来定义多个线程。

  • 恢复时,它使用与mysqldump相同的单个线程,缺少并行恢复。

作为附加组件,我们还有一个工具可以在备份和还原(缺少mysqlpump和mysqldump)中执行并行化,称为mydumper和myloader。。在还原庞大的数据集时,这将非常有用。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.