Python tk dos命令备份mysql数据库

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Python tk dos命令备份mysql数据库

一、操作环境

1、python 3.7(个人感觉不是第2代就行)

2、tk pythom已经内置

3、pycharm 2020

4、SQLAlchemy     1.4.44

二、来个图提个神

三、上代码

import os
import tkinter
from tkinter import ttk, messagebox, filedialog
from framework.base.BaseConfig import BaseConfig
from framework.control.AdenButton import AdenButton
from framework.control.AdenCheckButton import AdenCheckButton
from framework.control.AdenEntry import AdenEntry
from framework.control.AdenLabel import AdenLabel
from framework.control.AdenMessageBox import AdenMessageBox
from framework.control.AdenTkPlugin import TkPlugin
from framework.pulgin.Tools import Tools
from operation.access.DBBackupAccess import DBBackupAccess
from operation.entity.DBBackupEntity import DBBackupEntity
class MySqlDBBackView():
    dbAccess = DBBackupAccess()
    action_type = "add"
    def getFrame(self, root, tab):
        self.note_book = tab
        self.frame = tkinter.Frame(root)
        frame_data_config = self.frame
        frame_data_config.configure(background=TkPlugin.background())
        frame_data_config.columnconfigure(1, weight=1)  # 设置第2列自动适应Frame 需要sitcky布局配合
        frame_data_config.columnconfigure(3, weight=1)  # 设置第4列自动适应Frame
        frame_data_config.rowconfigure(8, weight=1)
        # 第1行
        lable_sys_name = AdenLabel(frame_data_config, text="数据库类型:")
        lable_sys_name.grid(row=0, column=0, sticky=tkinter.E)
        self.com_database_type = ttk.Combobox(frame_data_config, state='readonly')  # 邮件名称 通过自定义控件实现 读取值和获取值都可以通过控件获取
        database_type = ('MySql', 'SQLSERVER')
        self.com_database_type['value'] = database_type
        self.com_database_type.grid(row=0, column=1, sticky=TkPlugin.sticky_all(), padx="6", pady="6", columnspan=3)
        self.com_database_type.current(0)
        # 第2行1列
        connection_string = AdenLabel(frame_data_config, text="数据库IP地址:", bg=TkPlugin.background())
        connection_string.grid(row=1, column=0, sticky=tkinter.E)
        self.txt_connection_ipaddress = AdenEntry(frame_data_config)
        self.txt_connection_ipaddress.grid(row=1, column=1, sticky=TkPlugin.sticky_all(), padx="6", pady="6")
        # 第2行2列
        connection_name = AdenLabel(frame_data_config, text="数据库名称:", bg=TkPlugin.background())
        connection_name.grid(row=1, column=2, sticky=tkinter.E)
        self.txt_connection_name = AdenEntry(frame_data_config)
        self.txt_connection_name.grid(row=1, column=3, sticky=TkPlugin.sticky_all(), padx="6", pady="6")
        #  第3行1列
        lable_smtp_user = AdenLabel(frame_data_config, text="用户名:", bg=TkPlugin.background())
        lable_smtp_user.grid(row=2, column=0, sticky=tkinter.E)
        self.txt_user_name = AdenEntry(frame_data_config)
        self.txt_user_name.grid(row=2, column=1, sticky=TkPlugin.sticky_all(), padx="6", pady="6")
        # 第3行2列
        lable_smtp_pass = AdenLabel(frame_data_config, text="密码:", bg=TkPlugin.background())
        lable_smtp_pass.grid(row=2, column=2, sticky=tkinter.E)
        self.txt_pass_word = AdenEntry(frame_data_config)
        self.txt_pass_word.grid(row=2, column=3, sticky=TkPlugin.sticky_all(), padx="6", pady="6")
        # 第4行1
        lable_dbback_path = AdenLabel(frame_data_config, text="端口号:", bg=TkPlugin.background())
        lable_dbback_path.grid(row=3, column=0, sticky=tkinter.E)
        self.txt_db_port = AdenEntry(frame_data_config)
        self.txt_db_port.grid(row=3, column=1, sticky=TkPlugin.sticky_all(), padx="6", pady="6")
        # 第4行2
        lable_dbback_path = AdenLabel(frame_data_config, text="自动备份:", bg=TkPlugin.background())
        lable_dbback_path.grid(row=3, column=2, sticky=tkinter.E)
        self.ck_check_view = tkinter.IntVar()
        self.check_view = AdenCheckButton(frame_data_config, variable=self.ck_check_view, text="选中是自动", fg="#0081FF")
        self.check_view.grid(row=3, column=3, sticky=tkinter.W, padx="6", columnspan=2)
        # 第5行第1列
        lable_dbback_path = AdenLabel(frame_data_config, text="备份数量:", bg=TkPlugin.background())
        lable_dbback_path.grid(row=4, column=0, sticky=tkinter.E)
        self.txt_dbback_number = AdenEntry(frame_data_config)
        self.txt_dbback_number.grid(row=4, column=1, sticky=TkPlugin.sticky_all(), padx="6", pady="6")
        # 第5行第2列
        lable_dbback_path = AdenLabel(frame_data_config, text="备份时间:", bg=TkPlugin.background())
        lable_dbback_path.grid(row=4, column=2, sticky=tkinter.E)
        self.txt_dbback_timer = AdenEntry(frame_data_config)
        self.txt_dbback_timer.grid(row=4, column=3, sticky=TkPlugin.sticky_all(), padx="6", pady="6")
        # 第6行第1列
        lable_dbback_path = AdenLabel(frame_data_config, text="备份路径:", bg=TkPlugin.background())
        lable_dbback_path.grid(row=5, column=0, sticky=tkinter.E)
        self.txt_dbback_path = AdenEntry(frame_data_config)
        self.txt_dbback_path.grid(row=5, column=1, sticky=TkPlugin.sticky_all(), padx="6", pady="6")
        # 第6行第2列
        lable_dbback_path = AdenLabel(frame_data_config, text="目标邮件:", bg=TkPlugin.background())
        lable_dbback_path.grid(row=5, column=2, sticky=tkinter.E)
        self.txt_send_mail = AdenEntry(frame_data_config)
        self.txt_send_mail.grid(row=5, column=3, sticky=TkPlugin.sticky_all(), padx="6", pady="6")
        btnbackup = AdenButton(frame_data_config, text="备份", width=8, bg="#FF1493", command=lambda: self.run_backup())
        btnbackup.grid(row=9, column=2, sticky=tkinter.E, columnspan="2", padx="210")
        btnSave = AdenButton(frame_data_config, text="保存", width=8, command=lambda: self.db_config_save())
        btnSave.grid(row=9, column=2, sticky=tkinter.E, columnspan="2", padx="140")
        btnTest = AdenButton(frame_data_config, text="测试链接", bg="#FFA500", width=8,
                             command=lambda: self.db_config_test())
        btnTest.grid(row=9, column=2, sticky=tkinter.E, columnspan="2", padx="70")
        btnDelete = AdenButton(frame_data_config, text="关闭窗体", bg="#D9534F", width=8, command=lambda: self.forget())
        btnDelete.grid(row=9, column=3, sticky=tkinter.E)
        self.initialize_database_config()
        return self.frame
    def initialize_database_config(self):
        dict_result = self.dbAccess.query()
        if dict_result["result"]:
            entity = dict_result["datas"]
            if entity is None:
                self.action_type = "add"
                self.txt_dbback_path.SetValue(BaseConfig().ROOT_PATH + os.sep + "DBBackup")
            else:
                self.action_type = entity.backup_id
                self.com_database_type.set(entity.db_type)
                self.txt_connection_ipaddress.SetValue(entity.db_url)
                self.txt_connection_name.SetValue(entity.db_name)
                self.txt_user_name.SetValue(entity.db_user)
                self.txt_pass_word.SetValue(entity.db_pass)
                self.txt_db_port.SetValue( entity.db_port)
                self.txt_dbback_path.SetValue(entity.backup_path)
                self.txt_dbback_timer.SetValue(entity.backup_cycle)
                self.txt_dbback_number.SetValue(entity.backup_number)
                if entity.backup_auto.lower() == "true":
                    self.ck_check_view.set(1)
                else:
                    self.ck_check_view.set(0)
                self.txt_send_mail.SetValue(entity.target_mail)
        else:
            messagebox.showinfo('提示信息', '数据加载失败' + dict_result["datas"])
    def run_backup(self):
        db_type = self.com_database_type.get()
        server = self.txt_connection_ipaddress.GetValue()
        folder = self.txt_dbback_path.GetValue()
        user = self.txt_user_name.GetValue()
        pwd = self.txt_pass_word.GetValue()
        port= self.txt_db_port.GetValue()
        dbname= self.txt_connection_name.GetValue()
        folder=folder+os.sep+dbname+Tools.get_guid()+".sql"
        str_sql = "mysqldump -h {0} -P {1} -u {2} -p{3} --databases {4} > {5}".format(server, port, user, pwd, dbname,
                                                                                      folder)
        print(str_sql)
        os.system(str_sql)
        messagebox.showinfo('提示信息', '备份成功!!!')
    def db_config_save(self):
        entity = DBBackupEntity()
        entity.db_name = self.txt_connection_name.GetValue()
        entity.db_type = self.com_database_type.get()
        entity.db_user = self.txt_user_name.GetValue()
        entity.db_pass = self.txt_pass_word.GetValue()
        entity.db_url = self.txt_connection_ipaddress.GetValue()
        entity.db_port = self.txt_db_port.GetValue()
        entity.backup_path = self.txt_dbback_path.GetValue()
        entity.create_datetime = Tools.get_current_datetime()
        entity.backup_cycle = self.txt_dbback_timer.GetValue()
        entity.backup_number = self.txt_dbback_number.GetValue()
        if self.ck_check_view.get() == 1:
            entity.backup_auto = "true"
        else:
            entity.backup_auto = "false"
        entity.target_mail = self.txt_send_mail.GetValue()
        if self.action_type=="add":
            entity.backup_id = Tools.get_guid()
            dict_result = self.dbAccess.save(entity)
            if dict_result["result"]:
                messagebox.showinfo('提示信息', '保存成功!!!')
            else:
                messagebox.showinfo('提示信息', '保存失败,错误原因如下:' + dict_result["datas"])
        else:
            entity.backup_id = self.action_type
            dict_result = self.dbAccess.update(entity)
            if dict_result["result"]:
                messagebox.showinfo('提示信息', '保存成功!!!')
            else:
                messagebox.showinfo('提示信息', '保存失败,错误原因如下:' + dict_result["datas"])
        pass
    def db_config_test(self):
        """
        测试数据库链接
        :return:
        """
        db_type = self.com_database_type.get()
        db_conn_ipaddress = self.txt_connection_ipaddress.GetValue()
        db_conn_name = self.txt_connection_name.GetValue()
        db_user_name = self.txt_user_name.GetValue()
        db_pass_word = self.txt_pass_word.GetValue()
        dict_result = self.dbAccess.test_connection(db_type, db_conn_ipaddress, db_conn_name, db_user_name, db_pass_word)
        if dict_result["result"]:
            AdenMessageBox.show('连接成功!!!')
        else:
            AdenMessageBox.show('数据库链接不上,错误原因如下:'+ dict_result["datas"])
        pass
    def forget(self):
        self.note_book.forget(self.frame)

