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

这篇具有很好参考价值的文章主要介绍了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'  # normal
        BOLD = '\033[1m'  # bold
        RED = '\033[1;91m'  # red
        GREEN = '\033[1;92m'  # green
        ORANGE = '\033[1;93m'  # orange
        BLUE = '\033[1;94m'  # blue
        PURPLE = '\033[1;95m'  # purple
        UNDERLINE = '\033[4m'  # underline
        CYAN = '\033[1;96m'  # cyan
        GREY = '\033[1;97m'  # gray
        BR = '\033[1;97;41m'  # background red
        BG = '\033[1;97;42m'  # background green
        BY = '\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文件

效果

Python 基于docker部署的Mysql备份查询脚本,Python,python,mysql,adb

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

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

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


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)

效果

Python 基于docker部署的Mysql备份查询脚本,Python,python,mysql,adb

优化

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

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

避免重复定义变量文章来源地址https://www.toymoban.com/news/detail-858873.html

#########################################################################
#    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)

到了这里,关于Python 基于docker部署的Mysql备份查询脚本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql自动备份脚本

    #!/bin/bash #author cheng #mysql数据自动备份 mysql_user=“root” mysql_password=“passwprd” mysql_host=“localhost” mysql_port=“3306” mysql_charset=“utf8mb4” #备份文件存放地址(根据实际情况填写) backup_location=/usr/cheng/msg_manager/sql #是否删除过期数据 expire_backup_delete=“ON” #过期时间设置 expire_da

    2024年02月11日
    浏览(38)
  • MySQL定时备份及清理脚本

    在MySQL中,定时备份和清理通常通过结合操作系统的定时任务(如Linux的cron或Windows的任务计划程序)和SQL脚本或命令行工具来完成。下面是一个简单的例子,展示了如何在Linux系统中使用cron和mysqldump命令来定时备份MySQL数据库,并使用find命令来清理旧的备份。 1. 备份MySQL数据

    2024年02月20日
    浏览(37)
  • MySQL数据库备份脚本

    PS:此脚本简单易懂,根据实际情况修改个别参数测试后即可使用,如有错误请指出! data:是个文件夹,用于存储备份下来的数据; db_and_tables:是个文件夹,用于存储脚本中需要的配置参数; old_db :存储不需要备份的数据库;脚本会通过此配置从而生成需要备份数据库的

    2024年02月03日
    浏览(45)
  • windows系统Mysql备份脚本

            用的windows server 2019服务器,mysql8.0.34,还是应该每天备份一下。以前做了很多次,主要是带了2个徒弟,还是要写出来。 1.windows的dos下,获取当前日期字符串    第一行:chcp 936    是指定当前dos窗口使用gbk字符集。    第二行和第三行:    set date_tmp=%date:~0,10%    

    2024年01月15日
    浏览(35)
  • MySQL中binlog备份脚本分享

    关于MySQL的二进制日志(binlog),我们都知道二进制日志(binlog)非常重要,尤其当你需要point to point灾难恢复的时侯,所以我们要对其进行备份。关于二进制日志(binlog)的备份,可以基于flush logs方式先切换binlog,然后拷贝压缩到到远程服务器或本地服务器的其他存储上,例如

    2023年04月19日
    浏览(32)
  • python3使用pandas备份mysql数据表

    操作系统 :CentOS 7.6_x64 Python版本:3.9.12 MySQL版本:5.7.38 日常开发过程中,会遇到mysql数据表的备份需求,需要针对单独的数据表进行备份并定时清理数据。 今天记录下python3如何使用pandas进行mysql数据表的备份,我将从以下几个方面进行展开:  数据表备份逻辑描述  使用的

    2024年02月05日
    浏览(36)
  • mysql定时备份shell脚本和还原

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 数据库备份是防止数据丢失的一种重要手段。生产环境中,数据的安全性是至关重要的,任何数据的丢失都可能产生严重的后果。 数据库备份的重要性主要体现在: 提高系统的高可用性和灾难可恢复性

    2024年02月02日
    浏览(44)
  • shell脚本实现Mysql分库分表备份

    12张图把分库分表讲的明明白白! 阿里面试:我们为什么要分库分表 https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==mid=2247547792idx=2sn=91a10823ceab0cb9db26e22783343debchksm=fbb1b26eccc63b784879f90540c8ab1731e635b30e5f4fd41de67f87a4fe055473039206f09dscene=27 4.1.创建三个数据库:compay,jiaowu,goods 4.2.查看数据库及表  

    2024年02月22日
    浏览(53)
  • shell脚本-MySQL数据库备份

    确保mysql服务启动 可以通过mysqldump命令来备份数据库 1.mysqldump 命令语法: 使用 mysqldump 命令备份一个数据库的语法格式如下: 使用 mysqldump 命令备份一个数据库中表的语法格式如下: 2.参数: 实例: 先确保数据库服务启动的情况下,创建shell脚本

    2024年02月16日
    浏览(40)
  • 【运维】mysql与mongo的自动备份脚本

    关于mysql和mongo的自动备份脚本,网上一搜一大堆,都不够简洁,这里写了足够简单的版本。方便拓展和维护。 mysql自动备份脚本 mongo自动备份脚本   使用参考:   0. 确保mysql client 和 mongodump工具存在。 1. 存放至 /data/auto_back/ 2. 修改bak_mongo.sh与bak_sql.sh脚本的信息,比如备份路

    2024年02月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包