Python脚本自动备份Mysql数据库,此脚本会备份所有数据库,并按库名创建文件夹保存,只保留最近7天的备份数据。可自定义修改。支持Python2,、Python3。

需要先安装PyMySQL

# 安装下必要库
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

放入脚本文件,并给权限

QQ截图20180110153248.jpg

执行脚本

/data/shell/mysql_back.py

添加Linux定时任务命令

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的解决方法