我想直接对我的remotehost执行mysqldump。我已经看到了使用-c开关或使用gzip动态压缩数据(而不是文件中)的建议。这两者有什么区别?我如何知道两台机器是否支持-C开关?我怎么能在飞行中做一个gzip?我在两台机器上都使用linux。
mysqldump -C -u root -p database_name | mysql -h other-host.com database_name
答案 0 :(得分:15)
-C
选项使用可能存在于MySQL客户端 - 服务器协议中的压缩。 Gzip'ing将在管道中使用gzip
实用程序。我很确定后者不会有任何好处,因为在这种情况下压缩和解压缩会在同一台机器上发生。如果您要转储的计算机是本地计算机,则-C
选项可能只是浪费CPU周期 - 它会压缩mysqldump
和mysqld
守护程序之间的协议消息。
这里唯一可能有意义的命令管道就是:
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。
答案 1 :(得分:0)
我总是阅读这些类型的东西的手册页。如果您查看man pages for mysqldump,可以看到-C
(即大写 C)标志使mysqldump仅压缩传输中的所有数据 。这使得它流式压缩,但正如您将看到的那样,未压缩到达。您可以将文件转储到本地系统,然后同时传输一切gzip。
来自手册页:
o --compress, -C
Compress all information sent between the client and the server if
both support compression.