mysql定時資料備份工具(c#)

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   ar   使用   for   

此博文的出處 為 http://blog.csdn.net/zhujunxxxxx/article/details/40124773如果進行轉載請註明出處。本文作者原創,郵箱[email protected],如有問題請聯絡作者

為了確保資料的安全,我們往往要對資料進行備份。但是為了減少我們的工作量,我寫了一個簡單的資料備份工具,實現定時備份資料庫。

其實程式很簡單,資料備份的工作就是幾個mysql的命令而已。

先看看程式的運行介面


可以看到介面是十分的簡單的

我們使用的是命令列來進行資料備份,所以我們的程式需要一個能夠執行命令列的函數

/// <summary>        /// 執行Cmd命令        /// </summary>        /// <param name="workingDirectory">要啟動的進程的目錄</param>        /// <param name="command">要執行的命令</param>        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();        }        /// <summary>        /// 執行Cmd命令        /// </summary>        /// <param name="workingDirectory">要啟動的進程的目錄</param>        /// <param name="command">要執行的命令</param>        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("Database Backup失敗!");            }        }        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();            }        }    }}



mysql定時資料備份工具(c#)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.