Last Updated on

前言

mysql作为中小型公司最常用的数据库,而为了保证数据不丢失,都是会有数据备份的需求的,数据备份根据数据量的大小,使用的备份方式会有所不同,当数据量不大数,可直接通过mysqldump进行备份,当数据量越来越大时,使用mysqldump备份就会越来越慢,就需要使用第三方工具进行备份。

下面就分享一个使用mysqldump进行数据备份的脚本。

正文

脚本为python3脚本。需要先安装python3:

《Centos7 安装python3与python2.7 共存》

下面是脚本内容,此脚本可以根据环境,设置不同环境的数据库,根据环境进行备份,提供忽略列表,备份除忽略的datatbase之外的所有database。

# 新增备份脚本文件在/backups文件夹下,添加如下内容
$ mkdir /backups
$ vim /backups/mysql_back.py
-------------------------------------------------------------------
#! /usr/bin/python36

import os
import re
import datetime
import subprocess

mysql_host = {
    'test': '192.168.0.3',
    'pre': '192.168.0.2',
    'prod': '192.168.0.3'
}
db_user = 'root'
db_passwd = 'your_mysql_password'

back_dir = '/backups/mysql'

#  备份文件保存时间,单位:天
backup_keep_time = 20

# 此列表中的数据库将不会备份,下面是默认的基础数据库。
ignore_database = ['Database','information_schema','mysql','performance_schema']

today = datetime.datetime.today().strftime('%Y%m%d')
for env in mysql_host:
    cmd = '/usr/bin/mysql -h {} -u{} -p{} -e "show databases"'.format(mysql_host.get(env),db_user,db_passwd)
    result = subprocess.check_output(cmd,shell=True,universal_newlines=True).split('\n')
    databases = [i for i in result if i and i not in ignore_database]
    env_backup_dir = os.path.join(back_dir,env)
    os.system('mkdir -p {}'.format(env_backup_dir))

    for database in databases:
        back_path = os.path.join(env_backup_dir,'%s_%s.sql.gz' %(database,today))
        command = '/usr/bin/mysqldump -h {} -u{} -p{} {} --force |gzip > {}'.format(
            mysql_host.get(env),db_user,db_passwd,database,back_path
        )
        os.system(command)

    for dirname in os.listdir(env_backup_dir):
        t1 = re.findall(r'_([\d]*?).sql.*',dirname)[0]
        time1 = datetime.datetime.strptime(t1,'%Y%m%d')
        time_dif = datetime.datetime.today()-time1
        times = time_dif.days
        if times >= backup_keep_time:
            os.remove(os.path.join(env_backup_dir,dirname))
-------------------------------------------------------------------

# 备份脚本,还需要授权为可执行,才能直接执行
$ chmod +x /backups/mysql_back.py

# 备份脚本有了后,需要设置定时任务进行定时备份,使用系统自身的crond服务
# 修改定时任务配置文件,在最后添加下面内容,添加定时任务
$ vim /etc/crontab
-------------------------------------------------------------------
# 下面这句的意思是每天早上6点,用root用户,执行此路径的mysql_back.py文件
00 6 * * * root /backups/mysql_back.py
-------------------------------------------------------------------

结束

ok,脚本就是这样,比较简单方便。可以自己根据需求进行修改。

有任何问题,欢迎留言