我想直接将mysqldump导出到我的远程主机。我看到了使用-c开关或使用gzip在转储数据时进行实时压缩的建议(而不是在文件中)。这两者之间有什么区别?我如何知道两台机器都支持-C开关?我如何进行实时gzip压缩?我在两台机器上都使用linux系统。
mysqldump -C -u root -p database_name | mysql -h other-host.com database_name
我想直接将mysqldump导出到我的远程主机。我看到了使用-c开关或使用gzip在转储数据时进行实时压缩的建议(而不是在文件中)。这两者之间有什么区别?我如何知道两台机器都支持-C开关?我如何进行实时gzip压缩?我在两台机器上都使用linux系统。
mysqldump -C -u root -p database_name | mysql -h other-host.com database_name
-C
选项使用可能存在于MySQL客户端-服务器协议中的压缩。Gzip压缩则会在管道中使用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。
-C
选项压缩了客户端应用程序(mysqldump
或mysql
)和服务器(mysqld
)之间的通信。运行mysqldump -C
并连接到localhost会告诉MySQL守护进程压缩发送给mysqldump
的数据,然后在写入输出管道之前对其进行解压缩。仅在客户端应用程序和守护进程位于不同主机上时使用压缩选项才有意义。 - D.Shawley-B
或 --batch
与 --quick
类似,它禁用了历史文件的使用。 - D.Shawley我总是阅读这些类型的东西的手册。如果您查看mysqldump的手册页面,您会发现-C
(大写C)标志使mysqldump仅压缩在传输中的所有数据。这使它流式传输压缩但到达时,如您所见,未经压缩。您也可以将文件转储到本地系统,然后一次性传输所有内容的gzip。
来自手册页面:
o --compress, -C
Compress all information sent between the client and the server if
both support compression.