利用Python脚本备份mysql数据库

近期利用空余时间学习了python的一些基础内容,用来实践,做了一个Mysql备份的脚本,按日备份并打包压缩;python比原来的shell只能运行在linux下面更广泛一些,而且后期扩展也更好。

##################################

Functions:

1)按日备份数据库,并将备份文件压缩打包;

2)成功则将备份信息写入日志,失败则发邮件告警给管理员;

3)如果已经备份成功,不再重复备份;

4)稍作改动,可用于WINDOWS备份

##################################

  1 #!/usr/bin/env python
  2 #_*_ coding:utf-8 _*_
  3 #!/usr/bin/env python
  4 #_*_ coding:utf-8 _*_
  5 #Backup with mysqldump everyday
  6 #Backup Mysql can use on windows or linux
  7 #But TAR Fuction can only use on linux because command different between windows and linux
  8 import time
  9 import datetime
 10 import os
 11 import conf
 12 import smtplib
 13 from email.mime.text import MIMEText
 14
 15 #返回任意一天
 16 class Day(object):
 17     @staticmethod
 18     def any_day(add_days):
 19         today = datetime.date.today()
 20         utl_add_day = str(today - datetime.timedelta(days=int(add_days)))
 21         return utl_add_day
 22
 23 class MysqlBackup(object):
 24     def __init__(self,**kargs):
 25         self.__host = kargs[‘host‘]
 26         self.__dbname = kargs[‘db‘]
 27         self.__username = kargs[‘user‘]
 28         self.__password = kargs[‘passwd‘]
 29         self.__port = kargs[‘port‘]
 30
 31 #mysqldump备份数据库
 32     def BakData(self,backup_file):
 33         cmd_bak=‘mysqldump -u ‘+self.__username+‘ -p‘+self.__password+‘ -h‘+self.__host +‘ ‘+self.__dbname+‘ --single-transaction ‘+‘ > ‘+backup_file
 34         outp = os.system(cmd_bak)
 35         return cmd_bak,outp
 36
 37 #Linux下用tar打包压缩备份文件
 38     def TarData(self,date):
 39         cmd_tar=‘tar zcf ‘+conf.backup_path+self.__dbname+‘_‘+date+‘.tar.gz ‘+‘-C ‘+conf.backup_path+self.__dbname+‘_‘+date+‘.dump >> /dev/null 2>&1‘
 40         outp = os.system(cmd_tar)
 41         return cmd_tar,outp
 42
 43     @property
 44     def dbname(self):
 45         return self.__dbname
 46
 47 class sendmail():
 48     def __init__(self, *args,**kargs):
 49         self.SMTPserver = kargs[‘address‘]
 50         self.sender = kargs[‘sender‘]
 51         self.password = kargs[‘password‘]
 52         self.destination = args[0]
 53
 54 #登录邮箱发送邮件
 55     def send(self,message):
 56         msg = MIMEText(message,_charset=‘utf-8‘)
 57         msg[‘Subject‘] = ‘Mysql Backup Failed‘
 58         msg[‘From‘] = self.sender
 59         msg[‘To‘] = self.destination
 60         mailserver = smtplib.SMTP(self.SMTPserver, 25)
 61         mailserver.login(self.sender, self.password)
 62         mailserver.sendmail(self.sender, [self.destination], msg.as_string())
 63         mailserver.quit()
 64         print ‘send email success‘
 65
 66 #主函数起始
 67 def main():
 68     DATA_DATE = Day.any_day(1)
 69     #发件人和收件人地址
 70     MAIL_USER_ADDRESS = sendmail(*conf.note_user,**conf.contact_user)
 71     #初始化需要备份的数据库类
 72     DB_BAK_INFO = MysqlBackup(**conf.conn_dict)
 73     backup_file = conf.backup_path+DB_BAK_INFO.dbname+‘_‘+DATA_DATE+‘.dump‘
 74     print backup_file
 75     log_file = conf.backup_path+DB_BAK_INFO.dbname+‘.log‘
 76     #MAIL_USER_ADDRESS.send(‘I send a message by Python. 你好‘)
 77
 78     #保存日志
 79     with open(log_file,‘a‘) as f:
 80         f.write(‘\n\n ***********************\n‘)
 81         f.write(‘ * ‘+time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())+‘ *\n‘)
 82         f.write(‘ ***********************\n‘)
 83         #不存在dump备份文件才备份
 84         if os.path.isfile(backup_file) is False:
 85             #备份
 86             cmd_result = DB_BAK_INFO.BakData(backup_file)
 87             print cmd_result
 88             f.write(‘** COMMAND     :‘+cmd_result[0]+‘\n‘)
 89             f.write(‘** DATABASE    : ‘+DB_BAK_INFO.dbname+‘\n‘)
 90             f.write(‘** DATA_DATE   : ‘+DATA_DATE+‘\n‘)
 91             f.write(‘** RESULT(BAK) : ‘+(‘succeed\n‘ if cmd_result[1] == 0 else ‘failed\n‘))
 92             #备份成功打包
 93             if cmd_result[1] == 0:
 94                 #打包
 95                 tar_result = DB_BAK_INFO.TarData(DATA_DATE)
 96                 f.write(‘** COMMAND     :‘+tar_result[0]+‘\n‘)
 97                 f.write(‘** RESULT(TAR) : ‘+(‘succeed‘ if tar_result[1] == 0 else ‘failed‘))
 98                 #打包成功删除备份文件
 99                 if tar_result[1] == 0:
