将通过SSH传输到另一台机器的Mysqldump压缩

6

我有以下内容:

 mysqldump -u xxxx 
           -h localhost 
           --password=xxxxx databasename | 
           ssh username@00.000.00.202 "dd of=httpdocs/backup`date +'%Y-%m-%d-%H-%M-%S'`.sql"

...将mysqldump通过SSH传输到远程机器。

在传输之前,我需要压缩mysqldump文件,因为这个文件大小为500MB,它会占用我的带宽限制。

4个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
10

mysqldump ... | gzip -9 | ssh ...

或者

mysqldump ... | bzip2 -9 | ssh ...

或者,如果你希望在另一端解压缩

mysqldump ... | bzip2 -9 | ssh machine "bzip2 -d >..."

mysqldump ... | gzip -9 | ssh machine "gzip -d >..."


7

您可以在ssh调用中添加-C标志以自动压缩传输的数据。


这很有趣,我只考虑了在运行时对文件进行压缩。 - Mike Buckbee
那将是一个压缩的笑话,不过。 - Michael Krelin - hacker
@hacker:你认为这种压缩方式不够好的特殊原因是什么?只是因为你更喜欢使用gzip的-9标志吗? - sth
其实,如果我想节省带宽,我更喜欢在bzip2中使用-9;-)(而且你可以在ssh中指定gipz级别)。但这不是我在这里的意思。现在我想起来了,我不确定我是否正确。但我猜测ssh会将压缩分成较短的块——否则它的响应速度就不会快一半。当然,按小块进行压缩会防止它有效地压缩流。如果你真的知道你在说什么,我很乐意学习我在这里错了(如果我错了)。 - Michael Krelin - hacker

2

您需要在mysqldump和ssh之间调用gzip,例如:

mysqldump [mysql options] | gzip | ssh [ssh options]
我建议将保存的文件扩展名更改为“.sql.gz”。

应该是.sql.gz,然后在最外层进行封装。 - Michael Krelin - hacker
好的,发现了,我不小心打错了。已经修复了。 - Mike Buckbee

0

这个问题已经得到回答并被接受,但我认为你可能会觉得这是一个有趣的替代方案。

Percona的开源xtrabackup应用程序可以在运行时执行压缩(TAR)备份 - 还有很多其他有趣的功能。

我在页面上找不到锚点,但请向下滚动至“压缩备份”部分。


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