Python tk dos命令备份mysql数据库

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 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路径配置到环境变量里,我这里就不说了。网上一大堆......

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
9月前
常用DOS命令操作总结
以上所述为常用DOS命令操作,可以帮助用户在计算机操作系统中完成常见任务。这些命令的掌握和熟练运用能对于提高工作效率及解决一些常见问题有很大帮助。新手使用时可通过输入“command /?”(如:`ipconfig /?`)查看命令详细用法和参数说明。慢慢熟悉这些命令,你会发现它们在日常操作中具有很高的实用性。
328 20
|
7月前
|
存储 Oracle 关系型数据库
oracle数据恢复—oracle数据库执行错误truncate命令的数据恢复案例
oracle数据库误执行truncate命令导致数据丢失是一种常见情况。通常情况下,oracle数据库误操作删除数据只需要通过备份恢复数据即可。也会碰到一些特殊情况,例如数据库备份无法使用或者还原报错等。下面和大家分享一例oracle数据库误执行truncate命令导致数据丢失的数据库数据恢复过程。
|
9月前
|
SQL 数据可视化 IDE
开发数据库不想写命令?YashanDB Developer Center 帮你轻松搞定
YashanDB Developer Center(YDC)是一款可视化的数据库开发工具,专为提升数据库开发效率而设计。它通过图形化对象管理让数据库对象清晰可见,提供智能SQL编辑器支持语法高亮与自动补全,实现PL调试的图形化操作,帮助快速定位问题。此外,操作记录可追溯,多端灵活部署,适配多种场景。无论是中大型企业研发团队,还是不熟悉命令行的业务开发者,YDC都能显著优化开发体验,堪称YashanDB的“可视化IDE”。
|
10月前
|
SQL 分布式计算 数据库
【YashanDB 知识库】Hive 命令工具 insert 崖山数据库报错
【YashanDB 知识库】Hive 命令工具 insert 崖山数据库报错
|
Java Windows
JAVA 常用的 DOS 命令
【10月更文挑战第15天】DOS 命令是 Java 开发中不可或缺的工具,掌握这些命令可以提高开发效率和操作便利性。
251 63
|
10月前
|
SQL 分布式计算 数据库
【YashanDB知识库】Hive 命令工具insert崖山数据库报错
【YashanDB知识库】Hive 命令工具insert崖山数据库报错
|
10月前
|
存储 NoSQL MongoDB
微服务——MongoDB常用命令1——数据库操作
本节介绍了 MongoDB 中数据库的选择、创建与删除操作。使用 `use 数据库名称` 可选择或创建数据库,若数据库不存在则自动创建。通过 `show dbs` 或 `show databases` 查看所有可访问的数据库,用 `db` 命令查看当前数据库。注意,集合仅在插入数据后才会真正创建。数据库命名需遵循 UTF-8 格式,避免特殊字符,长度不超过 64 字节,且部分名称如 `admin`、`local` 和 `config` 为系统保留。删除数据库可通过 `db.dropDatabase()` 实现,主要用于移除已持久化的数据库。
694 0
|
10月前
|
搜索推荐
课时4:常用DOS命令
今天给大家带来分享是常用的DOS命令,以及如何使用命令,其主要分为以下七部分。 1.DIR 查看当前目录下的所有文件(夹) 2.CD 进入到指定的目录 3.“.”表示当前目录“..”表示上一级目录 4.方向键查看历史记录,tab 键自动补全命令 5.md 创建一个目录, RD 删除一个目录 6.del 删除一个文件, cls 清除屏幕 7.命令的语法
297 0
|
11月前
|
SQL 关系型数据库 MySQL
Python中使用MySQL模糊查询的方法
本文介绍了两种使用Python进行MySQL模糊查询的方法:一是使用`pymysql`库,二是使用`mysql-connector-python`库。通过这两种方法,可以连接MySQL数据库并执行模糊查询。具体步骤包括安装库、配置数据库连接参数、编写SQL查询语句以及处理查询结果。文中详细展示了代码示例,并提供了注意事项,如替换数据库连接信息、正确使用通配符和关闭数据库连接等。确保在实际应用中注意SQL注入风险,使用参数化查询以保障安全性。

推荐镜像

更多