上传s3对象的Cron作业



最近我在上传大数据库备份文件(~80GB)到s3时遇到了麻烦。

upload failed: - to s3://<> 'Connection aborted.', BrokenPipeError(32, 'Broken pipe')

在s3 cp命令中尝试option--expected-size 107374182400(100GB =107374182400 Bytes)后,可以上传。因此,我修改了cron作业脚本。我想当数据库备份大于100GB时,我必须再次修改它的值。我如何优化这个解决方案?

计划脚本
mongodump --archive --gzip --authenticationDatabase admin 
--db db -u mongobackup 
2> $LOG_FILE 
| aws s3 cp --storage-class=STANDARD_IA - "s3://$BUCKET/$BACKUP_NAME" --expected-size 107374182400 2> $LOG_FILE_S3

参考:https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html: ~:文本上传% 20 = % 20当地% 20文件% 20流% 20,% 20比% % 20大% 20 2050 gb % 20 % 20 s3

最诚挚的问候,

您所展示的脚本正在向stdout输出数据,AWS CLI正在将数据从stdin复制到S3(如-源名称所示)。

数据流的形式出现大小未知(而磁盘上文件的大小很容易确定)

From aws s3 cp - aws CLI Command Reference:

--expected-size (string)该参数以字节为单位指定流的预期大小。注意,只有当流上传到s3且大小大于50GB时,才需要参数. 在这些情况下,如果不包含此参数,可能会导致上传失败,因为上传的部分太多。

因此,这个值需要提供一个'提示'至于数据的大小,以及上传的每个"部分"的大小。

我怀疑提供一个太大的数字(例如大小的两倍)是可以的,所以我建议提供一个肯定大于已知大小的数字. 随着数据规模的增长,您需要在将来增加它。(因此,也许甚至可以尝试一个10倍必要大小的数字?)

最新更新