Home >Database >Mysql Tutorial >mysql定时数据备份工具(c#)

mysql定时数据备份工具(c#)

WBOY
WBOYOriginal
2016-06-07 15:01:551274browse

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

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

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

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

先看看程序的运行界面

mysql定时数据备份工具(c#)

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

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

/// <summary>
        /// 执行Cmd命令
        /// </summary>
        /// <param name="workingDirectory">要启动的进程的目录
        /// <param name="command">要执行的命令
        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=密码 数据库名<br>
为了实现定时备份,我们使用的是一个Timer组件,来实现定时的数据备份


<pre class="brush:php;toolbar:false">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();
        }

        /// <summary>
        /// 执行Cmd命令
        /// </summary>
        /// <param name="workingDirectory">要启动的进程的目录
        /// <param name="command">要执行的命令
        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=密码 数据库名


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn