如何使用s3cmd上传压缩并上传到s3

时间:2014-10-04 11:57:52

标签: amazon-s3 compression gzip s3cmd

我刚发现我的盒子剩下5%的HDD硬盘驱动器,我想要差不多250GB的mysql bin文件,我想发送给s3。我们已经从mysql迁移到NoSQL,目前还没有使用mysql。但是我希望在迁移之前保留旧数据。

问题是我不能只是在将文件发送到那里之前对文件进行tar。所以我想我可以在发送前动态gzip,因此它不会将压缩文件存储在硬盘上。

for i in * ; do cat i | gzip -9c | s3cmd put - s3://mybudcket/mybackups/$i.gz; done

要测试此命令,我在没有循环的情况下运行它并且它没有发送任何内容,但也没有抱怨任何事情。无论如何要实现这个目标吗?

操作系统是ubuntu 12.04 s3cmd版本是1.0.0

感谢您的建议。

2 个答案:

答案 0 :(得分:2)

允许stdin到S3的功能在2014年2月被添加到Master分支,所以我想确保你的版本比那个更新?版本1.0.0是从2011年和之前的版本,当前(撰写本文时)是1.5.2。您可能需要更新您的s3cmd

版本

除此之外,根据https://github.com/s3tools/s3cmd/issues/270这应该有效,除了你的“做猫我”缺少$符号以表明它是一个变量。

答案 1 :(得分:2)

或者您可以使用https://github.com/minio/mc。 Minio Client aka mc是用Golang编写的,在Apache License Version 2下发布。

它为用户实现mc pipe命令,以便将数据直接传输到Amazon S3。 mc pipe也可以并行管道到多个目的地。内部mc pig对输出进行流式处理,并行进行多部分上传。

$ mc pipe
NAME:
   mc pipe - Write contents of stdin to files. Pipe is the opposite of cat command.

USAGE:
   mc pipe TARGET [TARGET...]

实施例

#!/bin/bash

for i in *; do
   mc cat $i | gzip -9c | mc pipe https://s3.amazonaws.com/mybudcket/mybackups/$i.gz
done

如果你能看到mc也实现了mc cat命令:-)。

相关问题