boto

2015-12-14 6 views
5

का उपयोग कर ec2 से s3 तक फ़ाइलों को स्थानांतरित करते समय त्रुटि प्राप्त करना मैं इस प्रक्रिया का पालन कर रहा हूं link s3 पर अपना mongodump अपलोड करने के लिए।boto

बैश स्क्रिप्ट

#!/bin/sh 

MONGODB_SHELL='/usr/bin/mongo' 

DUMP_UTILITY='/usr/bin/mongodump' 
DB_NAME='amicus' 

date_now=`date +%Y_%m_%d_%H_%M_%S` 
dir_name='db_backup_'${date_now} 
file_name='db_backup_'${date_now}'.bz2' 

log() { 
    echo $1 
} 

do_cleanup(){ 
    rm -rf db_backup_2010* 
    log 'cleaning up....' 
} 

do_backup(){ 
    log 'snapshotting the db and creating archive' && \ 
    ${MONGODB_SHELL} admin fsync_lock.js && \ 
    ${DUMP_UTILITY} -d ${DB_NAME} -o ${dir_name} && tar -jcf $file_name ${dir_name} 
    ${MONGODB_SHELL} admin unlock.js && \ 
    log 'data backd up and created snapshot' 
} 

save_in_s3(){ 
    log 'saving the backup archive in amazon S3' && \ 
    python aws_s3.py set ${file_name} && \ 
    log 'data backup saved in amazon s3' 
} 

do_backup && save_in_s3 && do_cleanup 

aws_s3.py

ACCESS_KEY='' 
SECRET='' 
BUCKET_NAME='s3:///s3.amazonaws.com/database-backup' #note that you need to create this bucket first 

from boto.s3.connection import S3Connection 
from boto.s3.key import Key 

def save_file_in_s3(filename): 
    conn = S3Connection(ACCESS_KEY, SECRET) 
    bucket = conn.get_bucket(BUCKET_NAME) 
    k = Key(bucket) 
    k.key = filename 
    k.set_contents_from_filename(filename) 

def get_file_from_s3(filename): 
    conn = S3Connection(ACCESS_KEY, SECRET) 
    bucket = conn.get_bucket(BUCKET_NAME) 
    k = Key(bucket) 
    k.key = filename 
    k.get_contents_to_filename(filename) 

def list_backup_in_s3(): 
    conn = S3Connection(ACCESS_KEY, SECRET) 
    bucket = conn.get_bucket(BUCKET_NAME) 
    for i, key in enumerate(bucket.get_all_keys()): 
     print "[%s] %s" % (i, key.name) 

def delete_all_backups(): 
    #FIXME: validate filename exists 
    conn = S3Connection(ACCESS_KEY, SECRET) 
    bucket = conn.get_bucket(BUCKET_NAME) 
    for i, key in enumerate(bucket.get_all_keys()): 
     print "deleting %s" % (key.name) 
     key.delete() 

if __name__ == '__main__': 
    import sys 
    if len(sys.argv) < 3: 
     print 'Usage: %s <get/set/list/delete> <backup_filename>' % (sys.argv[0]) 
    else: 
     if sys.argv[1] == 'set': 
      save_file_in_s3(sys.argv[2]) 
     elif sys.argv[1] == 'get': 
      get_file_from_s3(sys.argv[2]) 
     elif sys.argv[1] == 'list': 
      list_backup_in_s3() 
     elif sys.argv[1] == 'delete': 
      delete_all_backups() 
     else: 
      print 'Usage: %s <get/set/list/delete> <backup_filename>' % (sys.argv[0]) 

लेकिन यह त्रुटि मिलती रहती:

