用python写的方便备份插件 yunbk

yunbk的安装可以直接用pip执行:

    pip install yunbk

github地址如下:

    https://github.com/dantezhu/yunbk

而用法也非常简单,比如要备份mysql,则代码如下:
   
from yunbk import YunBK
from yunbk.backend.local import LocalBackend
 
import sh
 
backend = LocalBackend('/data/backup')
 
with YunBK('mysql', [backend]) as ybk:
    sh.mysqldump(u='root',
                 all_databases=True,
                 _out="dump.sql")
    ybk.backup()

怎么样,简单吧!
上面的代码会将mysql的所有数据库dump下来之后,保存到本地的 /data/backup 目录,并且按照分类和日期命名。除了保存到本地之外,yunbk还提供了 ftp, sftp, 百度的bcs,阿里的oss等多种备份方式.

简单讲一下yunbk的设计原理:

    在上面的代码中,用with语句进入了yunbk指定的一个默认临时目录,此时所有的文件写入都会在这个目录里。
    当调用backup的时候,yunbk会调用[backend] 中每个backend的upload方法,将数据备份起来
    当with结束的时候,yunbk创建的临时目录会自动删除,即不会留下任何痕迹

需要特别说明的是,yunbk是受 bakthat 这个插件启发而来,只是他默认使用亚马逊作为备份方式,在天朝你懂得,另外还有一些实现方式觉得不是特别好,代码有些冗余,所以就自己实现了一个。

废话就不多少了,列一下常用的几种被封方式的示例:
FTP备份

from yunbk import YunBK
from yunbk.backend.ftp import FTPBackend
 
import sh
 
backend = FTPBackend('127.0.0.1', 'user', 'passwd', '/data/backup')
 
with YunBK('mysql', [backend]) as ybk:
    sh.mysqldump(u='root',
                 all_databases=True,
                 _out="dump.sql")
    ybk.backup()

阿里OSS备份

from yunbk import YunBK
from yunbk.backend.ali_oss import OSSBackend
 
import sh
 
backend = OSSBackend('127.0.0.1', 'access_id', 'secret_access_key', 'backup_my_data')
 
with YunBK('mysql', [backend]) as ybk:
    sh.mysqldump(u='root',
                 all_databases=True,
                 _out="dump.sql")
    ybk.backup()

sftp 和 百度bcs 就不写啦,大家应该已经能够自己写出来啦

另外,推荐结合定时执行的库: APScheduler 一起使用,很方便:
   
# -*- coding: utf-8 -*-
 
import datetime
from apscheduler.scheduler import Scheduler
from apscheduler.events import EVENT_JOB_ERROR, EVENT_JOB_MISSED
import logging
 
from yunbk.yunbk import YunBK
from yunbk.backend.local import LocalBackend
 
 
logger = logging.getLogger('default')
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG)
 
sched = Scheduler(daemonic=False)
 
 
def err_listener(ev):
    if ev.exception:
        logger.fatal('%s error.', str(ev.job), exc_info=True)
    else:
        logger.info('%s miss', str(ev.job))
 
 
@sched.cron_schedule(second='1')
def job():
    logger.debug(datetime.datetime.now())
    backend = LocalBackend('/data/release/backup/')
    with YunBK('ybk', [backend]) as ybk:
        f = open('t2.txt', 'w')
        f.write('ok')
        f.close()
        ybk.backup()
 
 
if __name__ == '__main__':
    sched.add_listener(err_listener, EVENT_JOB_ERROR | EVENT_JOB_MISSED)
    sched.start()

好啦,就到这里,希望对大家有用:)

时间: 2016-03-06
Tags: 代码, 备份

用python写的方便备份插件 yunbk的相关文章

android-关于用python写服务器的问题

问题描述 关于用python写服务器的问题 本人学生,最近在做课程设计,写一个Android的移动应用,需要编写一个服务器,同学推荐我用python来写,不知道好写么,另外写完后连接java写的客户端好连接么?现在初步打算是在手机上装好客户端,然后电脑上运行服务器后,手机连上电脑的WIFI来实现客户端和服务器的连接,这样好么?ps:本人没学过python,如果好写的话就去现学 解决方案 好写,python做一个网站或者web服务,java通过web接口调用.不需要网络连接这些底层的编程知识. 解

