当前位置: 首页 > 知识库问答 >
问题:

AWS S3 bucket的备份策略

薛栋
2023-03-14

我正在寻找一些备份S3 bucket的建议或最佳实践。
备份S3数据的目的是防止数据丢失,原因如下:

  1. S3问题
  2. 意外从S3删除此数据的问题

经过一番调查,我看到以下选项:

  1. 使用版本控制http://docs.aws.amazon.com/amazons3/latest/dev/versioning.html
  2. 使用AWS SDK从一个S3桶复制到另一个S3桶
  3. 备份到Amazon Glacier http://aws.Amazon.com/en/Glacier/
  4. 备份到生产服务器,生产服务器本身已备份

我应该选择什么选项?只在S3上存储数据有多安全?想听听你的意见。
一些有用的链接:

  • 数据保护文档
  • 数据保护常见问题

共有1个答案

沈永新
2023-03-14

最初发布在我的博客上:http://eladnava.com/backing-up-your-amazon-s3-buckets-to-ec2/

这可以通过使用多个命令行实用程序轻松实现,这些实用程序可以将远程S3 bucket同步到本地文件系统。

s3cmd
起初,s3cmd看起来非常有前途。然而,在我巨大的S3 bucket上尝试之后,它未能扩展,出现分段错误。不过,它在小桶上确实工作得很好。因为它对大桶不起作用,我开始寻找替代方案。

它提供了一个有用的sync命令,可以快速轻松地将远程bucket文件下载到本地文件系统。

$ aws s3 sync s3://your-bucket-name /home/ubuntu/s3/your-bucket-name/
  • 可伸缩-支持巨大的S3桶
  • 多线程-通过使用多线程来更快地同步文件
  • 仅智能同步新的或更新的文件
  • 快速-由于它的多线程特性和智能同步算法

方便的是,sync命令不会删除源(S3 bucket)中缺少的目标文件夹(本地文件系统)中的文件,反之亦然。这非常适合备份S3--如果文件从bucket中删除,则重新同步不会在本地删除它们。如果删除本地文件,它也不会从源桶中删除。

让我们从安装AWSCLI开始。有几种方法可以做到这一点,但是,我发现通过apt-get安装它是最简单的。

$ sudo apt-get install awscli

接下来,我们需要通过创建用户并附加AmazonS3ReadOnlyAccess策略,用访问密钥ID和密钥配置AWSCLI。这还将防止您或任何获得这些凭据访问权限的人删除您的S3文件。确保输入您的S3区域,例如US-EAST-1

$ aws configure

让我们准备本地S3备份目录,最好在/home/ubuntu/S3/{BUCKET_NAME}中。确保将{BUCKET_NAME}替换为实际的bucket名称。

$ mkdir -p /home/ubuntu/s3/{BUCKET_NAME}

让我们使用以下命令第一次同步桶:

$ aws s3 sync s3://{BUCKET_NAME} /home/ubuntu/s3/{BUCKET_NAME}/

假设bucket存在,AWS凭据和区域正确,目标文件夹有效,awscli将开始将整个bucket下载到本地文件系统

根据存储桶的大小和您的Internet连接,它可能需要几秒钟到几个小时的时间。完成后,我们将继续设置一个自动cron作业,以保持bucket的本地副本是最新的。

继续在/home/ubuntu/s3中创建sync.sh文件:

$ nano /home/ubuntu/s3/sync.sh

将以下代码复制并粘贴到sync.sh:

#!/bin/sh

# Echo the current date and time

echo '-----------------------------'
date
echo '-----------------------------'
echo ''

# Echo script initialization
echo 'Syncing remote S3 bucket...'

# Actually run the sync command (replace {BUCKET_NAME} with your S3 bucket name)
/usr/bin/aws s3 sync s3://{BUCKET_NAME} /home/ubuntu/s3/{BUCKET_NAME}/

# Echo script completion
echo 'Sync complete'

确保在整个脚本中用您的S3 bucket名称替换{BUCKET_NAME}两次。

$ sudo chmod +x /home/ubuntu/s3/sync.sh

