需求: 源库地址: 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()
这个脚本调用了另外一个远程连接服务器执行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) # 执行多条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了!
|