MySQL备份还原工具

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
namespace lxw_mysql_helper
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
public String bakpath = @"D:\db_bak\";
public String appDirecroty = @"C:\Program Files\MySQL\MySQL Server 8.0\bin";
public String uname = "root";
public String port = "3306";
public String upass = "123456";
public String dbname = "test";
public String backupTime = "00:30";
private void frmMain_Load(object sender, EventArgs e)
{
txtName.Enabled = false;
txtPwd.Enabled = false;
txtport.Enabled = false;
txtBackUpPath.Enabled = false;
txtMysqlPath.Enabled = false;
txtBackUpTime.Enabled = false;
txtdbName.Enabled = false;
btnSelectBackUpPath.Enabled = false;
btnSelectMysqlPath.Enabled = false;
}
/// <summary>
/// 执行CMD命令
/// </summary>
/// <param name="workingDirectory">要启动的进程的目录</param>
/// <param name="command">要执行的命令</param>
public static void RunCMD(String workingDirectory, String command)
{
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.WorkingDirectory = workingDirectory;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.WriteLine(command);
p.StandardInput.WriteLine("exit");
}
/// <summary>
/// 备份数据库
/// </summary>
public void bakup_db(string manual = "")
{
try
{
//String command = "mysqldump --quick --host=localhost --default-character-set=gb2312 --lock-tables --verbose --force --port=端口号 --user=用户名 --password=密码 数据库名 -r 备份到的地址";
//构建执行的命令
StringBuilder sbcommand = new StringBuilder();
StringBuilder sbfileName = new StringBuilder();
if (manual == "manual")
{
sbfileName.AppendFormat("manual_" + dbname + "_{0}", DateTime.Now.ToString("yyyyMMddHHmmss"));
}
else
{
sbfileName.AppendFormat("auto_" + dbname + "_{0}", DateTime.Now.ToString("yyyyMMddHHmm"));
}
String fileName = sbfileName.ToString();
//检查是否存在文件夹
if (false == System.IO.Directory.Exists(bakpath))
{
System.IO.Directory.CreateDirectory(bakpath);
}
String directory = bakpath + fileName + ".bak";
//判断文件是否存在
if (System.IO.File.Exists(directory) == true)
{
return;
}
sbcommand.AppendFormat("mysqldump --quick --host=localhost --default-character-set=utf8 --lock-tables --verbose --force --port={4} --user={0} --password={1} {2} -r \"{3}\"", uname, upass, dbname, directory, port);
String command = sbcommand.ToString();
ShowLog("备份命令:" + command);
//获取mysqldump.exe所在路径
//String appDirecroty = System.Windows.Forms.Application.StartupPath + "\\";
RunCMD(appDirecroty, command);
ShowLog(@"备份成功,路径:" + directory);
}
catch (Exception ex)
{
ShowErrorLog("数据库备份失败:" + ex.Message);
// MessageBox.Show("数据库备份失败:" + ex.Message);
}
}
/// <summary>
/// 还原数据库
/// </summary>
public void recovery_db()
{
//string s = "mysql --port=端口号 --user=用户名 --password=密码 数据库名<还原文件所在路径";
try
{
StringBuilder sbcommand = new StringBuilder();
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.InitialDirectory = bakpath;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
String directory = openFileDialog.FileName;
//在文件路径后面加上""避免空格出现异常
sbcommand.AppendFormat("mysql --host=localhost --default-character-set=utf8 --port={4} --user={0} --password={1} {2}<\"{3}\"", uname, upass, dbname, directory, port);
String command = sbcommand.ToString();
//获取mysql.exe所在路径
//String appDirecroty = System.Windows.Forms.Application.StartupPath + "\\";
DialogResult result = MessageBox.Show("您是否真的想覆盖以前的数据库吗?那么以前的数据库数据将丢失!!!", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (result == DialogResult.Yes)
{
ShowLog("还原命令:" + command);
RunCMD(appDirecroty, command);
ShowLog("数据库还原成功");
MessageBox.Show("数据库还原成功!");
}
}
}
catch (Exception ex)
{
ShowErrorLog("数据库还原失败:" + ex.Message);
MessageBox.Show("数据库还原失败:" + ex.Message);
}
}
private void btnBackUp_Click(object sender, EventArgs e)
{
bakup_db("manual");
}
private void btnRecovery_Click(object sender, EventArgs e)
{
recovery_db();
}
private void btnSelectMysqlPath_Click(object sender, EventArgs e)
{
FolderBrowserDialog path = new FolderBrowserDialog();
if (!string.IsNullOrEmpty(txtMysqlPath.Text))
{
path.SelectedPath = txtMysqlPath.Text;
}
path.ShowDialog();
txtMysqlPath.Text = path.SelectedPath;
}
private void btnSelectBackUpPath_Click(object sender, EventArgs e)
{
FolderBrowserDialog path = new FolderBrowserDialog();
if (!string.IsNullOrEmpty(txtBackUpPath.Text))
{
path.SelectedPath = txtBackUpPath.Text;
}
path.ShowDialog();
txtBackUpPath.Text = path.SelectedPath;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (DateTime.Now.ToString("HH:mm") == backupTime)
{
bakup_db();
}
}
void ShowLog(string log)
{
rtxtShow.AppendText(log + "\r\n");
}
void ShowErrorLog(string log)
{
//高亮显示
rtxtShow.SelectionStart = rtxtShow.Text.Length;
rtxtShow.SelectionLength = log.Length;
rtxtShow.SelectionColor = Color.FromName("Red");
rtxtShow.AppendText(log + "\r\n");
}
private void btnEdit_Click(object sender, EventArgs e)
{
if (btnEdit.Text == "修改")
{
txtName.Enabled = true;
txtPwd.Enabled = true;
txtport.Enabled = true;
txtBackUpPath.Enabled = true;
txtMysqlPath.Enabled = true;
txtdbName.Enabled = true;
txtBackUpTime.Enabled = true;
btnSelectBackUpPath.Enabled = true;
btnSelectMysqlPath.Enabled = true;
btnEdit.Text = "确定";
}
else if (btnEdit.Text == "确定")
{
uname = txtName.Text;
upass = txtPwd.Text;
dbname = txtdbName.Text;
appDirecroty = txtMysqlPath.Text;
bakpath = txtBackUpPath.Text;
port = txtport.Text;
backupTime = txtBackUpTime.Text;
DateTime temp;
if (!DateTime.TryParse(backupTime, out temp))
{
ShowLog("备份时间格式错误,重置时间为00:30");
txtBackUpTime.Text = "00:30";
backupTime = txtBackUpTime.Text;
}
ShowLog("修改成功!");
MessageBox.Show("修改成功!");
btnEdit.Text = "修改";
txtName.Enabled = false;
txtPwd.Enabled = false;
txtport.Enabled = false;
txtBackUpPath.Enabled = false;
txtMysqlPath.Enabled = false;
txtBackUpTime.Enabled = false;
txtdbName.Enabled = false;
}
}
}
}
MySQL备份还原工具的更多相关文章
- (4.8)mysql备份还原——binlog查看工具之show binlog的使用
(4.8)mysql备份还原——binlog查看工具之mysqlbinlog及show binlog的使用 关键词:show binlog,mysql binlog查看,二进制文件查看,binlog查 ...
- (4.3)mysql备份还原——mysql备份策略
(4.3)mysql备份还原——mysql备份策略 1.指定备份策略时需要考虑的点 [1.1]备份周期:2次备份间隔时长 [1.2]备份方式:在备份周期中,使用什么备份方式.备份模式 [1.3]实现方 ...
- 数据库备份还原工具EMS SQL Angel for SQL Server发布1.3版本
EMS公司,是专门从事企业数据库以及内置于多层次客户服务器结构自动化开发.其EMS SQL Angel for SQL Server工具,便是SQL Servers数据库数据备份还原工具,并且还能使用 ...
- 【实用Windows双系统一键备份还原工具】Winclone Pro for Mac
[简介] 今天和大家分享最新的 Winclone Pro 7.3.3 Mac 版本,这是一款Mac上强大易用的Windows分区备份还原工具,类似于Windows上的一键Ghost,能够将 PC 上的 ...
- (4.5)mysql备份还原——深入解析二进制日志(1)binlog的3种工作模式与配置
(4.5)mysql备份还原——深入解析二进制日志(binlog) 关键词:二进制日志,binlog日志 0.建议 (1)不建议随便去修改binlog格式(数据库级别) (2)binlog日志的清理 ...
- (4.1)mysql备份还原——mysql常见故障
(4.1)mysql备份还原——mysql常见故障 1.常见故障类型 在数据库环境中,常见故障类型: 语句失败,用户进程失败,用户错误 实例失败,介质故障,网络故障 其中最严重的故障主要是用户错误和介 ...
- Linux系统备份还原工具2(TAR/压缩工具)
相比DD备份还原工具,TAR压缩还原工具更加小巧和灵活,但是不能备份MBR.当然可以通过重新安装GRUB来解决MBR的这一问题.同时,TAR的做法也是官方推荐的. 注意:一个硬盘启动时最新经过MBR( ...
- (4.14)mysql备份还原——mysql物理热备工具之ibbackup
关键词:mysql热备工具,ibbackup,mysql物理备份工具 1. 准备 ibbackup 是 InnoDB 提供的收费工具,它支持在线热备 InnoDB 数据,主要有以下特性: * Onli ...
- MySQL备份还原——mysqldump工具介绍
mysqldump是一款MySQL逻辑备份的工具,他将数据库里面的对象(表)导出成SQL脚本文件.有点类似于SQL SEVER的"任务-生成脚本"的逻辑备份功能.mysqldump ...
- Percona XtraBackup 关于 MySQL备份还原的详细测试
一. Percona XtraBackup 的优点. (1)无需停止数据库进行InnoDB热备: (2)增量备份MySQL: (3)流压缩传输到其它服务器: (4)在线移动表: (5)能够比较容易地创 ...
随机推荐
- Vue+SpringBoot+ElementUI实战学生管理系统-8.班级管理模块
1.章节介绍 前一篇介绍了专业管理模块,这一篇编写班级管理模块,需要的朋友可以拿去自己定制.:) 2.获取源码 源码是捐赠方式获取,详细请QQ联系我 :)! 3.实现效果 班级列表 修改班级 4.模块 ...
- 图文并茂之AES加密
本文改编自:http://www.sohu.com/a/198681357_505794 假设有一个发送方在向接收方发送消息.如果没有任何加密算法,接收方发送的是一个明文消息:"我是小灰&q ...
- 【CVE-2024-21626】容器逃逸漏洞修复
哈喽大家好,我是咸鱼. 好久不见,最近有一个很火的 CVE--runc 容器逃逸漏洞.年前的时候我们已经在测试环境进行了相关操作打算年后线上进行修复. 因为今天咸鱼才开工,所以文章也就拖到了现在 漏洞 ...
- windows 上 ffmpeg 库的安装
真复杂啊 安装 ffmpeg 库有两种途径,一种是自己下载源码再去编译,另一种是使用 vcpkg 自动安装 一般情况下,第二种是最简单方便的,但是如果你需要使用 ffmpeg 的特定历史版本,那就有点 ...
- zookeeper运行时dos窗口一闪而过
错误:从官网下载zookeeper解压到本地之后,鼠标双击运行zkServer.cmd文件,dos窗口一闪而过,看不到错误原因: 解决方法:通过dos窗口执行zkServer.cmd文件,对应的错误信 ...
- 浅谈errgroup的使用以及源码分析
本文讲解的是golang.org/x/sync这个包中的errgroup 1.errgroup 的基础介绍 学习过 Go 的朋友都知道 Go 实现并发编程是比较容易的事情,只需要使用go关键字就可以开 ...
- 【Azure 应用服务】查看App Service for Linux上部署PHP 7.4 和 8.0时,所使用的WEB服务器是什么?
问题描述 如何查看PHP应用部署到App Service后,Azure上面使用的应用服务器是什么呢?因为App Service支持两种操作系统,Windows 和 Linux.在Windows中,使用 ...
- harbor 安装
下载地址: https://github.com/goharbor/harbor/releases?page=1 下载了多个版本,发现仅v1.10.17版本支持GC清理,所以这里安装的v1.10.17 ...
- 线上RocktMQ重复投递半事务消息故障排查
1. 故障现象 2020-11-18 10:40开始,业务线反馈线上收到大量的重复MQ半事务消息,导致容器资源消耗急剧攀升,经查看MQ日志,发现broker-b的Master服务,报出大量半事务消息回 ...
- 整数输入框 InputNumberIntZen.vue 只能输入整数 不能输入.等其他字符
这版的输入限制堪称完美 perfect! 20230712 更新 加入 onBlurHandle 如果输入的02 失焦的时候 变成2 <!--数字输入框 只能输入数字 整型 InputNumbe ...