Traceback (most recent call last): 
    File "aws_s3.py", line 42, in <module> 
    save_file_in_s3(sys.argv[2]) 
    File "aws_s3.py", line 13, in save_file_in_s3 
    k.set_contents_from_filename(filename) 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 1362, in set_contents_from_filename 
    encrypt_key=encrypt_key) 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 1293, in set_contents_from_file 
    chunked_transfer=chunked_transfer, size=size) 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 750, in send_file 
    chunked_transfer=chunked_transfer, size=size) 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 951, in _send_file_internal 
    query_args=query_args 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 664, in make_request 
    retry_handler=retry_handler 
    File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 1071, in make_request 
    retry_handler=retry_handler) 
    File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 1030, in _mexe 
    raise ex 
socket.error: [Errno 104] Connection reset by peer 

अपना शोध का एक सा था और पता चला कि उसके किसी तरह का boto में बग इस के साथ आगे बढ़ने के लिए कहां?

+0

बाल्टी नाम बहुत संदिग्ध है, बहुत सारे डुप्लिकेट कोड हैं, आप कोड लिखने के बजाय जेनेरिक 'aws-cli' का उपयोग कर सकते हैं, लेकिन आखिरकार' initiate_multipart_upload' आपको बोटो में चाहिए। – tedder42

+0

@ tedder42 जो एक कॉपी पेस्ट त्रुटि थी। लेकिन पूरी प्रक्रिया को स्वचालित करने के लिए मैं 's3cmd' का उपयोग कर रहा हूं और इसे मेरे लिए crontab कार्यों में चला रहा हूं। –

उत्तर

3

क्योंकि मुझे कोई काम नहीं मिला है कि इसे कैसे काम किया जाए, मैंने अपनी बैश स्क्रिप्ट में s3cmd का उपयोग किया। लेकिन मुझे अभी भी फाइलों> 1 जीबी के लिए इसका परीक्षण करना होगा।

#!/bin/sh 

MONGODB_SHELL='/usr/bin/mongo' 

DUMP_UTILITY='/usr/bin/mongodump' 
DB_NAME='amicus' 

date_now=`date +%Y_%m_%d_%H_%M_%S` 
dir_name='db_backup_'${date_now} 
file_name='db_backup_'${date_now}'.bz2' 

log() { 
    echo $1 
} 

do_cleanup(){ 
    rm -rf db_backup_2010* 
    log 'cleaning up....' 
} 

do_backup(){ 
    log 'snapshotting the db and creating archive' && \ 

    ${DUMP_UTILITY} -d ${DB_NAME} -o ${dir_name} && tar -jcf $file_name ${dir_name} 

    log 'data backd up and created snapshot' 
} 

save_in_s3(){ 
    log 'saving the backup archive in amazon S3' && \ 
    python aws_s3.py set ${file_name} && \ 
    s3cmd put ${file_name} s3://YOURBUCKETNAME 
    log 'data backup saved in amazon s3' 
} 

do_backup && save_in_s3 && do_cleanup 
+1

1 जीबी –

0

यह शायद अपलोड की गई फ़ाइल का आकार के साथ क्या करना है -

यहाँ अद्यतन कोड है।

"सहकर्मी द्वारा कनेक्शन रीसेट" आमतौर पर इसका मतलब है कि रिमोट सर्वर कनेक्शन बंद कर देता है (ऐसा नहीं लगता कि यह एक बोटो समस्या है)। यह भी अनुमान लगाने जा रहा है कि यह कुछ प्रकार का टाइमआउट है जिसे आप अनुरोध करने के लिए मार रहे हैं (एक बड़ी फाइल के लिए स्थानांतरण में काफी समय लगता है)।

यदि आप इसे स्वयं करना चाहते हैं तो मैं मल्टीपार्ट अपलोड को देखने की अनुशंसा करता हूं। यह उदाहरण देखें: https://gist.github.com/chrishamant/1556484

s3cmd फ़ाइल आकार के आधार पर पीछे की ओर करता है।

+0

से अधिक फ़ाइलों के साथ यह अच्छा काम कर रहा है मैं परीक्षण उद्देश्य के लिए केवल 10 एमबी अपलोड कर रहा था। –

संबंधित मुद्दे