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

会为mysqlpump淘汰mysqldump吗?

评论

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

@Erik似乎是一个“并行转储”,它可以更快地泵送数据..但我同意。

您可能也对MyDumper感兴趣。看来mysqlpump从中汲取了一些想法-这不是一件坏事,因为该项目已经进行了一年多了:-(

我希望看到一些性能测试!

XtradbBackup是另一个严重的竞争者。

#1 楼

由于我碰巧自己对此进行了研究,因此这里总结了我发现的内容。

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

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

Giuseppe Maxia在2015年试用了mysqlpump,发现转储速度非常小。他赞赏能够精确选择要转储的对象的新功能,但是指出,只能以单线程方式将转储加载回去,并且(与mysqldump不同)转储只能以相同的名称重新加载到数据库中。 >

评论


警告:mysqlpump是封闭源代码软件(将来无法确定)。 mysqlpump的开源替代方案是github.com/maxbube/mydumper mydumper

–伊万诺夫
18年8月20日在6:43



#2 楼

我也一直在研究这两个实用程序之间的区别,除了@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

另一方面,mysqlpump具有以下选项,这些选项在mysqldump中不可用


--skip-quick
--skip-quote-names
--skip-triggers
--skip-tz-utc
--verbose
--where
--xml
--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在泵中主要是--skip-set-charset,但--ignore-table=可以指定所有表,并用逗号分隔,并允许使用通配符(--exclude-tables=--exclude-tables)。同样,%会覆盖转储中的_,而pump中的--tables则不会。 (--include-tables=--include-tables)。


#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 Server。


主要功能是并行处理(多线程)加快备份
进度指示器
将用户帐户转储为(创建,授予语句,而不作为MySQL系统数据库的插入内容)

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

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

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

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


该多线程队列由N个线程处理(默认情况下,它使用2个线程)。
我们可以使用此选项–default-parallelism和–parallel-schemas来定义多个线程。
恢复时,它使用与mysqldump相同的单个线程,但缺少并行恢复。 br />
作为附加组件,我们还有一个工具在备份和还原(缺少mysqlpump和mysqldump)中执行并行化,称为mydumper和myloader。

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