C#实现对MySQL数据库的备份还原操作(调用MySql的工具mysqldump来实现)

时间:2024-04-04 19:29:39

一、备份MySQL数据库核心代码如下:

 //调用mysqldump备份mysql数据库的语句
            string backupsql = string.Format("mysqldump --host={0} --default-character-set=utf8 --lock-tables  --routines --force --port=3306 --user={1} --password={2} --quick  ", "MySQL数据库服务器", "数据库的账号", "数据库密码");
            //mysqldump的路径
            string mysqldump = "C:\\Program Files\\MySQL\\MySQL Server 5.6\\bin";
            //需要备份的数据库名称
            string strDB = "bj_devicegovern";
            //备份数据库的路径
            string strDBpath = @"C:\EquipmentMonitoring_BRH\MySQL5.6DBBackup\";

            //判断备份的数据库路径是否存在
            if (!Directory.Exists(strDBpath))
            {
                Directory.CreateDirectory(strDBpath);
            }

            //备份数据库
            if (!string.IsNullOrEmpty(strDB))
            {
                string filePath = strDBpath + DateTime.Now.ToString("yyyyMMdd_HHmmss") + strDB + ".sql";
                string cmd = backupsql + strDB + " >" + filePath;
                string result = RunCmd(mysqldump, cmd);

                MessageBox.Show("数据库备份成功!", "提示");

            }

二、还原MySQL数据库的核心代码如下:

//调用系统打开窗口控件选择文件路径
            OpenFileDialog ofd = new OpenFileDialog();
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                //调用mysqldump备份mysql数据库的语句
                string backupsql = string.Format("mysql --host={0} --default-character-set=utf8  --port=3306 --user={1} --password={2} ", "127.0.0.1", "root", "123456");
                //mysql的路径
                string mysqldump = "C:\\Program Files\\MySQL\\MySQL Server 5.6\\bin";
                //需要备份的数据库名称
                string strDB = "bj_devicegovern";

                string filePath = ofd.FileName;
                MessageBox.Show(filePath,"当前选择的路径1");

                string cmd = backupsql+ strDB + " < \"" + filePath + "\"";
                string result = RunCmd(mysqldump, cmd);

                MessageBox.Show("数据库恢复成功!", "MySQL", MessageBoxButtons.OK, MessageBoxIcon.Information);
               
            }

 三、调用MySQL的工具mysqldump工具执行命令核心代码如下:

/// <summary>
        /// MySQL的mysqldump程序执行函数
        /// </summary>
        /// <param name="mysqldumPath">mysqldum工具路径</param>
        /// <param name="strCmd">cmd命令</param>
        /// <returns></returns>
        private string RunCmd(string mysqldumPath, string strCmd)
        {
            System.Diagnostics.Process p = new System.Diagnostics.Process();
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.WorkingDirectory = mysqldumPath;
            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(strCmd);
            p.StandardInput.WriteLine("exit");
            return p.StandardError.ReadToEnd();
        }

四、实现每天定时自动备份数据库

 /// <summary>
        /// 定时备份数据库(这里指定在每天的下午5点15分准时备份数据库)
        /// </summary>
        private void FixedTimeBackupDB()
        {
            string lastRunTime = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
            DateTime t1 = Convert.ToDateTime(lastRunTime);
            string currentTime = DateTime.Now.ToString("yyyy-MM-dd");
            DateTime t2 = Convert.ToDateTime(currentTime);
            int result = DateTime.Compare(t1, t2);

            DateTime dtNow = DateTime.Now;
            if (result<=0 && DateTime.Now.Hour == 17 && DateTime.Now.Minute==15)
            {
               
                lastRunTime = DateTime.Now.ToString("yyyy-MM-dd");

                //开始备份数据
                MessageBox.Show("开始备份数据库=" + DateTime.Now.ToString(), "提示");
            }

        }

五、在窗口初始化的时候调用自动备份脚本

 public Form1()
        {
            InitializeComponent();

            //定时任务程序
            Task.Run(() =>
            {
                while (true)
                {
                    //每50秒休眠一次
                    Thread.Sleep(50000);

                    FixedTimeBackupDB();

                }
            });

        }

 

注意:需要使用者已经安装配置了MySql数据库,并且数据库存在需要备份的数据库;我这里使用的MySQL数据库是5.6版本的,默认安装的环境路径如下所示:

C#实现对MySQL数据库的备份还原操作(调用MySql的工具mysqldump来实现)

本项目源码链接如下:https://download.csdn.net/download/xiaochenxihua/11005123

 

参考链接:https://www.jb51.net/article/135724.htm

                  https://www.cnblogs.com/chenzehe/archive/2009/05/10/1453621.html

                  http://www.cnblogs.com/xielong/p/9383058.html