首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python脚本自动备份Mysql数据库

Python脚本自动备份Mysql数据库

作者头像
4xx.me
发布2022-06-09 19:07:37
发布2022-06-09 19:07:37
3.9K0
举报

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

需要先安装PyMySQL

代码语言:javascript
复制
# 安装下必要库
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

放入脚本文件,并给权限

执行脚本

代码语言:javascript
复制
/data/shell/mysql_back.py

添加Linux定时任务命令

代码语言:javascript
复制
crontab -e
#进去添加下边代码
*/15 * * * * /data/shell/mysql_back.py > /data/shell/logs.log 2>&1 &
#定时时间格式    脚本路径/脚本
#:wq保存退出即可

mysql_back.py脚本文件

代码语言:javascript
复制
#!/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的解决方法

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需要先安装PyMySQL
  • 放入脚本文件,并给权限
  • 执行脚本
  • 添加Linux定时任务命令
  • mysql_back.py脚本文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档