Python 基于docker部署的Mysql备份查询脚本

前言

此环境是基于docker部署的mysql,docker部署mysql可以参考如下链接:

docker 部署服务案例-CSDN博客

颜色块文件

root@bogon:~ 2024-04-18 16:34:23# cat DefaultColor.py
#########################################################################
#    File Name: DefaultColor.py
#    Author: eight
#    Mail: 18847097110@163.com 
#    Created Time: Thu 11 Apr 2024 10:25:31 PM CST
#########################################################################
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Color:END = '\033[0m'  # normalBOLD = '\033[1m'  # boldRED = '\033[1;91m'  # redGREEN = '\033[1;92m'  # greenORANGE = '\033[1;93m'  # orangeBLUE = '\033[1;94m'  # bluePURPLE = '\033[1;95m'  # purpleUNDERLINE = '\033[4m'  # underlineCYAN = '\033[1;96m'  # cyanGREY = '\033[1;97m'  # grayBR = '\033[1;97;41m'  # background redBG = '\033[1;97;42m'  # background greenBY = '\033[1;97;43m'  # background yellow

备份代码


#########################################################################
#    File Name: query_mysql.py
#    Author: eight
#    Mail: 18847097110@163.com 
#    Created Time: Thu 18 Apr 2024 11:12:26 AM CST
#########################################################################
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pymysql
import configparser
import os
from datetime import datetime
import DefaultColor
import subprocess# 创建备份目录
def mkdir():dir_path = os.getcwd()print("--------------------------------------------------------")print("当前脚本工作目录:", dir_path)mysql_backup_dir = "/opt/mysql_backup"print("--------------------------------------------------------")if not os.path.exists(mysql_backup_dir):os.makedirs(mysql_backup_dir)else:return f"数据库备份目录 '{mysql_backup_dir}' 已经存在,跳过创建"return "数据库备份目录:" + DefaultColor.Color.GREEN + mysql_backup_dir + DefaultColor.Color.END + " 创建成功"# 备份数据库 
def backup(mysql_backup_dir):config = configparser.ConfigParser()config.read("config.ini")# 获取配置信息host = config.get("MYSQL", "MYSQL_HOST")username = config.get("MYSQL", "MYSQL_USER")password = config.get("MYSQL", "MYSQL_PASSWORD")port = config.get("MYSQL", "MYSQL_PORT")db = config.get("MYSQL", "MYSQL_DB")current_datetime = datetime.now()formatted_datetime = current_datetime.strftime("%Y-%m-%d_%H-%M-%S")try:command = f'docker exec -it mysql-container /bin/bash -c "mysqldump -h {host} -u {username} -p{password} -P {port} -- {db} > {mysql_backup_dir}-{db}-{formatted_datetime}.sql"'subprocess.run(command, shell=True, check=True)except subprocess.CalledProcessError as e:print("Database backup failed:", e)return f"数据库:{db}备份完成: {mysql_backup_dir}-{db}-{formatted_datetime}.sql"if __name__ == '__main__':backup_dir = mkdir()print(backup_dir)backup = backup("/opt/mysql_backup")print(backup)

此代码如果是本地环境测试的话,逻辑是判断当前本地有没有存储备份数据的目录,没有则创建。

再利用subprocess执行mysqldump命令,按照日期生成.sql文件

效果

 因为是docker环境,所以判断当前目录是否存在,是判断的宿主机上的,所以此代码不是很严谨的代码,如果是本地部署的话,把mysqldump命令前面的  docker exec -it mysql-container /bin/bash -c  删除掉即可。

这样备份的脚本就实现了脚本预期效果:将数据库备份到指定的目录下,以日期区别sql文件

全量代码(读取配置和备份和查询)

