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备份还原工具的更多相关文章

  1. (4.8)mysql备份还原——binlog查看工具之show binlog的使用

    (4.8)mysql备份还原——binlog查看工具之mysqlbinlog及show binlog的使用 关键词:show binlog,mysql binlog查看,二进制文件查看,binlog查 ...

  2. (4.3)mysql备份还原——mysql备份策略

    (4.3)mysql备份还原——mysql备份策略 1.指定备份策略时需要考虑的点 [1.1]备份周期:2次备份间隔时长 [1.2]备份方式:在备份周期中,使用什么备份方式.备份模式 [1.3]实现方 ...

  3. 数据库备份还原工具EMS SQL Angel for SQL Server发布1.3版本

    EMS公司,是专门从事企业数据库以及内置于多层次客户服务器结构自动化开发.其EMS SQL Angel for SQL Server工具,便是SQL Servers数据库数据备份还原工具,并且还能使用 ...

  4. 【实用Windows双系统一键备份还原工具】Winclone Pro for Mac

    [简介] 今天和大家分享最新的 Winclone Pro 7.3.3 Mac 版本,这是一款Mac上强大易用的Windows分区备份还原工具,类似于Windows上的一键Ghost,能够将 PC 上的 ...

  5. (4.5)mysql备份还原——深入解析二进制日志(1)binlog的3种工作模式与配置

    (4.5)mysql备份还原——深入解析二进制日志(binlog) 关键词:二进制日志,binlog日志 0.建议 (1)不建议随便去修改binlog格式(数据库级别) (2)binlog日志的清理 ...

  6. (4.1)mysql备份还原——mysql常见故障

    (4.1)mysql备份还原——mysql常见故障 1.常见故障类型 在数据库环境中,常见故障类型: 语句失败,用户进程失败,用户错误 实例失败,介质故障,网络故障 其中最严重的故障主要是用户错误和介 ...

  7. Linux系统备份还原工具2(TAR/压缩工具)

    相比DD备份还原工具,TAR压缩还原工具更加小巧和灵活,但是不能备份MBR.当然可以通过重新安装GRUB来解决MBR的这一问题.同时,TAR的做法也是官方推荐的. 注意:一个硬盘启动时最新经过MBR( ...

  8. (4.14)mysql备份还原——mysql物理热备工具之ibbackup

    关键词:mysql热备工具,ibbackup,mysql物理备份工具 1. 准备 ibbackup 是 InnoDB 提供的收费工具,它支持在线热备 InnoDB 数据,主要有以下特性: * Onli ...

  9. MySQL备份还原——mysqldump工具介绍

    mysqldump是一款MySQL逻辑备份的工具,他将数据库里面的对象(表)导出成SQL脚本文件.有点类似于SQL SEVER的"任务-生成脚本"的逻辑备份功能.mysqldump ...

  10. Percona XtraBackup 关于 MySQL备份还原的详细测试

    一. Percona XtraBackup 的优点. (1)无需停止数据库进行InnoDB热备: (2)增量备份MySQL: (3)流压缩传输到其它服务器: (4)在线移动表: (5)能够比较容易地创 ...

随机推荐

  1. 开年喜报!Walrus成功入选CNCF云原生全景图

    近日,数澈软件 Seal (以下简称"Seal")旗下开源应用管理平台 Walrus 成功入选云原生计算基金会全景图(CNCF Landscape)并收录至 "App D ...

  2. win32 - IFileDialog接口的使用

    官方示例: CommonFileDialogModes.cpp 如果我们想要自己创建一个通用的文件对话框,则可以使用IFileOpenDialog接口,代码参考: HRESULT BasicFileO ...

  3. 学会了MySql高级查询让你在工作中游刃有余

    一.单元概述 通过本章的学习能够理解MySQL数据库中分组查询的含义,掌握常用分组函数的使用,掌握GROUP BY子句的使用规则,掌握分组后数据结果的条件过滤,掌握SELECT语句执行过程,理解子查询 ...

  4. 【Azure Function App】如何修改Azure函数应用的默认页面呢?

    问题描述 当在Azure中创建了一个函数应用(Function App)后,访问默认URL会得到一个默认的页面.是否有办法修改这个默认页面呢? 问题解答 在之前的博文中,介绍了修改App Servic ...

  5. 回顾 2023,NebulaGraph 的这一年的变化

    一年又过去了,感谢你和 NebulaGraph 一起又走过一个春夏秋冬.在这 365 天里,我们一起见证了 214 个 commit 带来的 NebulaGraph 3 个中版本的上线,它们分别是 v ...

  6. [Linux] ubuntu系统使用zfs记录

    关于zfs 之前从B站视频里面了解到了btrfs这个文件系统,说是能够实现cow,然后我第一时间觉得这是个极好的特性,结果后来才发现,使用的时候并不多,而且只能通过cp --reflink的方式使用, ...

  7. 为什么带NOLOCK的查询语句还会造成阻塞

    背景 客户反映HIS数据库在11点出现了长时间的阻塞,直到手动KILL掉阻塞的源头.请我们协助分析原因,最终定位到.NET程序中使用的SqlDataReader未正常关闭导致. 现象 登录SQL专家云 ...

  8. jenkins 上传文件参数

    注意:文件参数不支持Jenkins流水线 文件上传以后会上传至 workspace 里对应的project下面,但是文件会被重命名为File location(设置路径)输入库的值, 如果在jenki ...

  9. Learning by teaching --- 费曼学习法

    世界上存在成千上万种学习法,如果上天只让我掌握一种,那一定就是"费曼学习法". 介绍 费曼学习法是由诺贝尔物理学奖获得者理查德·费曼提出的一种学习方法,其核心思想是将所学内容用自己 ...

  10. MySql学习之初识SQLyog

    •SQLyog安装与配置 [安装包,提取码:w6sj] [安装教程,提取码:cwqu] •MySQL的语法规范 不区分大小写,但建议关键字大写,表名.列名小写 每条命令最好用分号结尾 每条命令根据需要 ...