我在Amazon S3存儲桶中有重要數據。我想將其他內容每週備份到另一個雲服務,甚至是S3內部。在數據丟失的情況下,最好的方法是將我的存儲桶同步到不同區域內的新存儲桶。如何備份或同步Amazon S3存儲桶?
我該怎麼做?
我在Amazon S3存儲桶中有重要數據。我想將其他內容每週備份到另一個雲服務,甚至是S3內部。在數據丟失的情況下,最好的方法是將我的存儲桶同步到不同區域內的新存儲桶。如何備份或同步Amazon S3存儲桶?
我該怎麼做?
我更喜歡本地備份使用同步功能僅變化已更新。這不是完美的備份解決方案,但是,因爲你需要,你可以在以後實施的定期更新:
s3cmd sync --delete-removed s3://your-bucket-name/ /path/to/myfolder/
如果你從來沒有使用過s3cmd,安裝和使用進行配置:
pip install s3cmd
s3cmd --configure
也應該有S3備份服務爲每月5美元,但我也會檢查Amazon Glacier,如果您使用多部分上傳,可以讓您放置近40 GB的單個存檔文件。
http://docs.aws.amazon.com/amazonglacier/latest/dev/uploading-archive-mpu.html#qfacts
請記住,如果您的S3帳戶被盜,您有機會失去所有的數據,你會同步一個空文件夾或文件的格式不正確。因此,您最好編寫一個腳本來多次歸檔備份,例如通過檢測一週的開始。
更新2016年1月17日:基於AWS CLI
的Python現在已經非常成熟。
請使用:https://github.com/aws/aws-cli
例子:aws s3 sync s3://mybucket .
這些$ 5 s3備份服務有哪些?我想要一個可以防止人爲錯誤的備份。我們使用s3就像共享服務器一樣。 – 2014-12-27 20:37:38
他們似乎不在身邊,我建議讓另一個雲帳戶(例如Google雲端平臺)存儲重複數據。 – hurturk 2016-01-17 16:37:10
這個腳本備份的S3桶:
#!/usr/bin/env python
from boto.s3.connection import S3Connection
import re
import datetime
import sys
import time
def main():
s3_ID = sys.argv[1]
s3_key = sys.argv[2]
src_bucket_name = sys.argv[3]
num_backup_buckets = sys.argv[4]
connection = S3Connection(s3_ID, s3_key)
delete_oldest_backup_buckets(connection, num_backup_buckets)
backup(connection, src_bucket_name)
def delete_oldest_backup_buckets(connection, num_backup_buckets):
"""Deletes the oldest backup buckets such that only the newest NUM_BACKUP_BUCKETS - 1 buckets remain."""
buckets = connection.get_all_buckets() # returns a list of bucket objects
num_buckets = len(buckets)
backup_bucket_names = []
for bucket in buckets:
if (re.search('backup-' + r'\d{4}-\d{2}-\d{2}' , bucket.name)):
backup_bucket_names.append(bucket.name)
backup_bucket_names.sort(key=lambda x: datetime.datetime.strptime(x[len('backup-'):17], '%Y-%m-%d').date())
# The buckets are sorted latest to earliest, so we want to keep the last NUM_BACKUP_BUCKETS - 1
delete = len(backup_bucket_names) - (int(num_backup_buckets) - 1)
if delete <= 0:
return
for i in range(0, delete):
print 'Deleting the backup bucket, ' + backup_bucket_names[i]
connection.delete_bucket(backup_bucket_names[i])
def backup(connection, src_bucket_name):
now = datetime.datetime.now()
# the month and day must be zero-filled
new_backup_bucket_name = 'backup-' + str('%02d' % now.year) + '-' + str('%02d' % now.month) + '-' + str(now.day);
print "Creating new bucket " + new_backup_bucket_name
new_backup_bucket = connection.create_bucket(new_backup_bucket_name)
copy_bucket(src_bucket_name, new_backup_bucket_name, connection)
def copy_bucket(src_bucket_name, dst_bucket_name, connection, maximum_keys = 100):
src_bucket = connection.get_bucket(src_bucket_name);
dst_bucket = connection.get_bucket(dst_bucket_name);
result_marker = ''
while True:
keys = src_bucket.get_all_keys(max_keys = maximum_keys, marker = result_marker)
for k in keys:
print 'Copying ' + k.key + ' from ' + src_bucket_name + ' to ' + dst_bucket_name
t0 = time.clock()
dst_bucket.copy_key(k.key, src_bucket_name, k.key)
print time.clock() - t0, ' seconds'
if len(keys) < maximum_keys:
print 'Done backing up.'
break
result_marker = keys[maximum_keys - 1].key
if __name__ =='__main__':main()
我用這個在一耙的任務(一個Rails應用程序):
desc "Back up a file onto S3"
task :backup do
S3ID = "AKIAJM3FAKEFAKENRWVQ"
S3KEY = "0A5kuzV+F1pbaMjZxHQAZfakedeJd0dfakeNpry"
SRCBUCKET = "primary-mzgd"
NUM_BACKUP_BUCKETS = 2
Dir.chdir("#{Rails.root}/lib/tasks")
system "./do_backup.py #{S3ID} #{S3KEY} #{SRCBUCKET} #{NUM_BACKUP_BUCKETS}"
end
FYI ...您的S3 ID和密鑰似乎在這個答案中暴露。 – 2014-04-30 23:33:10
這些都是假的。 – 2014-05-01 19:33:03
我試圖做到這一點,在過去,它仍然煩人的困難,尤其是在大型,多GB,許多-數百萬的檔案桶。我找到的最佳解決方案是S3S3Mirror,這是爲此目的而製作的。
這不像轉換開關一樣簡單,但它仍然比我嘗試過的大多數其他DIY解決方案都要好。它是多線程的,將比類似的單線程方法更快地複製文件。
一個建議:在一個單獨的EC2實例上設置它,一旦你運行它,關閉該機器,但離開AMI在那裏。然後,當你需要重新運行時,再次啓動機器,你就全都準備好了。這遠不如真正的自動化解決方案好,但可以管理每月或每週的備份。
最好的辦法是在發生數據丟失的情況下,將我的存儲桶與不同區域中的新存儲桶同步。
從24 Mar 2015開始,可以使用S3的Cross-Region Replication功能。
一個上市Use-case Scenarios的是「合規性要求」,這似乎是關鍵數據,防止數據丟失額外的保護你的使用情況相符:亞馬遜S3存儲數據能夠跨
雖然默認多個地理上距離較遠的可用區域,合規性要求可能會要求您將數據存儲在更遠的距離。跨區域複製允許您在遠距離AWS區域之間複製數據以滿足這些合規要求。
有關設置說明,請參閱How to Set Up Cross-Region Replication。
使用s3cmd http://s3tools.org/s3cmd或由s3 api編寫自己的備份工具。 – qrtt1 2012-08-05 14:24:48
真的很有用嗎? S3中的數據是多餘的。來自http://aws.amazon.com/s3/#protecting:「亞馬遜S3的標準存儲設計旨在維持兩個設施中數據的併發丟失。」 – ben 2012-08-05 14:28:09
欲瞭解更多關於此方法實用性的信息(摘自[S3常見問題](http://aws.amazon.com/s3/faqs/#How_durable_is_Amazon_S3)): Amazon S3旨在提供給定年份99.999999999%的持久性對象。這種耐久性水平對應於物體的平均年度預期損失0.000000001%。例如,如果您使用Amazon S3存儲10,000個對象,則平均預計每10,000,000年就會丟失一個對象。另外,Amazon S3旨在維持兩個設施中的數據同時丟失。 – Viccari 2012-08-05 22:33:46