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)能够比较容易地创 ...
随机推荐
- Linux进程通信 | 共享内存
一.共享内存是什么 在Linux系统中,共享内存是一种IPC(进程间通信)方式,它可以让多个进程在物理内存中共享一段内存区域. 这种共享内存区域被映射到多个进程的虚拟地址空间中,使得多个进程可以直接访 ...
- 单例模式五种实现方式以及在JDK中的体现
单例模式五种实现方式以及在JDK中的体现 一.五种实现方式 1.饿汉式 构造私有 提供一个静态私有的成员常量,类型就是单例类型,值是用私有构造创造出来的唯一实例 提供公共的静态方法获取上述的静态成员常 ...
- 实操开源版全栈测试工具RunnerGo安装(一)
Docker版安装文档 一.环境要求 1.1 部署服务器要求 操作系统:任何支持 Docker 的 Linux x86 CPU内存:最低要求 4C8G,推荐 8C16G 网络要求:可访问互联网 ...
- 【Android逆向】破解看雪9月算法破解第三题
这题的目标是算法还原,并写出注册机 1. 9月份算法第一题.apk 安装到手机 2. 随意输入账号密码,提示错误 3. apk拖入到jadx中 public native boolean regist ...
- 最简单的python判断是否是回文
def isNumberPalindrome(number): if isinstance(number, int): number = str(number) return number == nu ...
- vim创建sh文件自动生成头信息
>>> vim /etc/vimrc 或 vim ~/.vimrc " 这几个加不加都行 set tabstop=4 set softtabstop=4 set shift ...
- 【LeetCode贪心#07】分糖果(两个维度)
发糖果 力扣题目链接(opens new window) 老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分. 你需要按照以下要求,帮助老师给这些孩子分发糖 ...
- C++ 模板的笔记2
C++模板的笔记2 关于可变参函数模板借鉴了一部分笔记,感谢大佬 类模板中的嵌套 类模板可以嵌套其他类模板,就像普通类可以嵌套其他普通类一样.嵌套的类模板可以访问外部类模板的成员,包括私有成员. 示例 ...
- Java 数组嵌套
1 public static void main(String[] args) 2 { 3 int[] arr = new int[] {8,6,3,1,9,5,4,7}; 4 int[] inde ...
- C++ //常用查找算法 find //自定义类型需要重载 ==
1 //常用查找算法 find 2 #include<iostream> 3 #include<algorithm> 4 #include<functional> ...