Windows环境用Python备份MySQL脚本
Windows环境下用Python备份MySQL脚本方法。如果你使用的是linux或是Unix也在源代码的基础上做适当的修改,之后就可以使用了。
Linux环境用Python备份MySQL脚本、Unix环境用Python备份MySQL脚本
#!/usr/bin/env python #encoding=utf-8 #Name : mysql_backup.py #Time : 2011-08-20 #For : Backup mysql databases on windows #Version : 0.1.2 Beta #Steps : # 1.backup databases match filter # 2.gzip backup # 3.md5sum backup # 4.delete backup before $keeptime days ago # 5.if isftp==1 then upload backup to ftp server import os, sys , re, string, gzip, md5, getpass from ftplib import FTP from datetime import datetime,timedelta reload(sys) sys.setdefaultencoding('utf-8') #www.iplaypy.com #mysql related backup_path = '''e:\\\\backup\\''' dbhost = "localhost" dbuser = "backup" dbpass = "080808" dumpoptions = '''--default_character-set=utf8 --triggers --routines --hex-blob --master-data=2 --single-transaction --flush-logs''' filter = re.compile('^test(.*)$') keeptime = (7) #ftp related isftp = 1 ftphost = '10.10.10.10' ftpuser = 'user' ftppass = 'passwd' ftpport = '21' ftppath ='''/ftp''' nowdate = datetime.now().strftime('%Y%m%d') def find_db(): if os.path.isdir('''%s''' % (backup_path)): pass else: os.mkdir('''%s''' % (backup_path)) find_command = '''mysql -h%s -u%s -p%s -e"show databases" > %sfind_db.list\n ''' % (dbhost, dbuser, dbpass, backup_path) a, b = os.popen2('cmd') a.write(find_command) a.close() b.read() b.close() def sum(*files): sts = 0 if files and isinstance(files[-1], file): files = files[-1], files[:-1] if len(files) == 1 and not isinstance(files[0], str): files = files[0] for f in files: if isinstance(f, str): if f == '-': sts = printsumfp(sys.stdin, '<stdin>') or sts else: sts = printsum(f) or sts else: sts = sum(f) or sts return sts def printsum(filename): try: fp = open(filename, 'rb') except IOError, msg: sys.stderr.write('%s: Can\'t open: %s\n' % (filename, msg)) return 1 sts = printsumfp(fp, filename) fp.close() return sts def printsumfp(fp, filename): m = md5.new() try: while 1: data = fp.read(8096) if not data: break m.update(data) except IOError, msg: sys.stderr.write('%s: I/O error: %s\n' % (filename, msg)) return 1 return ('%s %s' % (m.hexdigest(), filename)) def gzip_db(db): dbname=db gzip_in = open('%s\%s\%s_%s.sql' % (backup_path, dbname, dbname, nowdate) , 'rb') gzip_out = gzip.open('%s/%s/%s_%s.sql.gz' % (backup_path, dbname, dbname, nowdate) , 'wb') gzip_out.writelines(gzip_in) gzip_out.close() gzip_in.close() os.remove('%s\%s\%s_%s.sql' % (backup_path, dbname, dbname, nowdate)) def backup_db(db): dbname=db if os.path.isdir('''%s\%s''' % (backup_path, dbname)): pass else: os.mkdir('''%s\%s''' % (backup_path, dbname)) backup_command = '''mysqldump -h%s -u%s -p%s %s %s > %s\%s\%s_%s.sql\n''' % (dbhost, dbuser, dbpass, dumpoptions, dbname, backup_path, dbname, dbname, nowdate) print '''mysqldump -h%s -u%s -p%s %s %s > %s\%s\%s_%s.sql''' % (dbhost, dbuser, dbpass, dumpoptions, dbname, backup_path, dbname, dbname, nowdate) a, b = os.popen2('cmd') a.write(backup_command) a.close() b.read() b.close() def ftp_backup(db): dbname=db localgzip = '''%s\%s\%s_%s.sql.gz''' % (backup_path, dbname, dbname, nowdate) localmd5 = '''%s\%s\%s_%s.sql.gz.MD5''' % (backup_path, dbname, dbname, nowdate) try: ftp =FTP() ftp.connect(ftphost,ftpport) ftp.login(ftpuser,ftppass) print "Welcome:",ftp.getwelcome() except Exception,e: print e else: try: ftp.cwd('''%s/%s''' %(ftppath,dbname)) except Exception,e: print e print '''mkdir %s/%s''' %(ftppath,dbname) ftp.mkd('''%s/%s''' %(ftppath,dbname)) ftp.cwd('''%s/%s''' %(ftppath,dbname)) fd = open(localgzip,'rb') ftp.storbinary('STOR %s' % os.path.basename(localgzip),fd) fd.close() fd = open(localmd5,'rb') ftp.storbinary('STOR %s' % os.path.basename(localmd5),fd) fd.close() ftp.retrlines('LIST') ftp.quit() def del_backup(db): dbname=db now = datetime.now() old = now - timedelta(keeptime) olddate = old.strftime('%Y%m%d') exist=os.path.exists('%s\%s\%s_%s.sql.gz' % (backup_path, dbname, dbname, olddate)) if exist : os.remove('%s\%s\%s_%s.sql.gz' % (backup_path, dbname, dbname, olddate)) print '''delete %s_%s.sql.gz''' % (dbname,olddate) exist=os.path.exists('%s\%s\%s_%s.sql.gz.MD5' % (backup_path, dbname, dbname, olddate)) if exist : os.remove('%s\%s\%s_%s.sql.gz.MD5' % (backup_path, dbname, dbname, olddate)) print '''delete %s_%s.sql.gz.MD5''' % (dbname,olddate) def md5sum(gzipfile,db): md5info = sum(gzipfile) print md5info md5file = open('%s.MD5' % (gzipfile) , 'w') md5file.write(md5info) md5file.close() def main(): find_db() dbs=open(backup_path+'find_db.list','r') for line in dbs.readlines(): line = line.strip('\n') db = filter.match(line) if db: db = db.group(0) backup_db(db) gzip_db(db) gzipfile = '''%s\%s\%s_%s.sql.gz''' % (backup_path, db, db, nowdate) md5sum(gzipfile,db) print '''dumped database %s as %s\%s\%s_%s.sql.gz''' % (db,backup_path, db, db, nowdate) del_backup(db) dbs.close() if isftp == 1: dbs=open(backup_path+'find_db.list','r') for line in dbs.readlines(): line = line.strip('\n') db = filter.match(line) if db: db = db.group(0) ftp_backup(db) dbs.close() os.remove(backup_path+'find_db.list') if __name__ == '__main__': main()
玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/code/scripts-shell/ss2402.html
相关文章 Recommend
- • 支付宝官方给力福利!每天可领1个红包,直接当
- • Python矩阵for循环应用,编程练习题实例三十八
- • 请python高手帮我看看这段python代码中函数setter的
- • 大家都来晒晒您见过的最优秀最实用的一段pyth
- • 如何为实时性应用存取经纬度?django mysql
- • 列表里边是元组数据,用python正则怎么完成匹配
- • 类似美元$这个符号pyCharm2.0里怎么输入不好用呢
- • 大家一起来讨论抽用正则取优酷视频并生成播放
- • 准备用python做下载器怎么样?需要了解些知识点
- • 使用django在做添加superuser操作时报错\xBA\xA3像是乱
- • python语言中的pcap与dpkt在统计中的作用分别是什么
- • 问浏览器地址栏如何执行虚拟主机脚本关于环境
我要分享到:
必知PYTHON教程 Must Know PYTHON Tutorials
- • python 解释器
- • python idle
- • python dir函数
- • python 数据类型
- • python type函数
- • python 字符串
- • python 整型数字
- • python 列表
- • python 元组
- • python 字典
- • python 集合
- • python 变量
- • python print
- • python 函数
- • python 类定义
- • python import
- • python help
- • python open
- • python 异常处理
- • python 注释
- • python continue
- • python pass
- • python return
- • python global
- • python assert
- • python if语句
- • python break
- • python for循环
- • python while循环
- • python else/elif
- • lambda匿名函数
必知PYTHON模块 Must Know PYTHON Modules
- • os 模块
- • sys 模块
- • re 正则表达式
- • time 日期时间
- • pickle 持久化
- • random 随机
- • csv 模块
- • logging 日志
- • socket网络通信
- • json模块
- • urlparse 解析URL
- • urllib 模块
- • urllib2 模块
- • robotparser 解析
- • Cookie 模块
- • smtplib 邮件
- • Base64 编码
- • xmlrpclib客户端
- • string 文本
- • Queue 线程安全
- • math数学计算
- • linecache缓存
- • threading多线程
- • sqlite3数据库
- • gzip压缩解压
最新内容 NEWS
- • 绑定修改网卡绑定关系的python程序
- • 网友用python把IPv4地址变成LITNET-NAT64网段
- • 基于python Selenium的用户登录自动化测试
- • 用python代码科学上Google
- • python论坛自动签到用bs4模块
- • python北京地铁月支出简易计算器
- • 用python查找未注册的域名
- • Windows环境用Python备份MySQL脚本
- • 批量调整图片尺寸的python脚本
- • Python方法获取百度地图数据示例源码
图文精华 RECOMMEND
-
用python代码科学上Google
-
Windows环境用Python备份MySQL脚本
-
批量调整图片尺寸的python脚本
-
Python方法获取百度地图数据示例源
-
控制台进度自动刷新python方法源码
-
web.py能条件判断的页面执行计时方
热点文章 HOT
- web.py能条件判断的页面执行计时方法
- Windows环境用Python备份MySQL脚本
- 从糗事百科下载数据的python方法示例
- 基于python Selenium的用户登录自动化测试
- 解决Python2不支持datetime的json encode问题
- Python完成抓取并写入mysql库的方法
- 一个初学者练手的Python多线程实现下载的
- Python调chrome刷页面完成刷点击量操作