python自动备份数据库_Python脚本自动备份Mysql数据库

本文介绍如何使用Python脚本实现MySQL数据库的自动备份。脚本会为每个数据库创建单独的备份文件,并且只保留最近7天的备份。首先确保安装了PyMySQL,然后将脚本设置为可执行,并通过Linux的crontab添加定时任务。如果遇到问题,如mysqldump命令未找到,可查阅日志进行排查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

放入脚本文件,并给权限

执行脚本/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的解决方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值