MySQL备份脚本V2(添加日志功能及备份后检查)

备份脚本

#!/usr/bin/env python
#_*_coding:utf-8_*_
"""
@File: backup_db.py
@Author: OldTan
@Email: [email protected]
@Last Modified: 20180408
"""
import os
import datetime
from threading import Thread
from logs import log

HOST = '10.36.1.101'
USER = 'root'
PW = '1qaz#EDC'
PATH = '/mnt/tantianran_mysql_backup/'
NOW = datetime.datetime.now()
NOWSTR = NOW.strftime('%Y%m%d')
CLEANSTR = (NOW - datetime.timedelta(days=5)).strftime('%Y%m%d')
DBS = [
    'urun_private_cloud',
    'urun-asr',
    'ambari',
    'hive',
    'oozie',
    'storm-etl',
    'urun-sms',
    'analyzer-etl',
    'zabbix',
    'zabbix-key'
]

after_backup = []

def clean(db):
    database = '{dbs}'.format(dbs=db)
    format = 'rm -rf %(path)s%(db)s.%(date)s.sql'
    kv = {'path': PATH, 'date': CLEANSTR, 'db' : database}
    expiredDbFile = ('%(db)s.%(date)s.sql' % kv)
    if os.path.exists(expiredDbFile):
        msg = 'Start Delete expired database file: %s' % (expiredDbFile)
        log(msg)
        excute( format % kv)

def backup(db):
    database = '{dbs}'.format(dbs=db)
    format = 'mysqldump -u %(user)s -h %(host)s -p%(pw)s %(db)s > %(path)s%(db)s.%(date)s.sql'
    kv = {'user': USER, 'host': HOST, 'pw': PW, 'path': PATH, 'date': NOWSTR, 'db' : database}
    dbname = ('%(db)s.%(date)s.sql' % kv)
    after_backup.append(dbname)
    excute(format % kv)

def excute(cmd):
    os.system(cmd)

def check():
    for i in after_backup:
        if os.path.exists(i):
            m = 'Backup success DB: %s' % i
            log(m)
        else:
            m = 'Backup failed DB: %s' % i
            log(m)

def main():
    
    dbs = range(len(DBS))
    
    def exec_task(th):
        for i in dbs:
            th[i].start()
        for i in dbs:        
            th[i].join()

    backup_t = []
    clean_t = []
    
    for i in dbs:
        t1 = Thread(target=backup, args=(DBS[i],))
        t2 = Thread(target=clean, args=(DBS[i],))
        backup_t.append(t1)
        clean_t.append(t2)
    exec_task(backup_t)
    exec_task(clean_t)
    
    check()    

if __name__ == "__main__":
    main()

scp sql文件脚本

#!/usr/bin/env python
#_*_coding:utf-8_*_
"""
@File: backup_db.py
@Author: OldTan
@Email: [email protected]
@Last Modified: 20180408
"""
import os
import datetime
from threading import Thread
from logs import log

REMOTE_PATH = '/mnt/tantianran_mysql_backup/'
REMOTE_HOST = '10.36.1.55'
REMOTE_USER = 'root'

PATH = '/mnt/tantianran_mysql_backup/'
NOW = datetime.datetime.now()
NOWSTR = NOW.strftime('%Y%m%d')
CLEANSTR = NOW.strftime('%Y%m%d')

DBS = [
    'urun_private_cloud',
    'urun-asr',
    'ambari',
    'hive',
    'oozie',
    'storm-etl',
    'urun-sms',
    'analyzer-etl',
    'zabbix',
    'zabbix-key'
]

def scp_db_file(db):
    database = '{dbs}'.format(dbs=db)
    format = 'scp %(path)s%(db)s.%(date)s.sql %(remote_user)[email protected]%(remote_host)s:%(remote_path)s'
    kv = {'path': PATH, 'date': CLEANSTR, 'db' : database, 'remote_user': REMOTE_USER, 'remote_host': REMOTE_HOST, 'remote_path': REMOTE_PATH}
    d = ('%(db)s.%(date)s.sql' % kv )
    if os.path.exists(d):
        m = "Start SCP {} database sql file...".format(db)
        log(m)
        excute( format % kv)

def excute(cmd):
    os.system(cmd)

def main():
    print('''
        --------------------------------------------
               Transfer sql backup files
        --------------------------------------------
    ''')
    thread_list = []
    db_number = range(len(DBS))    

    for i in db_number:
        scp_t = Thread(target=scp_db_file, args=(DBS[i],))
        thread_list.append(scp_t)

    for i in db_number:
        thread_list[i].start()
    
    for i in db_number:    
        thread_list[i].join()

if __name__ == "__main__":
    main()

清除到期sql文件脚本

#!/usr/bin/env python
import os
import datetime
from threading import Thread
from logs import log

PATH = '/mnt/tantianran_mysql_backup/'
NOW = datetime.datetime.now()
NOWSTR = NOW.strftime('%Y%m%d')
CLEANSTR = (NOW - datetime.timedelta(days=5)).strftime('%Y%m%d')
DBS = [
    'urun_private_cloud',
    'urun-asr',
    'ambari',
    'hive',
    'oozie',
    'storm-etl',
    'urun-sms',
    'analyzer-etl',
    'zabbix',
    'zabbix-key'
]

