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,脚本就是这样,比较简单方便。可以自己根据需求进行修改。
有任何问题,欢迎留言