0

0

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

php中文网

php中文网

发布时间:2016-06-07 15:01:55

|

1441人浏览过

|

来源于php中文网

原创

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

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

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

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

先看看程序的运行界面

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

云点滴客户关系管理CRM OA系统
云点滴客户关系管理CRM OA系统

云点滴客户解决方案是针对中小企业量身制定的具有简单易用、功能强大、永久免费使用、终身升级维护的智能化客户解决方案。依托功能强大、安全稳定的阿里云平 台,性价比高、扩展性好、安全性高、稳定性好。高内聚低耦合的模块化设计,使得每个模块最大限度的满足需求,相关模块的组合能满足用户的一系列要求。简单 易用的云备份使得用户随时随地简单、安全、可靠的备份客户信息。功能强大的报表统计使得用户大数据分析变的简单,

下载

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

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

/// 
        /// 执行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();
            }
        }

    }
}



热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

8

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

8

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

6

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

1

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

17

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

18

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 815人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号