解决python写的爬虫程序抓取到的网页是乱码的问题

在开发自用爬虫过程中,有的网页是utf-8,有的是gb2312,有的是gbk,怎么办? 下面所说的都是针对python2.7 如果不加处理,采集到的都是乱码,解决的方法是将html处理成统一的utf-8编码. #chardet 需要下载安装 import chardet #抓取网页html html_1 = urllib2.urlopen(line,timeout=120).read() #print html_1 mychar=chardet.detect(html_1) #print myc

Python写的一个简单监控系统

  这篇文章主要介绍了Python写的一个简单监控系统,本文讲解了详细的编码步骤,并给给出相应的实现代码,需要的朋友可以参考下 市面上有很多开源的监控系统:Cacti.nagios.zabbix.感觉都不符合我的需求,为什么不自己做一个呢 用Python两个小时徒手撸了一个简易的监控系统,给大家分享一下,希望能对大家有所启发 首先数据库建表 建立一个数据库"falcon",建表语句如下: ? 1 2 3 4 5 6 7 8 9 10 11 CREATE TABLE `stat` ( `

tornado-怎样使用Python写一个对请求字段在数据库里检查的接口?

问题描述 怎样使用Python写一个对请求字段在数据库里检查的接口? 前端PHP抛过来几个请求字段,要我用Python+tornado写一个检查这些字段有没有在数据库中. 1.先要在数据库中建个表 2.要检查其中一字段有没有在数据库中,没有就下一步,有就抛个错误出来结束. 3.再检查上一字段+其中一字段有没有在数据库中,没有就下一步,有就抛个错误出来结束. 4.再检查其中一字段有没有在数据库中,没有就把这些字段信息写入表中,有就抛个错误出来结束. 解决方案 http://blog.csdn.ne

js-自己写一个JS树形插件

问题描述 自己写一个JS树形插件 哪位大神写过js树形插件啊,支持多选框的,或者求给下思路,谢谢! 网上的那些插件主要不是很美观,现在要bootsrap,html5的那种风格 解决方案 ztree就可以,你可以按这个写一个

有没有一个js写的图片截图插件

问题描述 有没有一个js写的图片截图插件 求一个js写的图片截图插件,兼容ie8,ie9,实现无刷新上传, 解决方案 http://deepliquid.com/content/Jcrop.html 实现图片区域截取的,无刷新直接将选中的图片提交到iframe来上传就行了.ie10+才支持html5的formdata,可以用ajax来实现上传

【求助】用Python写出一个遍历网站所有url的小工具

问题描述 [求助]用Python写出一个遍历网站所有url的小工具 用Python 怎么写出一个 遍历网站所有url的小工具, 包括首页的url和所有子网页url 不能有重复的url,我自己写的只能遍历一个网页的 首页,子网页的遍历不出来,新人 没币 ,求好心人帮助!!! 解决方案 http://www.cnblogs.com/fnng/p/3576154.htmlhttp://www.oschina.net/code/list_releted_codes?id=25402 解决方案二: htt

soaplib-关于Win7 下 Python写WebService问题

问题描述 关于Win7 下 Python写WebService问题 #!/usr/bin/python -*- coding: utf-8 -*- import soaplib import unittest from soaplib.core.util.wsgi_wrapper import run_twisted #发布服务 from soaplib.core.server import wsgi from soaplib.core.service import DefinitionBase

python学习-求用Python写个小函数:让用户在界面输入一个数字,然后返回输出这个数字加1的结果

问题描述 求用Python写个小函数:让用户在界面输入一个数字,然后返回输出这个数字加1的结果 求用Python写个函数:让用户在界面输入一个数字,然后返回输出这个数字加1的结果,小白刚学Python,求指点,谢谢! 解决方案 不好意思: return x+1 不需要,只能在函数内使用 可以像下面这么写: x = int(input("x = ")) print("Output is:",x+1) 解决方案二: 写一个函数输入4个数字然后输出每个字符之间加一个空格