#!/usr/bin/env python
# _*_coding:utf-8_*_
# Author: "Edward.Liu"
# Author-Email: lonnyliu@126.com """
mongodbbackup script Rewrite 1.首先在 Mongodb服务器进行 mongodb 的数据备份
2.将备份文件进行打包
3.将 tar 包文件传送到远端服务器
4.脚本以选项的方式进行
例如: ./mongodbbackup.py -H <ipaddress>
""" import paramiko
import argparse
import sys
import subprocess
import os
import datetime
import tarfile
import shutil class SSHConnection(object):
"""""" # ----------------------------------------------------------------------
def __init__(self, host, username, password, port=22):
"""Initialize and setup connection"""
self.sftp = None
self.sftp_open = False # open SSH Transport stream
self.transport = paramiko.Transport((host, port)) self.transport.connect(username=username, password=password) # ----------------------------------------------------------------------
def _openSFTPConnection(self):
"""
Opens an SFTP connection if not already open
"""
if not self.sftp_open:
self.sftp = paramiko.SFTPClient.from_transport(self.transport)
self.sftp_open = True # ----------------------------------------------------------------------
def put(self, local_path, remote_path=None):
"""
Copies a file from the local host to the remote host
"""
self._openSFTPConnection()
self.sftp.put(local_path, remote_path) # ----------------------------------------------------------------------
def close(self):
"""
Close SFTP connection and ssh connection
"""
if self.sftp_open:
self.sftp.close()
self.sftp_open = False
self.transport.close() class MongodbBackup(object):
# ----------------------------------------------------------------------------
def local_backup(self, tarfile_name, Now, mongodb_DB_Name):
### Set Mongodb Info---------
mongodb_Host = 'localhost'
mongodb_Port = 27017
mongodb_Bin_Home = '/install/mongodb/bin/mongodump'
mongodb_Back_Dir = '/software/mongodb_back'
mongodb_Backup_Command = "%s -h %s:%s -d %s -o %s > /dev/null" % (
mongodb_Bin_Home, mongodb_Host, mongodb_Port, mongodb_DB_Name, mongodb_Back_Dir)
### Set Mongodb Info ---->End ### Start Backup Mongodb
if os.path.exists(mongodb_Back_Dir):
print "\033[32m***********String Mongodb Backing************\033[0m"
mongodb_Backup_Start = subprocess.Popen(mongodb_Backup_Command, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
mongodb_Backup_Start.wait()
if mongodb_Backup_Start.returncode == 0:
print "\033[32m*****Mongodb Backup OK!!!*****\033[0m"
else:
print "\033[31m*****Mongodb Backup Failed!!!!!*****\033[0m"
else:
os.mkdir(mongodb_Back_Dir)
print "\033[32m***********String Mongodb Backing************\033[0m"
mongodb_Backup_Start = subprocess.Popen(mongodb_Backup_Command, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
mongodb_Backup_Start.wait()
if mongodb_Backup_Start.returncode == 0:
print "\033[32m*****Mongodb Backup OK!!!*****\033[0m"
else:
print "\033[31m*****Mongodb Backup Failed!!!!!*****\033[0m"
### Backup Mongodb --->End ### Start Package Mongodb Files
os.chdir(mongodb_Back_Dir)
tar = tarfile.open(tarfile_name, "w:gz")
tar.add(mongodb_DB_Name)
tar.close()
if os.path.exists(tarfile_name):
print "\033[32m..........Packaging Is SuccessFul!!!\033[0m"
else:
print "\033[32m..........Packaging Is Failed!!!\033[0m"
### Package Mongodb -->End if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Mongodb Backup Rewrite')
parser.add_argument('-H', '--Host', help="Send backupfiles Host IP", required='True')
parser.add_argument('-u', '--user', help='Remote Host User', default='root')
if len(sys.argv) <= 1:
parser.print_help()
sys.exit(1)
### Set Use Info
mongodb_DB_Name = 'ceshi'
Now = datetime.datetime.now().strftime('%Y-%m-%d-%H')
backup_file_name = "Mongodb-%s-%s.tar.gz" % (mongodb_DB_Name, Now)
password = "RPBqoTbJyuhaHVRrc#RX23ox=" LocalBackupFiles = "/software/mongodb_back/%s" % backup_file_name
Remote_Backup_Path = "/home/general/depository/mongodbbackup_files/%s" % backup_file_name
### Set Use -->End
M_Backup = MongodbBackup()
M_Backup.local_backup(backup_file_name, Now, mongodb_DB_Name)
args = parser.parse_args()
print "\033[31mSend Backup Files To Remote Server\033[0m"
ssh = SSHConnection(args.Host, args.user, password)
ssh.put(local_path=LocalBackupFiles, remote_path=Remote_Backup_Path)
ssh.close()
### Empty LocalBackup directory
shutil.rmtree('/software/mongodb_back')
### Empty LocalBackup -->End

MongodbBackup Script的更多相关文章

  1. 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM

    刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...

  2. 页面中多个script块之间的关系

     一:函数声明与函数定义表达式在函数调用间的区别 <script type="text/javascript"> doA(); var doA = function(a ...

  3. javaScript中的小细节-script标签中的预解析

    首先介绍预解析,虽然预解析字面意思很好理解,但是却是出坑出的最多的地方,也是bug经常会有的地方,利用好预解析的特性可以解决很多问题,并且提高代码的质量及数量,浏览器在解析代码前会把变量的声明和函数( ...

  4. ABP源码分析三十七:ABP.Web.Api Script Proxy API

    ABP提供Script Proxy WebApi为所有的Dynamic WebApi生成访问这些WebApi的JQuery代理,AngularJs代理以及TypeScriptor代理.这些个代理就是j ...

  5. shell script 执行常用的两种方式

    2016-11-17 直接输入脚本名执行 ./script #!/bin/bash# /root/shell/001 # 2016-11-17 test for script running name ...

  6. js原生跨域--用script标签实现

    刚刚从培训班学习完,总想写一下东西,自从进入了这个院子,每次出现问题,总是能找到一些答案,给我一些帮助. 作为新手,就写一下简单的吧,院子里面有很多大牛, 说句实话,他们的很多代码我都看不懂. 我就写 ...

  7. script标签中defer和async属性的区别

    这篇文章来源于JS高级程序设计第三版中关于script标签的介绍,结合查阅的资料写下的学习笔记. 向html页面中插入javascript代码的主要方法就是通过script标签.其中包括两种形式,第一 ...

  8. java script第一篇(按钮全选的实现)

    今天刚学了java script,记录下学习新知识的点滴.以下是操作步骤.鉴于我是初级者,如有错误,恳请读者指正.万分谢谢. 1.新建一个文档(用NotePad软件,为了使得在浏览器中打开不是乱码,在 ...

  9. script在html中的摆放位置

    以前一直觉得script在html中的任何位置都可以,今天做一个需求的时候才更正了自己的错误思想啊--script的位置也不是随便放的. 首先是想实现一个select标签,有是和无两个option,但 ...

随机推荐

  1. 重构第30天 尽快返回 (Return ASAP)

    理解:把条件语句中复杂的判断用尽快返回来简化. 详解:如首先声明的是前面讲的”分解复杂判断“,简单的来说,当你的代码中有很深的嵌套条件时,花括号就会在代码中形成一个长长的箭头.我们经常在不同的代码中看 ...

  2. 迭代接口的IEnumerator

    我们经常在工作中用到对List,Dictionary对象的Foreach遍历,取出每一项. 其实这个接口很简单,只有一个属性2个方法. [ComVisible(true), Guid("49 ...

  3. Python入门笔记(10):字典

    一.映射类型 我理解中的映射类型是:键值对的关系,键(key)映射值(value),且它们是一对多的关系.字典是Python唯一的映射类型. 扩展1:哈希表一种数据结构,值是根据相关的键进行数据存储的 ...

  4. [小北De编程手记] : Lesson 07 - Selenium For C# 之 窗口处理

    在实际的自动化测试过程中,我们会遇见许多需要对窗口进行处理的情况.比如,点击删除某条信息的时候系统会显示一个Alert框.或者点击某个超链接时会在浏览器中打开一个新的页面.这一篇,来和大家分享一下Se ...

  5. mysql 5.6到percona 5.6小版本升级

    假设原来是mysql 5.6.19社区版,现在要升级到percona server 5.6.30. 对于大的数据库来说,采用mysqldump方式进行迁移太花费时间了,可采用新安装加载原来数据库的方式 ...

  6. galera cluster各种问题专贴

    dbforge在galera cluster下debug存储过程hang... 经查看process list,dbforge cr_debug引擎使用了use_lock()函数,而galera cl ...

  7. XML的解析方式(Java)

    dom方式解析 根据XML的层级结构在内存中分配一个树形结构,把XML的标签.属性和文本都封装成对象 优点:如果很方便实现增删改操作 缺点:如果文件过大,会造成内存溢出   sax方式解析 采用事件驱 ...

  8. css设置height 100%

    需要显式设置html,body为100%,body是相对于html,wrapper是相对于body html,body{ height: 100%; } .wrapper{ height: 100; ...

  9. HTML 5 中的标准属性

    HTML 全局属性 HTML 属性赋予元素意义和语境. 下面的全局属性可用于任何 HTML 元素. (5)= HTML5 中添加的属性. 属性 描述 accesskey 规定激活元素的快捷键. cla ...

  10. ArcGIS制图之Sub Points点抽稀

    简介 Sub Points工具是 Esri 中国自主开发的一个插件,该工具优先考虑点在空间分布上的均匀合理性,并结合点数据中包含的 "优先级" 属性进行筛选.通过获取每个点在一定范 ...