此博文的出处 为 http://blog.csdn.net/zhujunxxxxx/article/details/40124773zhujunxxxxx@163.com ,如有问题请联系作者 为了确保数据的安全,我们往往要对数据进行备份。但是为了减少我们的工作量,我写了一个简单的数据备份工具,实现定时备份数据库。 其
此博文的出处 为 http://blog.csdn.net/zhujunxxxxx/article/details/40124773zhujunxxxxx@163.com,如有问题请联系作者
为了确保数据的安全,我们往往要对数据进行备份。但是为了减少我们的工作量,我写了一个简单的数据备份工具,实现定时备份数据库。
其实程序很简单,数据备份的工作就是几个mysql的命令而已。
先看看程序的运行界面
可以看到界面是十分的简单的
我们使用的是命令行来进行数据备份,所以我们的程序需要一个能够执行命令行的函数
/// /// 执行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=密码 数据库名
为了实现定时备份,我们使用的是一个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=密码 数据库名