目标:每日定时自动备份Mysql数据库


方案:

1、安装Python:

  使用的Python版本是Python3.7.1,下载地址:https://www.python.org/downloads/release/python-371/,安装过程略过。

2、python脚本:

  

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from datetime import date,datetime
import os
import zipfile
import re def search_file(path, pattern):
result_file_list = []
with os.scandir(path) as it:
for entry in it:
if not entry.name.startswith('.') and entry.is_file():
if re.fullmatch(pattern, entry.name):
result_file_list.append(entry.name) return result_file_list # 开始备份
print("开始备份数据库...") # 获取当前时间
cur_date = date.today().strftime("%Y%m%d")
# 数据库IP
host = "localhost"
# 数据库名称
db_name = "db"
# 用户名
db_user_name = "root"
# 密码
db_user_pwd = "password"
# 备份目录
backup_dir = "E:\\DataBaseBackup\\db"
# 备份目录不存在则创建
if not os.path.exists(backup_dir):
os.makedirs(backup_dir)
# 备份文件名
file_name = cur_date + ".sql"
# 压缩文件名
zip_file_name = cur_date + ".zip" #切换到备份目录
os.chdir(backup_dir)
# 备份数据库命令
run_backup = "D:\\MySql\\mysql-5.7.21-winx64\\bin\\mysqldump.exe --host=" + host + " --user=" + db_user_name + " --password=" + db_user_pwd + " --protocol=tcp --port=3306 --default-character-set=utf8 " + db_name + " > " + file_name
print(run_backup)
# 执行备份
os.system(run_backup) #文件是否存在
file_exist = os.path.exists(file_name)
if file_exist:
# 压缩文件
with zipfile.ZipFile(zip_file_name,"w",zipfile.ZIP_DEFLATED) as myzip:
myzip.write(file_name) # 删除文件
os.remove(file_name) # 备份结束
print("备份数据库成功") # 清理30天前的过期文件
max_days = 30
old_files = search_file(backup_dir, r"\d{8}.zip")
for old_file in old_files:
str_date = old_file.split('.')[0]
dt = datetime.strptime(str_date,"%Y%m%d")
days = (datetime.today() - dt).days
if days > max_days:
os.remove(old_file)

  说明:使用mysql的mysqldump备份数据库(可配置为环境变量),备份的文件将是以当前日期为名称的zip文件,备份文件只保留30天。

3、配置windows任务计划:

  3.1、打开“计算机管理”,找到“任务计划程序”,点击“创建任务”

    

  3.2、配置任务信息:

   

  3.3、新建触发器

  

  

  3.4、新建操作

  

  

  3.5、确认保存

  3.6、运行测试

  

  Over!!Bye Bye

最新文章

  1. npoi本地文件
  2. 关于HTML中标签<a>使用js的注意事项
  3. javaWeb开发模式
  4. C#中相对路径转换为绝对路径的方法
  5. 不同版本mysql语句不兼容原因
  6. POJ3468 A Simple Problem with Integers(线段树延时标记)
  7. 转 : React Native 开发之 IDE 选型和配置
  8. 优化UITableViewCell高度计算的那些事(RunLoop)
  9. MySQL可视化管理工具 —— Navicat for MysSQL
  10. spring中涉及事务(bean中ref与local)
  11. 离线安装.NET 3.5小记
  12. spring Jdbc自己主动获取主键。
  13. [补档][COGS 2434]暗之链锁
  14. Android 小票打印USB
  15. Lucene.net 的性能探究--Lucene.net 的并发处理能力到底有多强?
  16. shell脚本修改文本中匹配行之前的行的方法
  17. Dedekind整环上的有限生成模的分类
  18. day2 二、编程语言、python解释器和变量
  19. 20155326刘美岑 2016-2017-2 《Java程序设计》第二周学习总结
  20. hulu

热门文章

  1. 网络请求NSLog结果不全
  2. PHP算法之两数相加
  3. sql(10) sum
  4. CIE XYZ
  5. 【JZOJ6378】小w与数字游戏(game)
  6. CSS——滑动门技术及应用
  7. js 定位到某个锚点的方法
  8. VS2010-MFC(常用控件:图片控件Picture Control)
  9. Delphi代码创建形式规范 1.0
  10. hexo next中遇到的bug,引发出的关于jquery中click()函数和on("click",function())的区别