python:mysql备份脚本及删除指定目录下过期文件-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 6315103
  • 博文数量: 162
  • 博客积分: 3600
  • 博客等级: 中校
  • 技术积分: 10366
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-19 11:23
个人简介

专注系统运维、网络架构,研究技术凯发app官方网站的解决方案,记录我的思想轨迹、工作学习、生活和关注的领域

文章分类
文章存档

2014年(2)

2013年(16)

2012年(27)

2011年(117)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: python/ruby

2013-08-16 14:06:24

最近在学习python,之前用shell实现的备份脚本,在python下要如何写呢? 这也是一个学习的好方法吧,于是结合生产环境需要,编写了python数据库备份脚本。
可指定数据库备份,如有要备份所有的数据库,可使用 –all-database 这个参数。并且删除了备份文件的过期时间,如果想把备份日志记录下来,那么可以参考open相关资料。
贴上脚本:mysqlbackup.py


  1. #!/usr/bin/env python
    # filename: mysqlbackup.py
    # version 0.01
    # author:robert lin
    # email:linlianpengit@sina.com
    # date:2013-08-09
    import    os
    import    time
    import    sys
    import    datetime
    from stat import *
     
    # mysql user
    user = 'root'
     
    # mysql password
    passwd = '123456'
     
    # mysqldump command
    mysqlcommand = '/usr/bin/mysqldump'
     
    # gzip command
    gzipcommand = '/bin/gzip'
     
    # you want backup mysql database
    mysqldata  = ['hq', 'forum_us']
     
    # you want    backup to dir
    tobackup = '/dbbak/'
     
    for db in mysqldata:
    # backup file name
    backfile = tobackup db '-' time.strftime('%y-%m-%d') '.sql'
    # gzip file name
    gzfile = backfile '.gz'
    if os.path.isfile(gzfile):
    print gzfile " is already backup"
    else:
    # backup  command
    back_command = mysqlcommand ' -u' user ' -p' passwd ' -p3306 ' db ' > ' backfile
    if os.system(back_command)==0:
    print 'successful backup to', db ' to ' backfile
    else:
    print 'backup failed'
    # gzip command
    gzip_command = gzipcommand ' ' backfile
    if os.system(gzip_command)==0:
    print 'successful gzip to',gzfile
    else:
    print 'gzip failed'
    # delete back file
    # show file list
    filelist=[]
    filelist=os.listdir(tobackup)
    # delete gzfile 5 days ago
    for i in range(len(filelist)):
    ft=time.gmtime(os.stat(tobackup filelist[i])[st_mtime])
    ftl=time.strftime('%y-%m-%d',ft)
    year,month,day=ftl.split('-')
    ftll=datetime.datetime(int(year),int(month),int(day))
    localt=time.gmtime()
    localtl=time.strftime('%y-%m-%d',localt)
    year,month,day=localtl.split('-')
    localtll=datetime.datetime(int(year),int(month),int(day))
    days=(localtll-ftll).days
    if days >5:
    try:
    os.remove(tobackup filelist[i])
    print 'delete is ok'
    except:
    log=datetime.datetime.now().strftime('%y-%m-%d %h:%m:%s') " remove " tobackup filelist[i] " fail \n"
    print log

附上蚊子世界写的一个python脚本,指定删除文件,只能支持一级目录下的文件删除,还不支持目录递归。下次抽空把脚本完善下。
     原文地址:
     原文内容:
     这两天用python写了一个删除指定目录下过期时间的脚本。也可能是我初学python,对python还不够熟习,总觉得这个脚本用shell写应该更简单也更容易些。

就功能上来说,该脚本已经实现了我想要的效果,不过该脚本还不够通用性,还有更多可以完善的地方。目前该脚本在python2.4下运行良好。同时,蚊子在脚本中加入了对python版本的判断,理论上2.7下也应该可以正常使用。有环境的朋友可以帮忙测试一下。

该脚本不完善的地方在于,只能支持一级目录下的文件删除,还不支持目录递归。同时过期文件的定义只能按week来做。

脚本如下:


  1. #! /usr/bin/env python
    # -*- coding=utf-8 -*-
    import sys
    import os
    import time,datetime
     
    # 定义需要删除文件的目录
    dir = '/data/webbak/'
    # 被删除文件写入日志文件
    logdir = '/var/log'
    logfile = os.path.join(logdir, 'delete.log')
     
    # 获取当前系统python版本
    ver = sys.version
    ver = ver.split(' ')
    ver = ver[0]
     
    # 将"wed jul  4 13:25:59 2012"格式的时间转成“2012-07-02 14:50:15”格式的时间
    # version是当前系统python版本号
    # time是"wed jul  4 13:25:59 2012"格式的时间
    # 函数返回"2012-07-02 14:50:15"格式的时间
    def string2time(str_time, version = ver):
    version_l = version.split('.')[0:2]
    ver = version_l[0] '.' version_l[1]
    if (ver == '2.7'):
    f_time = datetime.datetime.strptime(str_time, time_format)
    f_time = f_time.strftime('%y-%m-%d %h:%m:%s')
    return f_time
    elif(ver == '2.4'):
    f_time = time.strptime(str_time, time_format)
    f_time = datetime.datetime(*f_time[0:6])
    return f_time
     
    # 时间格式
    time_format = "%a %b %d %h:%m:%s %y"
    # 取得当前时间
    today = datetime.datetime.now()
    # 定义4个星期
    four_weeks = datetime.timedelta(weeks=6)
    # 4星期前的日期
    four_weeks_ago = today - four_weeks
    # 将时间转成timestamps
    four_weeks_ago_timestamps = time.mktime(four_weeks_ago.timetuple())
    # 列出目录中的所有文件
    files = os.listdir(dir)
    # 打开要删除的文件日志
    fh = open(logfile, "w ")
    # 遍历文件,打印出文件的创建时间
    for f in files:
    # 忽略掉.开头的文件
    if f.startswith('.'):
    continue
    # 忽略掉当前目录下的目录
    if os.path.isdir(os.path.join(dir,f)):
    continue
    # 获得文件的modify时间,并转换成timestamp格式
    file_timestamp = os.path.getmtime(os.path.join(dir, f))
    file_time_f = string2time(time.ctime(file_timestamp))
    if float(file_timestamp) <= float(four_weeks_ago_timestamps):
    fh.write(str(today) "\t" str(file_time_f) "\t" os.path.join(dir,f) "\n")
    os.remove(os.path.join(dir,f))
    # 关闭文件
    fh.close()


阅读(10992) | 评论(2) | 转发(4) |
给主人留下些什么吧!~~

2014-02-13 18:26:39

以前用shell写的也挺好用,为啥现在都要用python整这些呢

|
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图