Windows环境用Python备份MySQL脚本,python备份mysql脚本,Windows环境下用P
Windows环境用Python备份MySQL脚本,python备份mysql脚本,Windows环境下用P
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 serverimport os, sys , re, string, gzip, md5, getpassfrom ftplib import FTPfrom datetime import datetime,timedeltareload(sys)sys.setdefaultencoding('utf-8')#www.iplaypy.com#mysql relatedbackup_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 relatedisftp = 1ftphost = '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)):passelse: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 stsdef 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 stsdef 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=dbgzip_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=dbif os.path.isdir('''%s\%s''' % (backup_path, dbname)):passelse: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=dblocalgzip = '''%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 eelse:try:ftp.cwd('''%s/%s''' %(ftppath,dbname))except Exception,e:print eprint '''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=dbnow = 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 md5infomd5file = 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()
编橙之家文章,
相关内容
- Python批量删除windows下svn文件夹的方法,pythonsvn,本文为
- 使用Python xlrd模块读取Excel格式文件的方法,pythonxlrd,这
- 用Python编写渗透用小脚本 短小实用,python编写渗透脚本
- linux下搜索文件的python方法,linuxpython,linux下如何用py
- Python用户推荐系统曼哈顿算法实现,python曼哈顿,Pytho
- Python用户推荐系统minkowski算法的实现,pythonminkowski,Py
- python获取网页时的解码问题解决,python获取网页解码
- 利用python将域名转换成IP 再扫描端口,pythonip,利用pyt
- 教你用Python编写一个拼写检查器,python编写拼写检查
- 用python来抓取知乎日报,python抓取知日报,今天来和大家
评论关闭