zoukankan      html  css  js  c++  java
  • mysql 备份

    #!/usr/bin/env python
    # --*-- coding:UTF-8 --*--

    import sys
    import os
    import datetime
    import smtplib
    from email.mime.text import MIMEText
    import MySQLdb
    import tarfile
    import socket
    import subprocess
    from datetime import datetime, date, timedelta
    import datetime
    backup_dir='/data/backup/'
    remote_dir='/data/backup/'
    mysql_dump='/usr/local/bin/mydumper'
    date_tab=datetime.datetime.now().strftime("%Y_%m_%d_%H_%M")
    date_day=datetime.datetime.now().strftime("%Y_%m_%d")
    ssh_avg='''ssh -o PubkeyAuthentication=yes -o stricthostkeychecking=no -lcjdb -p22 -i /usr/local/bin/id_rsa'''
    remote_ip='1.1.1.1' #异地备份IP
    port='35500'
    backup_logs='/data/backup/data_backup.log'
    backup_location= backup_dir + date_day
    hostname = socket.gethostname()
    rsync='/usr/bin/rsync'
    #定义邮箱变量
    mail_host = 'smtp.163.com'
    Port = 465
    mail_user = 'send@163.com'
    mail_pass = 'password'
    to_list= 'receive@qq.com'
    file_upload="数据MD5验证有误"
    data_dump="数据dump"
    data_conection="数据库连接"

    def mail_send(*argv):
    """邮件内容定义函数发送"""
    try:
    msg = MIMEText('数据库备份失败!,数据库机器:%s 原因: %s' % argv)
    msg['Subject'] = ('备份失败!')
    msg['From'] = mail_user
    msg['To'] = to_list
    send_smtp = smtplib.SMTP_SSL()
    send_smtp.connect(mail_host)
    send_smtp.login(mail_user, mail_pass)
    send_smtp.sendmail(mail_user, to_list, msg.as_string())
    send_smtp.close()
    except Exception, e:
    print e
    print '邮件发送失败!!!'

    def env_check():
    if os.path.exists(backup_location) == True:
    os.system('rm -rf %s' % backup_location)
    os.makedirs(backup_location)
    else:

    os.makedirs(backup_location)
    def upload_file():
    receive_file=backup_data()
    rsync_tran=rsync + " --bwlimit=50240 -stats -vave '%s' %s %s:%s" % (ssh_avg,receive_file[0], remote_ip,remote_dir)
    os.system(rsync_tran)
    remote_file_shell=ssh_avg + " %s md5sum %s%s" % (remote_ip, backup_dir,receive_file[0] )
    #对上传后的数据做MD5对比,保证异地备份的数据一致性。
    remote_md5=subprocess.check_output(remote_file_shell,shell=True)
    if receive_file[1] == remote_md5[0:33]:
    print 'backup data upload transaction sucess'
    else:
    print 'backup data upload failure'
    mail_send(hostname,file_upload)

    def backup_data():
    env_check()
    os.chdir(backup_dir)
    old_date=(date.today() + timedelta(days = -2)).strftime("%Y_%m_%d") #计算前两天的时间
    old_file='rm -rf ' + old_date +'_*.tar.gz' #删除旧数据2天前的
    os.system(old_file)
    try:
    db = MySQLdb.connect("127.0.0.1","root","passwd",charset='utf8')
    cursor = db.cursor() #db连接转换成光标cursor
    except Exception, e:
    print "连接数据库失败"
    mail_send(hostname,data_conection)

    cursor.execute('show databases')
    f = cursor.fetchall() #cursor执行变成一个元组。
    cursor.close()
    db.close()

    for i in f:
    db=list(i)
    for backup in db:
    if backup.startswith('logs'): #对db里面的数据库不做备份,其它的都备份
    pass
    elif backup.startswith("information_schema"):
    pass
    elif backup.startswith('performance_schema'):
    pass
    elif backup.startswith('mysql'):
    pass
    elif backup.startswith('sys'):
    pass
    else:
    mysql_shell=mysql_dump + ' -G -R -E -C -c -t 10 -F 10000 -B ' + backup + ' -o ' + backup_dir + date_day + '/' + backup
    print mysql_shell
    result=os.system(mysql_shell)
    check_file=backup_dir + date_day + '/' +backup + '/metadata'
    if os.path.isfile(check_file) == False:
    mail_send(hostname,data_dump)

    os.chdir(backup_dir)
    backup_full=date_tab + '_' + hostname + '.tar.gz'
    tar = tarfile.open(backup_full,"w:gz") #把备份数据打成TAR.压缩包
    for path,dir,files in os.walk(date_day):


    for file in files:
    fullpath = (os.path.join(path,file))
    tar.add(fullpath)
    tar.close()
    delete='rm -rf %s' % date_day
    os.system(delete) # 打包之后删除原文件数据
    file_shell="md5sum " + backup_dir + backup_full #对打包数据做MD5计算
    file_md5=subprocess.check_output(file_shell,shell=True)
    md5_code=file_md5[0:33]


    return backup_full,md5_code
    #backup_data()
    #md5_check()
    #backup_failure()
    if __name__ == '__main__':
    upload_file()

    生活就应该向往美好
  • 相关阅读:
    使用keepalived监控tomcat 达到双机热备
    nginx tomcat负载均衡 使用redis session共享
    Java线程安全和非线程安全
    Log4J日志配置详解
    使用java mail的网易smtp协议 发送邮件
    JavaScript-DOM(3)
    JavaScript-DOM(2)
    JavaScript-DOM(1)
    BOM简介
    JavaScript(数组、Date、正则)
  • 原文地址:https://www.cnblogs.com/webnginx/p/11739736.html
Copyright © 2011-2022 走看看