-C和对mysqldump进行gzip压缩有什么区别?

14

我想直接将mysqldump导出到我的远程主机。我看到了使用-c开关或使用gzip在转储数据时进行实时压缩的建议(而不是在文件中)。这两者之间有什么区别?我如何知道两台机器都支持-C开关?我如何进行实时gzip压缩?我在两台机器上都使用linux系统。

mysqldump -C -u root -p database_name | mysql -h other-host.com database_name

据我所知,-C选项会在将SQL代码从源MySQL服务器发送到转储SQL的目标服务器时对其进行压缩,然后在目标服务器上将其解压缩,并将未压缩的文件保存在(通常为)硬盘上。而使用gzip则会导致在硬盘上保存一个经过gzip压缩的文件。 - Timo Huovinen
2个回答

16

-C选项使用可能存在于MySQL客户端-服务器协议中的压缩。Gzip压缩则会在管道中使用gzip实用程序。我相当确定后者不会有任何好处,因为在这种情况下,压缩和解压缩都将在同一台机器上进行。如果您要转储的机器是本地的,则-C选项可能只是浪费CPU周期-它会压缩mysqldumpmysqld进程之间的协议消息。

唯一有意义的命令管道可能是像这样的:

mysqldump -u root -p database_name | mysql -C -h other-host -Ddatabase_name -B

mysqldump 的输出通过管道传输给 mysql 命令行客户端。选项 -C 告诉 mysql 将要发送到 other-host 的消息进行压缩处理。选项 -B 禁用了 mysql 客户端的缓冲和交互行为,这可能会进一步提高性能。

可能更快的做法是:

mysqldump -u root -p database_name | gzip > dump.gz
scp dump.gz user@other-host:/tmp
ssh user@other-host "gunzip /tmp/dump.gz | mysql -Ddatabase_name -B; rm /tmp/dump.gz"

假设你在另一台机器上已经运行了SSH。


我在哪里可以找到更多关于-B的信息?我找不到任何东西。它是否像--quick一样运作? - user_78361084
难道不应该是:“mysqldump -C -u root -p database_name | mysql -h other-host -Ddatabase_name -B”吗? - user_78361084
1
不,-C选项压缩了客户端应用程序(mysqldumpmysql)和服务器(mysqld)之间的通信。运行mysqldump -C并连接到localhost会告诉MySQL守护进程压缩发送给mysqldump的数据,然后在写入输出管道之前对其进行解压缩。仅在客户端应用程序和守护进程位于不同主机上时使用压缩选项才有意义。 - D.Shawley
-B--batch--quick 类似,它禁用了历史文件的使用。 - D.Shawley

0

我总是阅读这些类型的东西的手册。如果您查看mysqldump的手册页面,您会发现-C(大写C)标志使mysqldump仅压缩在传输中的所有数据。这使它流式传输压缩但到达时,如您所见,未经压缩。您也可以将文件转储到本地系统,然后一次性传输所有内容的gzip。

来自手册页面:

   o   --compress, -C

       Compress all information sent between the client and the server if
       both support compression.

“...但是到达时,您会看到它是未压缩的”这是什么意思?它是如何从压缩变为未压缩的?使用-C开关是否相当于即时执行gzip操作? - user_78361084
1
“如果两个服务器都支持压缩”,我如何知道我的两个服务器是否都支持压缩? - user_78361084
我不能假设它正在执行gzip,但它可以即时压缩。 - Scott M.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接