root@bogon:~ 2024-04-18 16:30:14# cat MysqlBackup.py 
#########################################################################
#    File Name: query_mysql.py
#    Author: eight
#    Mail: 18847097110@163.com 
#    Created Time: Thu 18 Apr 2024 11:12:26 AM CST
#########################################################################
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pymysql
import configparser
import os
from datetime import datetime
import DefaultColor
import subprocess# 读取mysql配置文件
def mysql_config():config = configparser.ConfigParser()config.read("config.ini")# 获取配置信息host = config.get("MYSQL", "MYSQL_HOST")username = config.get("MYSQL", "MYSQL_USER")password = config.get("MYSQL", "MYSQL_PASSWORD")port = config.get("MYSQL", "MYSQL_PORT")db = config.get("MYSQL", "MYSQL_DB")print("--------------------------------------------------------")return f"主机:{host}\t用户名:{username}\t密码:{password}\t端口:{port}\t数据库:{db}"# 创建备份目录
def mkdir():dir_path = os.getcwd()print("--------------------------------------------------------")print("当前脚本工作目录:", dir_path)mysql_backup_dir = "/opt/mysql_backup"print("--------------------------------------------------------")if not os.path.exists(mysql_backup_dir):os.makedirs(mysql_backup_dir)else:return f"数据库备份目录 '{mysql_backup_dir}' 已经存在,跳过创建"return "数据库备份目录:" + DefaultColor.Color.GREEN + mysql_backup_dir + DefaultColor.Color.END + " 创建成功"# 查询sql语句
##def select():
#       config = configparser.ConfigParser()
#       config.read("config.ini")
#                    
#       # 获取配置信息
#       host = config.get("MYSQL", "MYSQL_HOST")
#       username = config.get("MYSQL", "MYSQL_USER")
#       password = config.get("MYSQL", "MYSQL_PASSWORD")
#       port = config.get("MYSQL", "MYSQL_PORT")
#       db = config.get("MYSQL", "MYSQL_DB")
#       # 创建mysql连接信息
#       conn = pymysql.connect(host=host, user=username, password=password, port=int(port), db=db)
#       cur = conn.cursor()
#       # 执行查询语句
#       cur.execute("use docker;")
#       cur.execute("select * from DockerImages;")
#       print("查询到的数据是:")
#       # 接收全部的返回结果行
#       result = cur.fetchall()
#       while True:
#               resp = cur.fetchone()
#               if resp is None:
#                       break
#       # 关闭查询游标
#       cur.close()
#       # 提交
#       conn.commit()
#       # 关闭链接,释放计算机资源
#       conn.close()
#       return result# 备份数据库 
def backup(mysql_backup_dir):config = configparser.ConfigParser()config.read("config.ini")# 获取配置信息host = config.get("MYSQL", "MYSQL_HOST")username = config.get("MYSQL", "MYSQL_USER")password = config.get("MYSQL", "MYSQL_PASSWORD")port = config.get("MYSQL", "MYSQL_PORT")db = config.get("MYSQL", "MYSQL_DB")current_datetime = datetime.now()formatted_datetime = current_datetime.strftime("%Y-%m-%d_%H-%M-%S")try:command = f'docker exec -it mysql-container /bin/bash -c "mysqldump -h {host} -u {username} -p{password} -P {port} -- {db} > {mysql_backup_dir}-{db}-{formatted_datetime}.sql"'subprocess.run(command, shell=True, check=True)except subprocess.CalledProcessError as e:print("Database backup failed:", e)return f"数据库:{db}备份完成: {mysql_backup_dir}-{db}-{formatted_datetime}.sql"if __name__ == '__main__':#mysql_config = mysql_config()#print(mysql_config)backup_dir = mkdir()print(backup_dir)#sector = select()# 循环打印所有数据,如果此代码是封装在函数内部,那么使用return的话,只会输出第一条数据,所以要在外部调用#for row in sector:#       print(row)backup = backup("/opt/mysql_backup")print(backup)
root@bogon:~ 2024-04-18 16:30:18# 
root@bogon:~ 2024-04-18 16:30:32# 
root@bogon:~ 2024-04-18 16:30:32# cat MysqlBackup.py 
#########################################################################
#    File Name: query_mysql.py
#    Author: eight
#    Mail: 18847097110@163.com 
#    Created Time: Thu 18 Apr 2024 11:12:26 AM CST
#########################################################################
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pymysql
import configparser
import os
from datetime import datetime
import DefaultColor
import subprocess# 读取mysql配置文件
def mysql_config():config = configparser.ConfigParser()config.read("config.ini")# 获取配置信息host = config.get("MYSQL", "MYSQL_HOST")username = config.get("MYSQL", "MYSQL_USER")password = config.get("MYSQL", "MYSQL_PASSWORD")port = config.get("MYSQL", "MYSQL_PORT")db = config.get("MYSQL", "MYSQL_DB")print("--------------------------------------------------------")return f"主机:{host}\t用户名:{username}\t密码:{password}\t端口:{port}\t数据库:{db}"# 创建备份目录
def mkdir():dir_path = os.getcwd()print("--------------------------------------------------------")print("当前脚本工作目录:", dir_path)mysql_backup_dir = "/opt/mysql_backup"print("--------------------------------------------------------")if not os.path.exists(mysql_backup_dir):os.makedirs(mysql_backup_dir)else:return f"数据库备份目录 '{mysql_backup_dir}' 已经存在,跳过创建"return "数据库备份目录:" + DefaultColor.Color.GREEN + mysql_backup_dir + DefaultColor.Color.END + " 创建成功"# 查询sql语句
def select():config = configparser.ConfigParser()config.read("config.ini")# 获取配置信息host = config.get("MYSQL", "MYSQL_HOST")username = config.get("MYSQL", "MYSQL_USER")password = config.get("MYSQL", "MYSQL_PASSWORD")port = config.get("MYSQL", "MYSQL_PORT")db = config.get("MYSQL", "MYSQL_DB")# 创建mysql连接信息conn = pymysql.connect(host=host, user=username, password=password, port=int(port), db=db)cur = conn.cursor()# 执行查询语句cur.execute("use docker;")cur.execute("select * from DockerImages;")print("查询到的数据是:")# 接收全部的返回结果行result = cur.fetchall()while True:resp = cur.fetchone()if resp is None:break# 关闭查询游标cur.close()# 提交conn.commit()# 关闭链接,释放计算机资源conn.close()return result# 备份数据库 
def backup(mysql_backup_dir):config = configparser.ConfigParser()config.read("config.ini")# 获取配置信息host = config.get("MYSQL", "MYSQL_HOST")username = config.get("MYSQL", "MYSQL_USER")password = config.get("MYSQL", "MYSQL_PASSWORD")port = config.get("MYSQL", "MYSQL_PORT")db = config.get("MYSQL", "MYSQL_DB")current_datetime = datetime.now()formatted_datetime = current_datetime.strftime("%Y-%m-%d_%H-%M-%S")try:command = f'docker exec -it mysql-container /bin/bash -c "mysqldump -h {host} -u {username} -p{password} -P {port} -- {db} > {mysql_backup_dir}-{db}-{formatted_datetime}.sql"'subprocess.run(command, shell=True, check=True)except subprocess.CalledProcessError as e:print("Database backup failed:", e)return f"数据库:{db}备份完成: {mysql_backup_dir}-{db}-{formatted_datetime}.sql"if __name__ == '__main__':mysql_config = mysql_config()print(mysql_config)backup_dir = mkdir()print(backup_dir)sector = select()#循环打印所有数据,如果此代码是封装在函数内部,那么使用return的话,只会输出第一条数据,所以要在外部调用for row in sector:print(row)backup = backup("/opt/mysql_backup")print(backup)

