yunbk-让备份变得更简单
yunbk 是我前段时间用python写的一个备份插件,取中文谐音云备份的意思,你可以很方便的用这个插件来备份mysql、redis、mongodb、乃至各种media目录,等等。
安装可以直接用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()好啦,就到这里,希望对大家有用:)
建议继续学习:
- 仅仅只备份是不够的 (阅读:5466)
- 使用scp在windows和Linux之间互传文件 (阅读:4864)
- rsync自动输入密码实现数据备份 (阅读:4731)
- rman备份对各种数据块操作 (阅读:4150)
- 使用 rsync 或 unison 备份或同步支持 ssh 的 web 主机 (阅读:3686)
- MySQL 备份和其恢复机制原理简述 (阅读:3746)
- mydumper的使用和源代码分析 (阅读:3726)
- linux 定期自动备份mysql的shell (阅读:3417)
- 不可靠的EXP远程备份 (阅读:3470)
- xtrabackup知多少 (阅读:3193)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Dante 来源: Vimer
- 标签: yunbk 备份
- 发布时间:2014-11-26 23:04:19
-
[882] WordPress插件开发 -- 在插件使用 -
[136] 解决 nginx 反向代理网页首尾出现神秘字 -
[57] 整理了一份招PHP高级工程师的面试题 -
[55] 分享一个JQUERY颜色选择插件 -
[54] Innodb分表太多或者表分区太多,会导致内 -
[54] 用 Jquery 模拟 select -
[54] 如何保证一个程序在单台服务器上只有唯一实例( -
[52] jQuery性能优化指南 -
[52] CloudSMS:免费匿名的云短信 -
[52] 海量小文件存储
