- 论坛徽章:
- 0
|
代码 + 手动添加注解汉字,打印出来 的是英语(说明:因为我的测试环境不支持汉字,要不迟点又有兄弟说我不洋不土了,呵呵)
-bash-3.00$ vi binlogBackUp.py
#!/usr/bin/env python
import os
import time
import datetime
import MySQLdb
import re
host="localhost"#mysql server主机,我用的是localhost
user="root"#登录用户
pwd="123"#密码
backup_path="/var/lib/mysql" #你binlog备份的目录,最后为是此目录 + binlogBackup+%Y-%m-%d_%H:%M:%S
#例如:/var/lib/mysql/binlogBackup/2012-03-07_08:56:39
def backup_mysql(host,user,pwd,path):#备份函数
mydb=MySQLdb.connect(host,user,pwd)#连接mysql
myCon=mydb.cursor()
myCon.execute('show variables where Variable_name= "datadir";')
datadir=myCon.fetchall()[0][1]
print "The MySQL server datadir is:" + datadir#取得数据目录,也就是binlog的目录
myCon.execute('flush logs;')#fush bin log
myCon.execute('show master status;')
current_log_name=(myCon.fetchall())[0][0]
print "The lastest binlog is :" + current_log_name#取得新生成的那个binlog,后面不用备份
myCon.close()#关闭连接
binlog_re = re.compile(".*\d\d\d\d\d\d$")#定义适合binlog的正则,以6个数字结尾的(这个应该是通过 的,没有具体考证,如果不是,可以从my.cnf里的log-bin的值来获取)
cpString=""#用于拼接所有要copy的binlog, 除了最新的那个,当然你说的只要当天的,也可以,后面空了再写个,
os.chdir(datadir)#cd到数据目录下,这样方便拼接串
for file in os.listdir(datadir):#取得数据目录下的所有文件列表,(不递归的,所以处理很快)
if(binlog_re.match(file)!=None and file != current_log_name):#和前面定义的binlog正则匹配的,并且最新的那个binlog除外
cpString = cpString + " " + file #这里开始接了
#print "The binlog list is:" + cpString #debug之用
binlog_back_dir=path +os.sep+"binlogBackup"+ os.sep + time.strftime('%Y-%m-%d_%H:%M:%S')#构造保存binlog的目标目录
if not os.path.exists(binlog_back_dir):#判断是否存在此目录,不存则创建
os.makedirs(binlog_back_dir)
cmd_binlog_cp = "cp %s %s"%(cpString,binlog_back_dir) #构造cp的命令了
if(os.system(cmd_binlog_cp)==0):#执行命令
print "binlog backup successfully, please check this in:" + binlog_back_dir
else:
print "binlog backup failed!"
def main():
start_Time = datetime.datetime.now()#以得开始备份时的时间值
backup_mysql(host,user,pwd,backup_path)#调用备份函数
end_Time = datetime.datetime.now()#取得结束时间值
seconds = (end_Time - start_Time).seconds#总共耗时多少秒
print "It take " + str(seconds) + " seconds!"
if __name__=="__main__":
main()#执行
~ |
|