试图将PostgreSQL备份(~20Tb(长期保存到Google Cloud Storage,我目前正在通过gsutil
将PostgreSQLpg_dump()
命令传送到流传输。
pg_dump -d $DB_NAME -b --format=t
| gsutil cp - gs://$BUCKET_NAME/$BACKUP_FILE
然而,我担心该过程会因为GCS的5Tb对象大小限制而崩溃。
有没有办法将大于5Tb的对象上传到谷歌云存储?
版本:使用split
我正在考虑将pg_dump
管道传输到Linux的split
实用程序和gsutil cp
。
pg_dump -d $DB -b --format=t
| split -b 50G -
| gsutil cp - gs://$BUCKET/$BACKUP
这样行吗
您通常不希望通过流传输上传TB范围内的单个对象。流媒体传输有两个主要的缺点,它们对你来说都是非常坏的消息:
- 流传输不使用云存储的校验和支持。您将定期进行HTTP数据完整性检查,但仅此而已,对于周期性的5 TB上传,最终导致备份损坏的可能性为零
- 如果流式传输失败,则无法恢复。假设你全天候以100Mbps的速度上传,5 TB的上传至少需要4天半的时间,如果你的HTTP连接失败,你需要从头开始
相反,我的建议是:
- 首先,最小化文件大小。pg_dump有许多减少文件大小的选项。这可能是类似于"--format=c-Z9";可能会生成一个小得多的文件
- 其次,如果可能的话,在上传之前将转储存储为一个文件(或者,最好是一系列拆分文件(。这很好,因为你可以计算它们的校验和,gsutil可以利用这一点,如果你愿意,你还可以手动验证它们是否正确上传。当然,这可能不实用,因为你需要5TB的备用硬盘空间,但除非你的数据库在几天内不会更改,否则在你失去连接的情况下,可能没有简单的重试方法
如Ferregina Pelona、guillaume blaquiere和John Hanley所述。如本文件所述,无法绕过谷歌实施的5-TB限制:
云存储5TB对象大小限制
云存储最多支持5 TB的单个对象大小。如果有大于5TB的对象,则对象传输将失败用于内部部署的云存储或传输的那些对象。
如果文件超过限制(5 TB(,则传输失败。
您可以使用谷歌的问题跟踪器来请求此功能,在提供的链接中,您可以检查请求的功能或请求满足您期望的功能。