c#使用mysql进行备份还原

数据备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低。

引用类库

使用nuget安装dll程序包

MySql.Data.dll // 用于连接和操作MySQL数据库的.NET数据提供程序

MySqlbackup.dll // 用于备份mysql数据的库

nuget > MySql.Data.dll
nuget > MySqlbackup.dll

关键字

  • timer_Tick:计时器事件,每隔一段时间触发一次。
  • DateTime.Now:获取当前时间。
  • MySqlCommand:执行SQL语句的对象。
  • MySqlBackup:备份MySQL数据库的对象。

连接静态类

新建一个mysql静态类,连接字符串指定了数据库的名称,密码,用户名和服务器地址。我们可以使用这个连接对象来执行各种MySQL操作

// 定义 mysql 类
public static class mysql
{
    // 定义连接字符串
    public static string constr = "database=test;Password=密码;user ID=root;server=ip地址";
    // 定义 MySqlConnection 对象
    public static MySqlConnection conn = new MySqlConnection(constr);
}

constr 中,指定要连接的数据库名称、密码、用户名和服务器地址。这个连接字符串将在后续的代码中被使用。

conn 中,使用 MySqlConnection 类来创建一个 MySQL 数据库连接对象。这个对象将在后续的代码中被使用。

数据备份

备份数据库的代码。它会提示用户确认备份路径,并在用户确认后将数据库备份到指定路径

public void SqlBackups(out DialogResult result)
{
  MessageBox.Show(@"重要数据谨慎修改", @"Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  // 显示备份路径提示信息
  result = MessageBox.Show(@"备份路径默认在当前程序下", @"提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
  if(result == DialogResult.Yes)
  {
    // 获取当前时间并将斜杠替换为短横线
    string time = DateTime.Now.ToString("d").Replace("/", "-");
    // 设置备份文件路径
    string file = ".//mysql/" + time + "_test.sql";
    using(var cmd = new MySqlCommand())
    {
      using(MySqlBackup mb = new MySqlBackup(cmd))
      {
        // 设置数据库连接
        cmd.Connection = Util.conn;
        Util.conn.Open();
        // 导出数据库到文件
        mb.ExportToFile(file);
        Util.conn.Close();
        // 显示备份成功信息
        MessageBox.Show(@"已备份");
      }
    }
  }
}

数据还原

代码从文本框中获取文件路径,然后使用MySqlBackup类还原数据库。如果还原成功,将弹出一个消息框提示用户已还原。如果还原失败,将弹出一个消息框显示错误信息

string file = textBox1.Text;
if(file == "")
{
    MessageBox.Show("不能为空");
    return;
}
DialogResult result = MessageBox.Show("确定还原吗?", "还原", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if(result == DialogResult.Yes)
{
    try
    {
        using(MySqlCommand cmd = new MySqlCommand())
        {
            using(MySqlBackup mb = new MySqlBackup(cmd))
            {
                cmd.Connection = mysql.conn;
                mysql.conn.Open();
                //执行还原
                mb.ImportFromFile(file);
                mysql.conn.Close();
                MessageBox.Show("已还原");
            }
        }
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

定时备份

//winform
timer1.Interval = 1000; //代表一秒运行一次
timer1.Enabled = true; //启动

利用winform窗体 timer定时器控件

private void timer1_Tick(object sender, EventArgs e)
{
    if(booql)
    {
        booql = false;
        if(DateTime.Now.Hour == 10 && DateTime.Now.Minute == 00) //时间10点 
        {
            ////获取当前日期并将斜杠替换为短横线
            string time1 = System.DateTime.Now.ToString("d").Replace("/", "-");
            ////设置备份文件路径和名称
            string file = ".//mysql/" + time1 + "_test.sql";
            using(MySqlCommand cmd = new MySqlCommand())
            {
                using(MySqlBackup mb = new MySqlBackup(cmd))
                {
                    cmd.Connection = mysql.conn;
                    mysql.conn.Open();
                    ////将数据库备份到文件
                    mb.ExportToFile(file);
                    mysql.conn.Close();
                    MessageBox.Show("数据库已自动备份本地");
                }
            }
        }
    }
}

使用了计时器事件,每隔一段时间检查当前时间是否为10点,如果是,则执行备份操作

posted @ 2019-05-09 10:43  少年。  阅读(1153)  评论(0编辑  收藏  举报