视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
mysql定时数据备份工具(c#)
2020-11-09 08:30:06 责编:小采
文档

此博文的出处 为 http://blog.csdn.net/zhujunxxxxx/article/details/40124773zhujunxxxxx@163.com ,如有问题请联系作者 为了确保数据的安全,我们往往要对数据进行备份。但是为了减少我们的工作量,我写了一个简单的数据备份工具,实现定时备份数据库。 其

此博文的出处 为 http://blog.csdn.net/zhujunxxxxx/article/details/40124773zhujunxxxxx@163.com,如有问题请联系作者

为了确保数据的安全,我们往往要对数据进行备份。但是为了减少我们的工作量,我写了一个简单的数据备份工具,实现定时备份数据库。

其实程序很简单,数据备份的工作就是几个mysql的命令而已。

先看看程序的运行界面


可以看到界面是十分的简单的

我们使用的是命令行来进行数据备份,所以我们的程序需要一个能够执行命令行的函数

/// 
 /// 执行Cmd命令
 /// 
 /// 要启动的进程的目录
 /// 要执行的命令
 public static void StartCmd(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");
 }

接下来是一个备份数据库的函数
public void bakup_db()
 {
 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();
 sbfileName.AppendFormat("{0}", DateTime.Now.ToShortDateString()).Replace("-", "").Replace(":", "").Replace(" ", "").Replace("/", "");
 String fileName = sbfileName.ToString();
 String directory = bakpath + fileName+".bak";

 sbcommand.AppendFormat("mysqldump --quick --host=localhost --default-character-set=utf8 --lock-tables --verbose --force --port=3306 --user={0} --password={1} {2} -r \"{3}\"", uname, upass, dbname, directory);
 String command = sbcommand.ToString();

 //获取mysqldump.exe所在路径
 //String appDirecroty = System.Windows.Forms.Application.StartupPath + "\\";
 StartCmd(appDirecroty, command);
 }
 catch (Exception ex)
 {
 }
 }

还原数据库
 public void recovery_db()
 {
 //string s = "mysql --port=端口号 --user=用户名 --password=密码 数据库名<还原文件所在路径";
 try
 {
 StringBuilder sbcommand = new StringBuilder();

 OpenFileDialog openFileDialog = new OpenFileDialog();

 if (openFileDialog.ShowDialog() == DialogResult.OK)
 {
 String directory = openFileDialog.FileName;

 //在文件路径后面加上""避免空格出现异常
 sbcommand.AppendFormat("mysql --host=localhost --default-character-set=utf8 --port=3306 --user={0} --password={1} {2}<\"{3}\"",uname,upass,dbname,directory);
 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)
 {
 StartCmd(appDirecroty, command);
 MessageBox.Show("数据库还原成功!");
 }
 }

 }
 catch (Exception ex)
 {
 MessageBox.Show("数据库还原失败!");
 }
 }

为了实现定时备份,我们使用的是一个Timer组件,来实现定时的数据备份
private void timer1_Tick(object sender, EventArgs e)
 {
 int h = DateTime.Now.Hour;
 if (h == hour)
 {
 bakup_db();
 }
 }

