在 mysqldump 文档中,我看到了“--quick”选项,但是没有迹象表明为什么有人想要禁用它。启用它有什么缺点,或者为什么它甚至是一个选项?它不应该一直处于开启状态吗?
http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_quick
编辑:虽然我已经清楚地知道它是默认启用的,但从官方文档中看这并不太清楚(特别是当某些示例指定了该选项时:http://dev.mysql.com/doc/refman/5.7/en/copying-databases.html)。选项表中没有指定默认值的字段,并且 --quick 的描述中没有注明它包含在 --opt 中。我将保留问题标题,以便其他通过 Google 寻找相同内容的人可以轻松找到信息。
答案1
--quick
是默认情况下处于开启状态,因为它是 中包含的选项之一--opt
,而 本身默认情况下处于开启状态。
从手册页中:
- 使用
--opt
等同于指定--add-drop-table
、--add-locks
、--create-options
、--disable-keys
、--extended-insert
、和。 代表 的所有选项也默认为开启,因为--lock-tables
默认为开启。--quick
--set-charset
--opt
--opt
您链接到的页面包含类似的信息。
--opt
此选项默认启用,是 组合的简写
--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset
。它提供快速转储操作并生成可快速重新加载到 MySQL 服务器的转储文件。
答案2
虽然--quick
默认情况下处于启用状态,但我只能想到一个特定时间我必须禁用部分选项--quick
。
我的一个客户有一个数据库,需要安装在一个较小的 Linux 服务器上,这个服务器几乎没有内存(我认为是 2GB)。用 创建的 mysqldump--quick
有扩展的 INSERT。该 mysqldump 无法加载到这个 2GB 的 Linux 中,因为无法分配足够大的批量插入缓冲区来容纳单个扩展的 INSERT。这让我很抓狂。直到我决定添加--skip-extended-insert
。
这会导致每个 INSERT 命令插入一行。虽然这会增加 mysqldump 的大小,并使 mysqldump 的加载需要几个小时,但还是成功了。整个数据集被加载到一台简陋的 Linux 服务器中。
警告:请不要问我为什么客户希望在 2GB Linux 服务器上运行 MySQL。这已经是 5 年前的事了,现在想起来我还是觉得头疼。
至于--disable-keys
,您可以使用--skip-disable-keys
让 MyISAM 表重新加载并让 INSERT 动态填充所有非唯一索引。如果数据已排序加载,这将产生一些不平衡的索引。然而,在低内存环境中重新加载 mysqldump 时,这将是必要的(我已经悲伤地回忆起来了)。