让我们尝试运行该脚本以确保它实际工作:

$ /home/ubuntu/s3/sync.sh

输出应该类似于以下内容:

接下来,让我们通过执行以下命令来编辑当前用户crontab:

$ crontab -e
m h  dom mon dow   command

以下命令配置crontab每小时运行sync.sh脚本(通过minute:0和hour:*参数指定),并将脚本输出管道到s3目录中的sync.log文件:

0 * * * * /home/ubuntu/s3/sync.sh > /home/ubuntu/s3/sync.log

您应该将这行添加到正在编辑的crontab文件的底部。然后,继续并通过按Ctrl+W将文件保存到磁盘,然后输入。然后,您可以通过按Ctrl+X退出nanocrontab现在将每小时运行一次同步任务。

Pro提示:您可以通过检查/home/ubuntu/s3/sync.log、检查执行日期和时间的内容以及检查日志以查看同步了哪些新文件来验证每小时执行一次的cron作业是否执行成功。

一切就绪!您的S3 bucket现在将每小时自动同步到您的EC2服务器,您应该可以走了。请注意,随着时间的推移,随着S3桶变大,您可能必须增加EC2服务器的EBS卷大小以容纳新文件。您始终可以通过遵循本指南来增加EBS卷大小。

 类似资料:
  • 主要内容:完全备份,累计增量备份,差异增量备份常用的备份策略有完全备份和增量备份,而增量备份有可细分为累计增量备份和差异增量备份。下面来分别讲述不同备份策略以及之间的区别。 完全备份 完全备份 是指把所有需要备份的数据全部备份。当然,完全备份可以备份整块硬盘、整个分区或某个具体的目录。对于 Linux 操作系统来说,完全备份指的就是将根目录下的所有文件进行备份。 完全备份的好处是,所有数据都进行了备份,系统中任何数据丢失都能恢复,且恢复效率较

  • 20.5 鸟哥的备份策略 每部主机的任务都不相同,重要的数据也不相同,重要性也不一样,因此,每个人的备份思考角度都不一样! 有些备份策略是非常有趣的,包括使用多个磁带机与磁带来自动备份企业数据哩 [3] 。 就鸟哥的想法来说,鸟哥并没有想要将整个系统完整的备份下来,因为太耗时间了!而且就鸟哥的立场而言,似乎也没有这个必要, 所以通常鸟哥只备份较为重要的文件而已!不过,由于鸟哥需要备份 /home

  • 我在寻找一种方法来备份谷歌应用程序引擎上的blobstore,以从意外删除中恢复。我希望能够同时备份datastore和blobstore,这样我就可以恢复整个系统。 我尝试的一件事是使用谷歌云存储我的blob,然后制作buckets的备份副本。但是,如果我在blobstore查看器中删除一个文件(它也在google cloud storage中删除它),然后使用gsutil从bucket备份中恢

  • 我无法找到通过 CLI 创建自定义备份策略的方法 https://docs.microsoft.com/en-us/cli/azure/backup/policy?view=azure-cli-latest 但是,这可以通过REST API调用来完成https://docs.microsoft.com/en-us/azure/backup/backup-azure-arm-userestapi-c

  • 本文向大家介绍小型Drupal数据库备份以及大型站点MySQL备份策略分享,包括了小型Drupal数据库备份以及大型站点MySQL备份策略分享的使用技巧和注意事项,需要的朋友参考一下 中小站点简单备份策略 基于drupal的中小行网站,我们可以使用backup_migrate模块,该模块提供了定期备份的功能,备份的时间、保留多少个备份等等设置,设置好之后,定期执行cron即可备份成功。 一般的Dr

  • MySQL的备份-mysqldump命令的使用 备份数据库的参数 Myisam表常规备份(参数) InnoDB表常规备份(推荐使用的存储引擎) 普通方式备份数据库 多实例指定sock文件备份数据库test并使用gzip压缩 使用egrep查看备份的文件的sql内容 -B参数 备份多个库 备份库下的表 备份库下的某个表 备份库下的多个表 -d参数 备份表结构 -t参数 备份表数据 -F参数 刷新二进