def clean(db):
    database = '{dbs}'.format(dbs=db)
    format = 'rm -rf %(path)s%(db)s.%(date)s.sql'
    kv = {'path': PATH, 'date': CLEANSTR, 'db' : database}
    expiredDbFile = ('%(db)s.%(date)s.sql' % kv)
    if os.path.exists(expiredDbFile):
        msg = 'Start Delete expired database file: %s' % (expiredDbFile)
        log(msg)
        excute( format % kv)

def excute(cmd):
    os.system(cmd)

def main():
    thread_list = []
    dbs = range(len(DBS))
    for i in dbs:
        clean_t = Thread(target=clean, args=(DBS[i],))
        thread_list.append(clean_t)
    
    for i in dbs:
        thread_list[i].start()
    
    for i in dbs:        
        thread_list[i].join()

if __name__ == "__main__":
    main()

原文地址:http://blog.51cto.com/freshair/2103658

时间: 2024-09-29 23:00:37

MySQL备份脚本V2(添加日志功能及备份后检查)的相关文章

(译)Windsor入门教程---第五部分 添加日志功能

介绍 现在我们已经有了基础的框架了,是时候添加内容了,那么我们首先应该考虑的就是在应用程序中添加日志功能.我们会使用Windsor来配置,在这一部分,你将学习Windsor之外的其他功能. Logging Facility 在上一部分说过,Windsor有很多自带的可选的功能组件,他们扩展了Windsor的即用性.在这一部分,我们将在程序中添加日志功能. Logging Facility提供了一些常用的日志框架比如Log4net.Nlog,以及mvc内置的日志框架Trace.Logging Fa

????双机热备数据库备份脚本 v2.1

Text /* THIS4.0 数据库备份脚本 [作者] Rulition QQ:7355157 [版本] v2.1 [修改] 2010年5月21日15:35:13 完成 2010年5月24日11:35:13 细节修改 2010年5月25日11:31:13 增加[完整备份]前的一致性检查 2010年5月27日10:31:13 检查差异备份的大小,避免过大文件影响差异备份. 2010年5月28日11:14:15 补备份时查看最近是否已做过完全备份. 2010年10月17日21:58:32 切换@备

xtrabackup一键自动化备份脚本 V2 版【原创】

备份文件路径        backdir=/ASSET.innobackupex mysql用来备份用户   user=用户名 mysql用户的密码     pass=密码 输出的信息保存路径   logfile=/var/www/html/index.html [[email protected] ~]# cat innobackupex.v2.sh #!/bin/bash backdir=/ASSET.innobackupex user=用户名 pass=密码 logfile=/var/w

springboot 切面添加日志功能

1.新建一个springboot项目 2.定义个切面类,并指定切入点,获取所需记录信息(如:访问人IP, 访问地址,访问地址名称等) 3.新建数据库 SET FOREIGN_KEY_CHECKS=0; -- ------------------------------ Table structure for ds_access_log-- ----------------------------DROP TABLE IF EXISTS `ds_access_log`;CREATE TABLE `

PHP 简单实现MySQL数据搜索、添加数据功能

数据库testdb ,表user 列email和nikename html代码: <form method="post" action="search1.php" name="search"> <input name="search" type="text" value="" size="15"> <input type="su

mysql数据库的数据备份,以及开启日志

导出数据: location代表需要保存的数据文件的位置,默认保存在 C:\ProgramData\MySQL\MySQL Server 5.7\Data(Windows10系统位置,其他系统位置自行查找)1 select * from xs into outfile 'location' 2 character set gbk //设置导出的字符集,可以不用设置 3 fields 4 terminated by '\,' //设置导出间隔符 5 optionally enclosed by '

xtrabackup一键自动化备份脚本 【原创】

xtrabackup一键自动化备份脚本 V1 [原创] xtrabackup备份工具安装与使用 http://990487026.blog.51cto.com/10133282/1697094 需要填写的信息 备份文件路径        backdir=/ASSET.innobackupex mysql用来备份用户   user=root mysql用户的密码     pass=asset 输出的信息保存路径    logfile=/var/www/html/index.html l [[ema

.NET跨平台之旅:增加文件日志功能遇到的挫折

在将我们的ASP.NET 5示例站点(about.cnblogs.com)升级至ASP.NET 5 RC1的时候,我们增加了控制台日志功能. 在ASP.NET 5添加日志功能很简单,只需在project.json中添加Microsoft.Extensions.Logging.Console的引用: "dependencies":{ "Microsoft.Extensions.Logging.Console": "1.0.0-*" } 并且在 St

weblogic域备份脚本

一直一来,由于空间问题,weblogic域很少备份,偶尔会手动备份一次,这运维做得不称职,今天有时间,写个小脚本来定时备份. 1.脚本备份文件目录结构 [[email protected] ~]$ tree weblogic_bak_shell weblogic_bak_shell |-- exclude.conf |-- logs | `-- 2017-08-02.log |-- tar.conf `-- weblogic_bak.sh 2.主备份脚本 weblogic_bak.sh #!/b