Answers:
由于我碰巧自己对此进行了研究,因此以下是我所发现的内容的摘要。
根据MySQL开发团队2015年的一篇博客文章,mysqlpump的主要优点是它可以并行使用多个线程来加快转储速度,并且不共享mysqldump的向后兼容性要求,这应该为进一步打开大门改进。
但是,该帖子警告说mysqlpump“目前不安全,不能用作通用备份替换”,因为各个线程可能会从数据库的不同状态生成其转储部分。它没有提到任何计划弃用mysqldump的计划。
Giuseppe Maxia在2015年尝试使用mysqlpump,发现转储速度提高的幅度很小。他赞赏能够精确选择要转储的对象的新功能,但是指出,只能以单线程方式完成转储,而转储(与mysqldump不同)只能以相同的名称重新加载到数据库中。
除了@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
可以指定所有的表,用逗号隔开,并允许通配符(%
和_
)--tables
in dump主要是--include-tables=
在pump中,除了--include-tables
可以指定所有用逗号分隔的表,并允许使用通配符(%
和_
)。同样,在dump中--tables
重写,而在pump中则没有。--databases
--include-tables=
--databases
在dump和pump中--include-databases=
,除了可以指定所有数据库(用逗号分隔)并允许通配符(和)外,大多数都在pump中。--include-databases
%
_
这是我对两种备份工具的了解的摘要。
手册页中给出的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中找到这些工具的更多详细信息及其有用的选项 。