Python脚本自动备份Mysql数据库,此脚本会备份所有数据库,并按库名创建文件夹保存,只保留最近7天的备份数据。可自定义修改。支持Python2,、Python3。
# 安装下必要库
yum -y install gcc gcc-c++ make zlib* openssl openssl-devel openssl-static -y
yum install python-setuptools -y
# 或者 yum install python3-setuptools -y
easy_install pip
# 或者 easy_install3 pip
# 安装PyMySQL
pip install PyMySQL
/data/shell/mysql_back.py
crontab -e
#进去添加下边代码
*/15 * * * * /data/shell/mysql_back.py > /data/shell/logs.log 2>&1 &
#定时时间格式 脚本路径/脚本
#:wq保存退出即可
mysql_back.py
脚本文件#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 先安装PyMySQL模块 pip install PyMySQL
# 忽略产生的警告是信息
import warnings
warnings.filterwarnings('ignore')
# pyMysql CPython>= 2.6 or >= 3.3
import pymysql
# 导入 os 这个模块,因为要在 shell 中执行
import os
import time
mysql_host = "127.0.0.1"
mysql_user = "root"
mysql_pwd = "root"
mysql_port = 3306
mysql_charset = "utf8"
new_date = time.strftime("%Y%m%d%H%M%S")
back_path = "/data/mysql_back/"
out_time = 7*24*60*60 # 指定多少秒前的数据删除
try:
if(not(os.path.exists(back_path))):
os.makedirs(back_path)
# 获取一个数据库连接,注意如果是UTF-8类型的,需要制定数据库
conn = pymysql.connect(
host=mysql_host, # 数据库地址
user=mysql_user, # 数据库用户名
passwd=mysql_pwd, # 数据库密码
db='mysql', # 数据名
port=mysql_port, # 数据库访问端口
charset=mysql_charset # 数据库编码格式
)
cur = conn.cursor() # 获取一个游标
cur.execute('show databases') # 查询出所有数据库
data = cur.fetchall() # 查询出来,并赋值 data
for db_names in data:
for db_name in db_names:
if(db_name=='information_schema' or db_name=='performance_schema' or db_name=='mysql'):
continue
if(not(os.path.exists(back_path+db_name))):
os.makedirs(back_path+db_name)
path = back_path+db_name+"/"+new_date+".sql" # 数据库备份路径
os.system("mysqldump -h%s -u%s -p%s %s > %s" % (mysql_host, mysql_user, mysql_pwd, db_name, path))
old_time = time.strftime("%Y%m%d",time.gmtime(time.time()-out_time))
os.system("rm -f %s*.sql" % (back_path+db_name+"/"+old_time))
cur.close() # 关闭游标
conn.close() # 释放数据库资源
except Exception: print("查询失败")
添加定时任务前先执行下,看是否能执行成功
如果备份出来0kb,/data/shell/logs.log查看日志找原因
如果日志是mysqldump: command not found
,在备份mysql数据库时,提示mysqldump: command not found的解决方法