我有一台运行 Sendy(批量邮件)的 EC2 服务器,我想备份 SQL 数据库。目前,我可以通过 Virtualmin 手动下载 backup.sql 文件,但我想自动执行此操作。
我一直在考虑 Glacier,因为它成本低,而且我不需要定期检索备份;它只用于紧急情况。我在网上查了很多,对如何做到这一点有不同的想法。有人说你只能从 S3 备份到 Glacier。对我来说,这意味着 EC2 -> S3 -> Glacier,但我真的不需要 S3,觉得没有必要为它付费。
是否有可能在没有 S3 的情况下自动将 backup.sql 文件从 EC2 发送到 Glacier?
或者如果您认为有更好的方法来处理这个问题,那么我愿意听取您的想法。
答案1
这里有两个相关的 AWS 服务: - Amazon Glacier,最近称为 Amazon S3 Glacier,用于长期企业存档。除非您完全了解该服务、保管库、档案等,否则不应使用它。 - Amazon S3 是一种更灵活的服务,基于文件/对象。它有许多存储类,包括标准、不频繁访问 (IA)、Glacier 和深度存档。这是您应该使用的服务。
使用 AWS S3,您可以轻松上传备份文件。您可以根据日期使用不同的文件名,也可以覆盖旧文件并启用版本控制。
您可以使用增量备份工具,例如雷斯蒂奇,这将减少您的存储需求,并可以使备份过期(例如祖父,父亲,儿子计划)。如果您使用 Restic,则必须确保不要将诸如索引之类的文件放入冰川类中,因为需要调用时间 - 最好将它们保存在 IA 类或类似类中。从技术上讲,您可以将数据文件移动到冰川类型类,但最短存储时间可能会抵消节省的成本。只需将文件存储到 S3 深度存档类中可能更简单、更便宜。
无论哪种方式,这都很容易实现。您有一个 cron 作业,它执行数据库导出,然后使用 S3 API 将文件上传到 S3。以下是我使用 restic 为 mysql 执行此操作的方法
mysqldump --skip-dump-date -h localhost db_name > /var/backups/database/database-name.sql
restic -q --repo s3:s3.amazonaws.com/bucketname/foldername backup /var/backups/database --exclude="*.tmp" --exclude="thumbnails" --cleanup-cache
或者,如果你想进行基本的 S3 上传,我在 Windows 上使用的命令行是这样的 - Linux 类似
aws s3 sync c:\backupfolder s3://bucket-name/ --profile AWS-cli-profile-name --storage-class DEEP_ARCHIVE --exclude *.txt
在这两种情况下,我都会启用存储桶版本控制,但如果您只是上传文件而没有像 Restic 这样的增量备份,这一点尤其重要。在这种情况下,您可能希望删除旧版本,否则成本会随着时间的推移而大幅增加。