From c20f85bc25c410e876aa232686c9e9bd239fcca0 Mon Sep 17 00:00:00 2001 From: alin104n Date: Fri, 26 May 2017 18:12:32 +0300 Subject: [PATCH] Mongo merge script fixes --- data/scripts/migrator/dbsmerge_mongo.py | 125 +++++++++++++----------- 1 file changed, 68 insertions(+), 57 deletions(-) diff --git a/data/scripts/migrator/dbsmerge_mongo.py b/data/scripts/migrator/dbsmerge_mongo.py index b1e916e48..d5fc994cc 100755 --- a/data/scripts/migrator/dbsmerge_mongo.py +++ b/data/scripts/migrator/dbsmerge_mongo.py @@ -1,83 +1,94 @@ #!/usr/bin/python # depends: -# ^ pymongo # install via: easy_install pymongo +# ^ pymongo # install via: easy_install pymongo # behaviour: # ^ the script will "move" the collections if source and target server are the same # but will "copy" (dump/restore) if source and target servers are different -from_host = '127.0.0.1' -from_port = '27017' -from_db = '11' -from_user = 'cgrates' -from_pass = '' +from_host = '127.0.0.1' +from_port = '27017' +from_db = '11' +from_auth_db = 'cgrates' # Auth db on source server +from_user = 'cgrates' +from_pass = '' -to_host = '127.0.0.1' -to_port = '27017' -to_db = '10' -to_user = 'cgrates' -to_pass = '' +to_host = 'localhost' +to_port = '27017' +to_db = '10' +to_auth_db = "cgrates" # Auth db on target server +to_user = 'cgrates' +to_pass = '' + +# Overwrite target collections flag. +# Works only if from/to is on same host. +# If from/to hosts are different we use mongorestore which overwrites by default. +to_drop_target = False dump_folder = 'dump' +import sys from pymongo import MongoClient from urllib import quote_plus from collections import OrderedDict -mongo_from_url = 'mongodb://' + from_user + ':' + quote_plus(from_pass) + '@'+ from_host + ':' + from_port + '/' + from_db -if from_pass == '': # disabled auth - mongo_from_url = 'mongodb://' + from_host + ':' + from_port + '/' + from_db -client = MongoClient(mongo_from_url) +# same server +if from_host == to_host and from_port == to_port: + print('Migrating on same server...') + mongo_from_url = 'mongodb://' + from_user + ':' + quote_plus(from_pass) + '@'+ from_host + ':' + from_port + '/' + from_auth_db + if from_pass == '': # disabled auth + mongo_from_url = 'mongodb://' + from_host + ':' + from_port + '/' + from_db + client = MongoClient(mongo_from_url) -db = client[from_db] -cols = db.collection_names() + db = client[from_db] + cols = db.collection_names() -# collections found -if len(cols) > 0: - # same server - if from_host == to_host and from_port == to_port: - print('Migrating on same server...') + # collections found + if len(cols) > 0: print('Found %d collections on source. Moving...' % len(cols)) i = 0 for col in cols: i += 1 print('Moving colection %s (%d of %d)...' % (col, i, len(cols))) try: - client.admin.command(OrderedDict([('renameCollection', from_db + '.' + col), ('to', to_db + '.' + col)])) + client.admin.command(OrderedDict([('renameCollection', from_db + '.' + col), ('to', to_db + '.' + col), ('dropTarget', to_drop_target)])) except: - continue - # different servers - else: - import subprocess - import os - import shutil + e = sys.exc_info()[0] + print(e) + # no collections found + else: + print('No collections in source database.') - print('Migrating between different servers...') - print('Dumping...') - out = subprocess.check_output([ - 'mongodump', - '--host', '%s' % from_host, - '-u', '%s' % from_user, - '-p', '%s' % from_pass, - '-d', '%s' % from_db, - '--port', '%s' % from_port, - '-o', '%s' % dump_folder, - ], stderr= subprocess.STDOUT) - print('Dump complete.') - - print('Restoring...') - out = subprocess.check_output([ - 'mongorestore', - '--host', '%s' % to_host, - '-u', '%s' % to_user, - '-p', '%s' % to_pass, - '--authenticationDatabase', '%s' % to_db, - '--db', '%s' % to_db, - '--port', '%s' % to_port, - '--drop', '%s/%s' % (dump_folder,from_db), - ], stderr= subprocess.STDOUT) - print('Restore complete.') - print('Migration complete.') -# no collections found +# different servers else: - print('No collections in source database.') + import subprocess + import os + import shutil + + print('Migrating between different servers...') + print('Dumping...') + out = subprocess.check_output([ + 'mongodump', + '--host', '%s' % from_host, + '-u', '%s' % from_user, + '-p', '%s' % from_pass, + '--authenticationDatabase', '%s' % from_auth_db, + '--db', '%s' % from_db, + '--port', '%s' % from_port, + '-o', '%s' % dump_folder, + ], stderr= subprocess.STDOUT) + print('Dump complete.') + + print('Restoring...') + out = subprocess.check_output([ + 'mongorestore', + '--host', '%s' % to_host, + '-u', '%s' % to_user, + '-p', '%s' % to_pass, + '--authenticationDatabase', '%s' % to_auth_db, + '--db', '%s' % to_db, + '--port', '%s' % to_port, + '--drop', '%s/%s' % (dump_folder, from_db), + ], stderr= subprocess.STDOUT) + print('Restore complete.') +print('Migration complete.')