乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      mongo不同庫之間多表導入導出

       蘇魚魚的IT運維 2019-05-13

      需求:

      源庫地址: 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了!

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多