使用python自动备份数据库并上传到七牛服务器(定期清除)

lnmp 的网站服务器上需要对数据库的数据进行备份,很早之前貌似可以备份到百度云,不过后来百度云把端口关了,好在还可以放在七牛云服务器上,查了一些资料,然后用python写了一个七牛的数据备份的简单脚本,分享如下:。
1、首先肯定要有七牛的账号,然后获取acdess-key和seret_key(上七牛的官网,官方的文档还是简单易懂。
2、有一个邮箱,需要开启第三方登陆,我用的是网易163的邮箱

下面直接贴代码:

#!/root/anaconda/bin/python
#encoding:utf8
#Created by Taro
#2016.10.13
'''
Just as the name suggested,qiniu_backup is mainly used to backup the MySQL databases' data and upload the backup file to the qiniu server,finally it will automatedly delete the file which is out of the date

In addition,you can use the crontab command to backup the data at the time you want
'''
import zipfile
import os
import qiniu    #qiniu package
import smtplib
import time
from email.mime.text import  MIMEText
from email.header import Header
from qiniu import Auth,BucketManager

def rm_old_backupfile(del_time,dir_name,q,bucket_name):
    bucket=BucketManager(q)
    filelist=os.listdir(dir_name)
    for f in filelist:
        f_info=os.stat(dir_name+'/'+f)
        #print f_info;
        if((time.time()-f_info.st_mtime)>del_time):
            os.remove(dir_name+'/'+f)
            ret,info=bucket.delete(bucket_name,f)
            # delete the file on qiniu



def zip_dir(dirname,zipfilename):
    #print dirname+'****'+zipfilename
    zf=zipfile.ZipFile(zipfilename,"w",zipfile.zlib.DEFLATED)
    zf.write(dirname)
    zf.close()
def sendmail(re_mail,msg):
    mail_host="smtp.163.com"
    mail_user=""
    mail_pass=""
    sender=""
    receives=[re_mail]
    msg=MIMEText(time.strftime('%Y-%m-%d')+'数据库备份'+str(msg),'plain','utf-8')
    msg['From']='Taro'
    msg['To']=re_mail
    subject='Backup Database successfully'
    msg['Subject']=Header(subject,'utf-8')
    try:
        smtpObj=smtplib.SMTP()
        # smtpObj.set_debuglevel(1)
        smtpObj.connect(mail_host,25)
        smtpObj.login(mail_user,mail_pass)
        smtpObj.sendmail(sender,receives,msg.as_string())
        smtpObj.quit()
        print "Send mail successfully!"
    except Exception as err:
        print err
if __name__=='__main__':
    access_key=''
    secret_key=''
    bucket = ''
    bucket_domain=''
    dir_name='/backup/mysql_backup_data' #replace with yours
    file_zip=dir_name+'/Myslq_backup'+time.strftime('%Y-%m-%d')+'.zip'
    file_sql=dir_name+'/all.'+time.strftime('%Y-%m-%d')+'.sql'
    re_mail='mail@qq.com'   #mail address
    save_data_time=15*3600; # 15days
    try:
        #back up mysql database
        os.system("mysqldump -u*root* -p*Password* --all-databases>/backup/mysql_backup_data/all.$(date +%Y-%m-%d).sql")
        #time.sleep(10)
        zip_dir(file_sql,file_zip)
        q=Auth(access_key,secret_key)
        token=q.upload_token(bucket)
        ret,info=qiniu.put_file(token,'Myslq_backup'+time.strftime('%Y-%m-%d')+'.zip',file_zip)
        rm_old_backupfile(save_data_time,dir_name,q,bucket)
        sendmail(re_mail,'成功!')
        sendmail('','成功!')
    except Exception as err:
        sendmail(re_mail, '失败!')
        sendmail('','失败!'+str(err))
        print  err;

上面的代码可以实现自动备份和过期清除,接下来只要让程序定时运行就可以了,使用linux自带的crontab 来执行这个python程序就可以。我为了指定运行时的环境变量(有的时候环境变量不对会导致程序出错),使用sh脚本来启动python程序,然后crontab则定时执行这个sh脚本就可以
pymail.sh:

#!/bin/bash
source /etc/profile
source /etc/bashrc
/root/anaconda/bin/python  /backup/qiniu_backup.py

使用 vim /etc/crontab 可以添加定时任务,例如我的:

30 4 * * * root /backup/qiniu_backup.sh >>/backup/qiniu_backup.log 2>&1

意思是每天凌晨四点半进行备份,并将程序的输出结果保存在log文件中。
至此,一个数据库定时自动备份和清除的程序就完成了,总的来说python脚本在这样小功能的实现里面还是很方便的!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实用自动化运维Python脚本分享主要是为了提高运维工作的效率和准确性,简化重复性的操作,节省人力和时间成本。Python作为一种强大的脚本语言,具有易学易用、丰富的库和模块支持等优点,非常适合用于运维自动化。 首先,实用自动化运维Python脚本可以对服务器进行批量管理和监控。脚本可以通过SSH远程连接服务器,执行各种操作,如批量安装软件、配置服务器、部署应用等。同时,可以编写脚本监控服务器的性能指标,如CPU、内存、磁盘等,及时发现问题并进行处理。 其次,实用自动化运维Python脚本可以进行日志分析和故障排查。通过解析服务器和应用程序的日志文件,可以自动化地检测错误信息,分析日志文件的结构和内容,帮助快速定位问题的根本原因。这在大规模分布式系统中尤为重要,可以快速捕捉异常和故障,提高故障处理的效率。 另外,实用自动化运维Python脚本还可以进行配置管理和版本控制。通过脚本,可以自动备份和还原配置文件,实现配置的快速恢复和管理。同时,可以使用版本控制工具(如Git)来管理配置文件的变更,确保对服务器环境的改动有记录可查。 最后,实用自动化运维Python脚本可以进行应用部署和上线。通过编写脚本,可以自动化地将应用程序打包、上传、解压、配置等一系列操作,实现一键部署。还可以结合CI/CD工具实现自动化的持续集成和持续部署,提高开发和运维之间的协作效率。 总结来说,实用自动化运维Python脚本可以帮助运维人员简化工作流程,减少重复劳动,提高效率和准确性。同时,Python的简洁性和灵活性也使得运维人员可以根据实际需求编写出适合自己环境的自动脚本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮尔菲特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值