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点,如果是,则执行备份操作