复制代码 代码如下:
#!/usr/bin/python
importos
importtime
importftplib
importtraceback
#configvars
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=[]
defftpstor():
#login
bufsize=1024
ftp=ftplib.FTP()
try:
ftp.connect(ftp_addr,ftp_port)
ftp.login(ftp_user,ftp_pwd)
ftp.cwd(ftp_path)
forfilepathinftpqueue:
#openfileforinputasbinary
f=open(filepath,"rb")
#storefileasbinary
printgetfilename(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"))
defdumpdb(dbname):
globalftpqueue
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)
defgetfilename(path):
pt=path.rfind(systempathchr)
returnpath[pt+1:]
defmain():
fordbnameindbnamelist:
dumpdb(dbname)
ftpstor()
main()
没有仔细看,不过下面这两句,推荐看看os.path模块里面的函数,可能就不用针对linux和win分别设定不同的分隔符了引用
#configvars
systempathchr="/"#路径分割符,*nix用"/"win32用""
看到代码里面是用在得到文件名的,可以试试os.path.basename活着os.path.split了
复制代码 代码如下:
>>>importos.path
>>>os.path.basename("c:testaa.txt")
'aa.txt'
>>>os.path.split("c:testaa.txt")
('c:test','aa.txt')
>>>os.path.split("c:testaa.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'