五、其实就是使用Mysql的备份语句备份的数据库

mysqldump -h 127.0.0.1 -P 3306 -u root -p123123 --databases yadinghao > D:\Freedom\DBBack\yadinghaoE72E3A1C-9EB4-11ED-B855-709CD1DEFC28.sql

mysqldump 个命令需要将mysql的bin路径配置到环境变量里,我这里就不说了。网上一大堆......

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
安全 网络安全 文件存储
思科设备巡检命令Python脚本大集合
【10月更文挑战第18天】
39 1
思科设备巡检命令Python脚本大集合
|
2月前
|
SQL 关系型数据库 MySQL
MySQL操作利器——mysql-connector-python库详解
MySQL操作利器——mysql-connector-python库详解
447 0
|
8天前
|
存储 定位技术 数据库
介绍一下数据库的备份和恢复策略
【10月更文挑战第21】介绍一下数据库的备份和恢复策略
|
10天前
|
Java Windows
JAVA 常用的 DOS 命令
【10月更文挑战第15天】DOS 命令是 Java 开发中不可或缺的工具,掌握这些命令可以提高开发效率和操作便利性。
33 3
|
14天前
|
Python
Python PDB命令介绍
【10月更文挑战第15天】 使用PDB的方式有两种,其中一种是在脚本中添加代码,不觉得这种方式比print好在哪里,所以这种方式此文不表。这里我们只学习PDB的命令行使用方式
31 4
|
1月前
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
20天前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
269 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
21天前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
49 1
|
29天前
|
NoSQL MongoDB 数据库
MongoDB是一个NoSQL数据库,有着多种不同的命令和操作。以下是一些常见的MongoDB命令:
一些常用的MongoDB命令,如数据库和集合的管理、数据的插入、查询、更新、删除以及聚合操作等。
19 1
|
19天前
|
机器学习/深度学习 缓存 Linux
python环境学习:pip介绍,pip 和 conda的区别和联系。哪个更好使用?pip创建虚拟环境并解释venv模块,pip的常用命令,conda的常用命令。
本文介绍了Python的包管理工具pip和环境管理器conda的区别与联系。pip主要用于安装和管理Python包,而conda不仅管理Python包,还能管理其他语言的包,并提供强大的环境管理功能。文章还讨论了pip创建虚拟环境的方法,以及pip和conda的常用命令。作者推荐使用conda安装科学计算和数据分析包,而pip则用于安装无法通过conda获取的包。
39 0