效果

优化

#########################################################################
#    File Name: query_mysql.py
#    Author: eight
#    Mail: 18847097110@163.com 
#    Created Time: Thu 18 Apr 2024 11:12:26 AM CST
#########################################################################
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pymysql
import configparser
import os
from datetime import datetime
import DefaultColor
import subprocess# 读取mysql配置文件
def mysql_config():config = configparser.ConfigParser()config.read("config.ini")# 获取配置信息host = config.get("MYSQL", "MYSQL_HOST")username = config.get("MYSQL", "MYSQL_USER")password = config.get("MYSQL", "MYSQL_PASSWORD")port = config.get("MYSQL", "MYSQL_PORT")db = config.get("MYSQL", "MYSQL_DB")print("--------------------------------------------------------")return {"host": host,"username": username,"password": password,"port": port,"db": db}# 创建备份目录
def mkdir():dir_path = os.getcwd()print("--------------------------------------------------------")print("当前脚本工作目录:", dir_path)mysql_backup_dir = "/opt/mysql_backup"print("--------------------------------------------------------")if not os.path.exists(mysql_backup_dir):os.makedirs(mysql_backup_dir)else:return f"数据库备份目录 '{mysql_backup_dir}' 已经存在,跳过创建"return "数据库备份目录:" + DefaultColor.Color.GREEN + mysql_backup_dir + DefaultColor.Color.END + " 创建成功"# 查询sql语句
def select():mysql_connect_info = mysql_config()# 创建mysql连接信息 conn = pymysql.connect(host=mysql_connect_info["host"],user=mysql_connect_info["username"],password=mysql_connect_info["password"],port=int(mysql_connect_info["port"]),db=mysql_connect_info["db"])																													cur = conn.cursor()# 执行查询语句cur.execute("use docker;")cur.execute("select * from DockerImages;")print("查询到的数据是:")# 接收全部的返回结果行result = cur.fetchall()while True:resp = cur.fetchone()if resp is None:break# 关闭查询游标cur.close()# 提交conn.commit()# 关闭链接,释放计算机资源conn.close()return result# 备份数据库 
def backup(mysql_backup_dir):# 获取配置信息current_datetime = datetime.now()formatted_datetime = current_datetime.strftime("%Y-%m-%d_%H-%M-%S")mysql_connect_info = mysql_config()try:command = f'docker exec -it mysql-container /bin/bash -c "mysqldump -h {mysql_connect_info["host"]} -u {mysql_connect_info["username"]} -p{mysql_connect_info["password"]} -P {mysql_connect_info["port"]} -- {mysql_connect_info["db"]} > {mysql_backup_dir}-{mysql_connect_info["db"]}-{formatted_datetime}.sql"'subprocess.run(command, shell=True, check=True)except subprocess.CalledProcessError as e:print("Database backup failed:", e)return f'数据库:{mysql_connect_info["db"]}备份完成: {mysql_backup_dir}-{mysql_connect_info["db"]}-{formatted_datetime}.sql'if __name__ == '__main__':backup_dir = mkdir()print(backup_dir)sector = select()#循环打印所有数据,如果此代码是封装在函数内部,那么使用return的话,只会输出第一条数据,所以要在外部调用for row in sector:print(row)backup = backup("/opt/mysql_backup")print(backup)

