需求: 源庫地址: 192.168.10.10 目標地址: 192.168.10.20 需要將源庫的多張表復制到目標庫 python腳本 #!/usr/bin/python # -*- coding: UTF-8 -*- import time from pymongo import MongoReplicaSetClient from pymongo import MongoClient import logging from remotessh import sshmongo
# 日志存儲目錄 logging.basicConfig(filename='D:/info.txt', level=logging.INFO)
# 獲取當前時間 NowTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) # 數據源 DataSource = MongoClient('mongodb://192.168.10.10:27017') dbSource = DataSource.company # 密碼認證,沒有可不寫 dbSource.authenticate('test', 'test') # 目標庫 DataTarget = MongoClient('mongodb://192.168.10.20:27017') dbTarget = DataTarget.company
# 查看所有庫名
# print c.list_database_names() # 需要導入的三張表 ImportTables = ['cm', 'ccc', 'hehe'] # 查看所有表 # for i in dbTarget.collection_names(): # print i, '總條數:', dbTarget[i].find().count()
def MainFunc(): for i in ImportTables: if i in dbSource.collection_names(): SourceNum = dbSource[i].find().count() if i in dbTarget.collection_names(): TargetNum = dbTarget[i].find().count() print i, '源庫總條數:', SourceNum, i, '目標總條數:', TargetNum # 刪除目標表中的數據 dbTarget[i].drop() # 插入新的數據 res = sshmongo.RemoteSer(i) if res == 0001: logging.info(NowTime + "-------->" + "無法通過ssh連接遠程服務器") elif res == 0002: logging.info(NowTime + "-------->" + "連接mongo失敗或者插入數據錯誤!") else: pass else: logging.info( NowTime + "-------->" + "%s 表在源庫共有 %d 條數據,目標中沒有,直接導入數據" % (i, SourceNum)) res = sshmongo.RemoteSer(i) if res == 0001: logging.info(NowTime + "-------->" + "無法通過ssh連接遠程服務器") elif res == 0002: logging.info(NowTime + "-------->" + "連接mongo失敗或者插入數據錯誤!") else: pass else: # print "%s 表在源庫中不存在,無法導入目標庫" % i logging.info(NowTime + "-------->" + "%s 表在源庫中不存在,無法導入目標庫" % i) DataSource.close() DataTarget.close()
MainFunc()
這個腳本調用了另外一個遠程連接服務器執(zhí)行shell命令的python腳本 #!/usr/bin/python # -*- coding: UTF-8 -*- import paramiko import os import re
hostname = '192.168.10.20' username = 'root' password = '11111111111' port = int(20001)
def RemoteSer(tables): # noinspection PyBroadException try: ssh = paramiko.SSHClient() key = paramiko.AutoAddPolicy() ssh.set_missing_host_key_policy(key) ssh.connect(hostname, port, username, password, timeout=5) # 執(zhí)行多條shell命令 # stdin, stdout, stderr = ssh.exec_command('cd /data/; ls -l; touch test.txt',get_pty=True) # stdin, stdout, stderr = ssh.exec_command('rm -rf %s/*' % backdir, get_pty=True) stdin, stdout, stderr = ssh.exec_command('mongoexport -h 192.168.10.10 -u test -ptest -d company --port 27017 -c' ' %s | mongoimport -h 192.168.10.20 -d company -c %s --port 27017' % (tables, tables), get_pty=True)
for i in stdout.readlines(): ErrorStr = re.compile(r'error', re.IGNORECASE).findall(i) if ErrorStr: pass return 0002
ssh.close()
except Exception: # print "連接服務器失敗!" return 0001
把你需要的表寫入到 ImportTables 并且修改成你的地址就OK了!
|