100                     os.remove(backup_file)
101                 else:
102                     MAIL_USER_ADDRESS.send(‘Mysql备份打包失败,请核查!‘)
103             else:
104                 MAIL_USER_ADDRESS.send(‘Mysql数据库备份失败,请核查!‘)
105         else:
106             f.write(‘** RESULT(BAK) : ‘ +‘%s is already exists\n‘ %backup_file)
107
108 #程序入口
109 if __name__ == ‘__main__‘:
110     main()
111 #bakimeeting.bakData(‘backup_file‘)

配置文件conf.py如下:

1 #!/usr/bin/env python
2 #_*_ coding:utf-8 _*_
3 conn_dict = dict(host=‘127.0.0.1‘,user=‘root‘,passwd=‘12345‘,db=‘08day05‘,port = 33061)
4 contact_user = dict(address=‘smtp.163.com‘,sender=‘[email protected]‘,password=‘xxxxxx‘)
5 note_user = (‘[email protected]‘,)
6 backup_path = "D:/KuGou/"

后期优化

多线程提高性能,自动恢复

时间: 2024-10-17 08:09:37

利用Python脚本备份mysql数据库的相关文章

Python脚本---备份MySQL数据库

转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/45848057 #!/usr/bin/env python # -*- coding:utf-8 -*- #导入模块import MySQLdbimport timeimport datetimeimport os """  Purpose: 备份数据库  Created: 2015/5/12  Modified:2015/5/12  @author: guoyJoe&

Shell 脚本备份MySQL数据库

(1)思路 <1>安装MySQL数据库 <2>创建数据库,表,插入数据 <3>授权一个用于备份数据库的用户名和密码 <4>备份数据库的命令: mysqldump -u root -p 1234 -d MySQLDB > 1.sql <5>引入if语句实现备份全部数据库 <6>引入for循环语句,实现备份多个数据库 (2)实战案例 编写MySQL数据库备份脚本,可以实现备份任意数据库,输入A,就备份A库,输入B,就备份B库,输入C

Python脚本---在 MySQL数据库中跑批加载多个表的数据

转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/45841117 #!/usr/bin/env python # -*- coding:utf-8 -*- """  Purpose: 生成日明细账单数据  Created: 2015/4/21  Modified:2015/4/24  @author: guoyJoe"""#导入模块import MySQLdbimport timeimpo

Python脚本---把MySQL数据库表中的数据导出生成csv格式文件

转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/45841221 #!/usr/bin/env python # -*- coding:utf-8 -*- """  Purpose: 生成日汇总对账文件  Created: 2015/4/27  Modified:2015/5/1  @author: guoyJoe""" #导入模块import MySQLdbimport timeimpo

用python脚本导出mysql数据库查询结果到Excel表

最近需要导数据的情况太多,总用跳板机上的navicat工具有点效率低,也觉得挺麻烦的(由于跳板机无法连通外网 所以导出数据文件还得通过sftp传到本机)anyway 还是写个脚本好了.之前写过一个shell脚本做的定时导出任务,现在试试用python写下 主要用到的库有: pymysql -- 连数据库的无需多说os & sys -- 可能回涉及到工作目录或者外部传参xlwt -- 写excel 下面就是代码了,总体还是挺简单的,主要遇到个字符编码的问题,改成utf-8就解决了还有个没解决掉的问

linux shell脚本备份mysql数据库

#!/bin/sh # 备份数据库 # Mysql 用户名密码 MYSQL_USER=root MYSQL_PASS=root BACKUP_DIR=/data/backup/mysql DATA_DIR=/data/backup/dbdata # 查询mysql中所有数据库名字 SQL_STRING="SELECT SCHEMA_NAME AS db FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql', 'inf

Linux Shell脚本之利用mysqldump备份MySQL数据库(详细注解)

设计该脚本的一些设计.编写考虑: 该脚本适用于编译安装mysql和通过yum或apt-get等安装方式 该脚本可以反复执行,不会重复覆盖数据 可增加,删除N天前的备份以节省磁盘空间 充分利用mysqldump的自带锁表功能.刷新日志.复制等功能 利用mysqldump命令备份MySQL数据库的脚本(不带注释版,适合生产环境使用) #!/bin/bash MYSQLDBUSERNAME=root MYSQLDBPASSWORD=password MYSQBASEDIR=/usr/local/mys

Shell脚本-----自动备份Mysql数据库

脚本的整体思路 1.定义需要的变量 2.利用for循环备份需要备份的库,并以库名-当天日期.sql命名,并记录相关日志 3.建立备份当天的日期的目录,向备份的Sql文件移动到该目录 4.压缩打包该目录,以节省空间,打包成功后删除该目录 5.备份目录只备份七天的数据库,第八天删除第一天的备份,目录只会存在连续七天的备份文件 6.查找备份目录下的.log日志文件,超过七天的删除 #!/bin/bash mysql_bin=/usr/local/tdoa/mysql/bin/mysqldump use

[转]一个备份MySQL数据库的简单Shell脚本

本文翻译自 iSystemAdmin 的 <A Simple Shell Script to Backup MySQL Database> Shell脚本是我们写不同类型命令的一种脚本,这些命令在这一个文件中就可以执行.我们也可以逐一敲入命令手动执行.如果我们要使用shell脚本就必须在一开始把这些命令写到一个文本文件中,以后就可以随意反复运行这些命令了. 我首先要在本文带给你的是完整脚本.后面会对该脚本做说明.我假定你已经知道shell scripting. mysqldump和cronta