将配置文件信息以字典的方式返回

在查询函数时,使用相应的键来访问这些值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java音乐播放器系统设计与实现springboot-vue

后端技术 SpinrgBoot的主要优点有: 1、为所有spring开发提供了一个更快、更广泛的入门体验; 2、零配置; 3、集成了大量常用的第三方库的配置; Maven: 项目管理和构建自动化工具,用于java项目。 java: 广泛使用的编程语…

阿里云服务器连接数详细说明

阿里云服务器“连接数”是什么意思?连接又称网络会话,是客户端与服务器建立连接并传输数据的过程。网络五元组(包括源IP、目的IP、源端口、目的端口、协议)唯一确定一个连接,ECS实例的连接数包括通过TCP、UDP、ICMP协议…

Vue之事件绑定(初识Vue事件)

目录 一、Vue事件绑定-介绍 1.概念 2.特点 3.好处 4.功能 5.应用 二、Vue事件绑定-使用 1.v-on 2.绑定事件的基本使用 3.绑定事件参数传递 4.绑定事件的修饰符 三、实例 1.增加计数器 2.删除列表项 四、总结 一、Vue事件绑定-介绍 Vue 的事件绑定是指通过 Vue …

python使用tkinter和ttkbootstrap制作UI界面(二)

这次讲解UI界面常用的主键,延续上文的框架进行编写,原界面如下: Combobox组件应用(下拉框) """Combobox组件"""global comvalue_operatorcomvalue_operator tk.StringVar()value_ope…

【论文阅读】用于遥感弱监督语义分割的对比标记和标签激活

【论文阅读】用于遥感弱监督语义分割的对比标记和标签激活 文章目录 【论文阅读】用于遥感弱监督语义分割的对比标记和标签激活一、介绍二、联系工作三、方法3.1 对比token学习模块(CTLM)3.2 Class token对比学习3.3 标签前景激活模块 四、实验结果 Cont…

【云计算】云数据中心网络(七):负载均衡

《云网络》系列,共包含以下文章: 云网络是未来的网络基础设施云网络产品体系概述云数据中心网络(一):VPC云数据中心网络(二):弹性公网 IP云数据中心网络(三)…

日常小bug

1.mybatis-config.xml中记载sql的映射文件的方式 <mappers><!-- 方法一&#xff1a;使用xml文件进行注册,注意&#xff1a;这里是斜线--><mapper resource"com/dao/UserMapper.xml"/><!-- 方法二&#xff1a;使用class进行注册&#xff0c;注…

C语言-单片机:STM32程序烧录的几种方法

STM32微控制器提供了多种程序烧录&#xff08;也称为编程或固件更新&#xff09;方式&#xff0c;这些方法允许用户将编译后的程序代码&#xff08;通常为HEX或BIN格式&#xff09;下载到MCU的闪存中。以下是几种常见的STM32程序烧录方式&#xff1a; ST-LINK&#xff1a; ST-L…

在Ubuntu 22.04上安装配置VNC实现可视化

前面安装的部分可以看我这篇文章 在Ubuntu 18.04上安装配置VNC实现Spinach测试可视化_ubuntu18开vnc-CSDN博客 命令差不多一样&#xff1a; sudo apt update sudo apt install xfce4 xfce4-goodies sudo apt install tightvncserver这个时候就可以启动server了 启动server&…

