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. NC16496 [NOIP2014]飞扬的小鸟

    题目链接 题目 题目描述 为了简化问题,我们对游戏规则进行了简化和改编: \1. 游戏界面是一个长为n,高 为m的二维平面,其中有k个管道(忽略管道的宽度). \2. 小鸟始终在游戏界面内移动.小鸟从 ...

  2. 敏感信息泄露之如何隐藏IIS服务器名称和版本号

    1.问题说明 请求IIS部署的网站可以发现响应头中暴露了IIS服务器名称/版本号. 漏洞等级:中 2.解决方案 想办法隐藏掉这部分信息. 2.1 下载并安装微软官方IIS扩展插件 URL Rewrit ...

  3. Oracle开发人员守则

    以下为Oracle大师级语录: Oracle Database developers should follow is to do everything they can in SQL. What t ...

  4. 【Android 逆向】【攻防世界】easy-apk

    apk 安装到手机,随便输入点内容,提示错误 2. apk 拖入到jadx中看看 public class MainActivity extends AppCompatActivity { /* JA ...

  5. [攻防世界][江苏工匠杯]file_include

    打开靶机url,上来就是代码审计 <?php highlight_file(__FILE__); include("./check.php"); if(isset($_GET ...

  6. IDEA git分支回退指定的历史版本

    https://blog.csdn.net/woshi1226a/article/details/86664159

  7. 项目实战:Qt+OSG三维2D文字实时效果查看工具

    需求   OSG三维中2D文字的基本属性较多,方便实时查看效果,并出对应文本代码.   Demo      工具下载地址   CSDN免积分下载地址:https://download.csdn.net ...

  8. 【Azure 服务总线】Azure.Messaging.ServiceBus 多次发送消息报超时错误,是否可以配置重新发送?是否有内置重试机制?

    问题描述 使用 Azure Service Bus,提供应用程序之间松耦合的消息交换,但是有时候发送消息多次出现超时错误. A connection attempt failed because th ...

  9. 【Azure 事件中心】使用Kafka消费Azure EventHub中数据,遇见消费慢的情况可以如何来调节呢?

    问题描述 使用Kafka消费Azure EventHub中数据,遇见消费慢的情况可以如何来调节呢? 问题解答 查看Kafka Consumer的配置参数,其中最只要的一个参数为:max.poll.re ...

  10. go grpc流式和非流式的例子

    参考grpc官方:  https://grpc.io/docs/quickstart/go.html 或官方中文翻译: http://doc.oschina.net/grpc?t=60133 安装pr ...