给出完整的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace MysqlBak
{
 public partial class Form1 : Form
 {
 //备份文件的路径
 public String bakpath="d:\\db_bak\\";
 public String appDirecroty = @"C:\Program Files (x86)\MySQL\MySQL Server 6.0\bin";
 public String uname = "root";
 public String upass = "root";
 public String dbname = "losscar_db";
 public int hour=18;
 public Form1()
 {
 InitializeComponent();
 timer1.Interval=1000*10;
 timer1.Start();
 txt_uname.Text = uname;
 txt_upass.Text = upass;
 txt_dbname.Text = dbname;
 txt_bakpath.Text = bakpath;
 txt_mysql.Text = appDirecroty;
 txt_hour.Text = hour.ToString();
 }

 /// 
 /// 执行Cmd命令
 /// 
 /// 要启动的进程的目录
 /// 要执行的命令
 public static void StartCmd(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");
 }

 private void btn_bak_Click(object sender, EventArgs e)
 {
 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();
 sbfileName.AppendFormat("{0}", DateTime.Now.ToShortDateString()).Replace("-", "").Replace(":", "").Replace(" ", "").Replace("/", "");
 String fileName = sbfileName.ToString();
 String directory = bakpath + fileName + ".bak";

 sbcommand.AppendFormat("mysqldump --quick --host=localhost --default-character-set=utf8 --lock-tables --verbose --force --port=3306 --user={0} --password={1} {2} -r \"{3}\"", uname, upass, dbname, directory);
 String command = sbcommand.ToString();

 //获取mysqldump.exe所在路径
 //String appDirecroty = System.Windows.Forms.Application.StartupPath + "\\";
 StartCmd(appDirecroty, command);

 MessageBox.Show(@"数据库已成功备份到 " + directory + " 文件中", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
 }
 catch (Exception ex)
 {
 MessageBox.Show("数据库备份失败!");
 }

 }

 public void bakup_db()
 {
 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();
 sbfileName.AppendFormat("{0}", DateTime.Now.ToShortDateString()).Replace("-", "").Replace(":", "").Replace(" ", "").Replace("/", "");
 String fileName = sbfileName.ToString();
 String directory = bakpath + fileName+".bak";

 sbcommand.AppendFormat("mysqldump --quick --host=localhost --default-character-set=utf8 --lock-tables --verbose --force --port=3306 --user={0} --password={1} {2} -r \"{3}\"", uname, upass, dbname, directory);
 String command = sbcommand.ToString();

 //获取mysqldump.exe所在路径
 //String appDirecroty = System.Windows.Forms.Application.StartupPath + "\\";
 StartCmd(appDirecroty, command);
 }
 catch (Exception ex)
 {
 }
 }

 private void btn_recovery_Click(object sender, EventArgs e)
 {
 recovery_db();
 }

 public void recovery_db()
 {
 //string s = "mysql --port=端口号 --user=用户名 --password=密码 数据库名<还原文件所在路径";
 try
 {
 StringBuilder sbcommand = new StringBuilder();

 OpenFileDialog openFileDialog = new OpenFileDialog();

 if (openFileDialog.ShowDialog() == DialogResult.OK)
 {
 String directory = openFileDialog.FileName;

 //在文件路径后面加上""避免空格出现异常
 sbcommand.AppendFormat("mysql --host=localhost --default-character-set=utf8 --port=3306 --user={0} --password={1} {2}<\"{3}\"",uname,upass,dbname,directory);
 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)
 {
 StartCmd(appDirecroty, command);
 MessageBox.Show("数据库还原成功!");
 }
 }

 }
 catch (Exception ex)
 {
 MessageBox.Show("数据库还原失败!");
 }
 }

 private void btn_edit_Click(object sender, EventArgs e)
 {
 
 if (btn_edit.Text=="修改")
 {
 txt_dbname.Enabled = true;
 txt_uname.Enabled = true;
 txt_upass.Enabled = true;
 txt_bakpath.Enabled = true;
 txt_mysql.Enabled = true;
 txt_hour.Enabled = true;
 btn_edit.Text = "确定";
 }
 else if (btn_edit.Text == "确定")
 {
 uname = txt_uname.Text;
 upass = txt_upass.Text;
 dbname = txt_dbname.Text;
 appDirecroty = txt_mysql.Text;
 bakpath = txt_bakpath.Text;
 hour = int.Parse(txt_hour.Text);

 MessageBox.Show("修改成功!");
 btn_edit.Text = "修改";

 txt_dbname.Enabled = false;
 txt_uname.Enabled = false;
 txt_upass.Enabled = false;
 txt_bakpath.Enabled = false;
 txt_mysql.Enabled = false;
 txt_hour.Enabled = false;
 }

 }

 private void timer1_Tick(object sender, EventArgs e)
 {
 int h = DateTime.Now.Hour;
 if (h == hour)
 {
 bakup_db();
 }
 }

 }
}

下载本文
显示全文
专题