Linux RHCE练习之远程连接服务实战

Linux RHCE练习之远程连接服务实战 要求 主机一 主机名&#xff1a;server.example.comip: 172.25.254.100建立用户timinglee&#xff0c;其密码为timinglee 主机二 主机名&#xff1a;client.example.comip: 172.25.254.200 实现 主机一实现 [rootserver100 ~]# hostn…

C++:map和set的使用

一、关联式容器介绍 在学习map和set之前&#xff0c;我们接触到的容器有&#xff1a;vector、list、stack、queue、priority_queue、array&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身。 关联式容器也是用…

解锁PDF潜能:一站式PDF处理工具,让文件管理更高效!

在这个数字化时代&#xff0c;PDF文件因其便携性和安全性成为了我们日常工作和学习中不可或缺的一部分。但你是否曾遇到过PDF文件加密、需要合并拆分、或转换格式的难题&#xff1f;别担心&#xff0c;今天我们将为你介绍一款功能强大的PDF处理工具&#xff0c;它将彻底改变你对…

李沐-16 PyTorch 神经网络基础【动手学深度学习v2】

注&#xff1a;1. 沐神对应章节视频出处 2.代码使用Jupyter Notebook运行更方便 3.文章笔记出处 一、层和块 层&#xff1a;层&#xff08;1&#xff09;接受一组输入&#xff0c; &#xff08;2&#xff09;生成相应的输出&#xff0c; &#xff08;3&#xff09;由一组可调整…

【Camera Framework笔记】二、Camera Native Framework架构①

一、总体架构&#xff1a; service -> opencamera -> client&#xff08;api1/api2&#xff09; -> device3&#xff08;hal3&#xff09; | | &#xff08;不opencamera…

Linux网络编程--网络传输

Linux网络编程--网络传输 Linux网络编程TCP/IP网络模型网络通信的过程局域网通信跨网络通信&#xff1a;问题总结&#xff1a; Linux网络编程 TCP/IP网络模型 发送方&#xff08;包装&#xff09;&#xff1a; 应用层&#xff1a;HTTP HTTPS SSH等 —> 包含数据&#xff0…

终极版商城平台 涵盖虚拟商品全功能的商城平台 全能商城小程序 智慧商城系统 全品类百货商城服务

终极版商城平台 涵盖虚拟商品全功能的商城平台 全能商城小程序 智慧商城系统 全品类百货商城服务 含uniapp源码 全功能商城系统&#xff1a;完美运营版&#xff0c;简洁无冗余 这款商城系统完美集成了拼团、团购、秒杀、积分兑换、砍价活动&#xff0c;同时支持实物商品与虚拟…

2010年认证杯SPSSPRO杯数学建模B题(第一阶段)交通拥堵问题全过程文档及程序

2010年认证杯SPSSPRO杯数学建模 交通拥堵问题 B题 Braess 悖论 原题再现&#xff1a; Dietrich Braess 在 1968 年的一篇文章中提出了道路交通体系当中的Braess 悖论。它的含义是&#xff1a;有时在一个交通网络上增加一条路段&#xff0c;或者提高某个路段的局部通行能力&a…

开发语言漫谈-Vue

Vue严格说来不是一门语言&#xff0c;它是Javascript的一个框架。如同Spring是Java语言的一个框架。只是当下为了开发效率&#xff0c;很少有人使用原生Javascript&#xff0c;多少得选择某种框架。类似的框架实在太多&#xff0c;bootstrap、layui、Angular、jQuery、react、E…

深度学习知识点:循环神经网络(RNN)、长短期记忆网络(LSTM)、门控循环单元(GRU)

深度学习知识点&#xff1a;循环神经网络&#xff08;RNN&#xff09;、长短期记忆网络&#xff08;LSTM&#xff09;、门控循环单元&#xff08;GRU&#xff09; 前言循环神经网络&#xff08;RNN&#xff09;RNNs&#xff08;循环神经网络&#xff09;训练和传统ANN&#xff…

VulBG: 构建行为图加强基于深度学习的漏洞检测模型

近年来&#xff0c;人们提出了基于深度学习&#xff08;DL&#xff09;的漏洞检测系统&#xff0c;用于从源代码中自动提取特征。这些方法在合成数据集上可以实现理想的性能&#xff0c;但在检测真实世界的漏洞数据集时&#xff0c;准确率却大幅下降。此外&#xff0c;这些方法…