Python备份Mysql脚本

yipeiwu_com7年前Python基础

复制代码 代码如下:

#!/usr/bin/python 

import os 
import time 
import ftplib 
import traceback 

#config vars 
systempathchr="/" #路径分割符,*nix用"/" win32用"\\" 

dbuser="root" #数据库用户名 
dbpwd="dbpwd" #数据库密码 
dbnamelist=["dbone","dbtwo","dbthree"] #需要备份那些数据库 

workdir="/path/to/backup/" #本地备份文件夹 
errlogfile="databack.log" #错误日志名 
ftp_addr="192.168.0.2" #ftp地址 
ftp_port="2102" #ftp端口 
ftp_user="databack" #ftp用户名 
ftp_pwd="backpwd" #ftp密码 
ftp_path="/" #存放到ftp路径 

ftpqueue=[] 


def ftpstor(): 
    #login 
    bufsize=1024 
    ftp=ftplib.FTP() 
    try: 
        ftp.connect(ftp_addr,ftp_port) 
        ftp.login(ftp_user,ftp_pwd) 
        ftp.cwd(ftp_path) 
        for filepath in ftpqueue: 

            #open file for input as binary 
            f=open(filepath,"rb") 
            #store file as binary 
            print getfilename(filepath) 
            ftp.storbinary("STOR "+getfilename(filepath),f,bufsize) 
            f.close() 
        ftp.quit() 
    except: 
        path=os.path.join(workdir,errlogfile) 
        traceback.print_exc(file=open(path,"a")) 

     

def dumpdb(dbname): 
    global ftpqueue 
    timeformat="%Y%m%d" 
    sqlvalformat="mysqldump -u%s -p\"%s\" \"%s\" >\"%s\"" 
    tarvalformat="tar --directory=\"%s\" -zcf \"%s\" \"%s\"" 
    nowdate=time.strftime(timeformat) 
    dumpfile=os.path.join(workdir,dbname+".dump") 
    zipfile=os.path.join(workdir,dbname+nowdate+".tar.gz") 
    sqlval=sqlvalformat % (dbuser,dbpwd,dbname,dumpfile) 

    result=os.system(sqlval) 
    tarval=tarvalformat % (workdir,zipfile,dbname+".dump") 

    result=os.system(tarval) 
    os.remove(dumpfile) 
    ftpqueue.append(zipfile) 

def getfilename(path): 

    pt=path.rfind(systempathchr) 
    return path[pt+1:] 

def main(): 
    for dbname in dbnamelist: 
        dumpdb(dbname) 

    ftpstor() 

main()

没有仔细看,不过下面这两句,推荐看看os.path模块里面的函数,可能就不用针对linux和win分别设定不同的分隔符了 引用  
#config vars
systempathchr="/" #路径分割符,*nix用"/" win32用"\\"  
看到代码里面是用在得到文件名的,可以试试os.path.basename活着os.path.split了 
 
复制代码 代码如下:

 >>> import os.path 
  >>> os.path.basename("c:\\test\\aa.txt") 
  'aa.txt' 
  >>> os.path.split("c:\\test\\aa.txt") 
  ('c:\\test', 'aa.txt') 
  >>> os.path.split("c:\\test\\aa.txt")[-1] 
  'aa.txt' 
  >>> os.path.basename("/home/test/aa.txt") 
  'aa.txt' 
  >>> os.path.split("/home/test/aa.txt") 
  ('/home/test', 'aa.txt') 
  >>> os.path.basename("/home/test/aa.txt") 
  'aa.txt'

相关文章

Go/Python/Erlang编程语言对比分析及示例代码

Go/Python/Erlang编程语言对比分析及示例代码

本文主要是介绍Go,从语言对比分析的角度切入。之所以选择与Python、Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性,不过最主要的原因是这几个我比较熟悉。 Go的很...

python中的itertools的使用详解

今天了解了下python中内置模块itertools的使用,熟悉下,看能不能以后少写几个for,嘿嘿😁。 1.无穷的迭代器 1.1 count(start,[step...

Win10+GPU版Pytorch1.1安装的安装步骤

Win10+GPU版Pytorch1.1安装的安装步骤

安装cuda 更新nvidia驱动 打开GeForce Game Ready Driver或在GeForce Experience中下载符合自己gpu的程序。 选择cuda 打开nvi...

pygame实现五子棋游戏

pygame实现五子棋游戏

本文实例为大家分享了pygame五子棋游戏的具体代码,供大家参考,具体内容如下 1.设置棋盘 五子棋标准棋盘是15x15的,如果我们每个格子的大小是40x40的话,棋盘应该是40x(15...

关于Python3 lambda函数的深入浅出

我们常常看到一个这样的表达式  A=lambda x:x+1 可能会一头雾水不知道怎么计算 最基本的理解就是 def A(x): return x+1 但是理解程序不会将一个表...