1

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

问题是我不能在将文件发送到那里之前循环压缩文件。所以我想我可以在发送之前即时 gzip,这样它就不会将压缩文件存储在 HDD 上。

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

为了测试这个命令,我在没有循环的情况下运行它,它没有发送任何东西,但也没有抱怨任何东西。有没有办法做到这一点?

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

谢谢你的建议。

4

2 回答 2

3

或者,您可以使用https://github.com/minio/mc。Minio Client akamc是用 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了命令:-)。

于 2015-11-09T06:56:28.277 回答
2

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

除此之外,根据https://github.com/s3tools/s3cmd/issues/270,这应该可以工作,除非您的“do cat i”缺少$符号以将其指示为变量。

于 2015-03-03T05:45:16.670 回答