加入收藏 设为首页 站点地图
当前位置:网络知识

通过c#编写程序备份与恢复mysql数据库注意事项

作者:Benjamin Liu 2013/5/31 22:42:11

通过c#编写程序备份与恢复mysql数据库注意事项
mysql被广泛用于中小型网站程序中,对于网站来说,数据的安全是非常重要的,由于可能会有病毒的入侵或硬件的损坏,都可能导致数据的丢失,会给网站带来损失或麻烦。下面介绍网站建设中mysql数据库备份与恢复注意事项。
1.通过mysqldump工具进行备份
mysqldump使用方法:mysqldump [OPTIONS] database [tables],对于有哪些options,可以通过执行mysqldump --help来获取。常见的options有:
--add-locks   
在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(为了使得更快地插入到MySQL)。   
--add-drop-table   
在每个create语句之前增加一个drop table。   
--allow-keywords   
允许创建是关键词的列名字。这由表名前缀于每个列名做到。   
-c, --complete-insert   
使用完整的insert语句(用列名字)。   
-C, --compress   
如果客户和服务器均支持压缩,压缩两者间所有的信息。   
--delayed   
用INSERT DELAYED命令插入行。   
-e, --extended-insert   
使用全新多行INSERT语法。(给出更紧缩并且更快的插入语句)   
-#, --debug[=option_string]   
跟踪程序的使用(为了调试)。   
--help   
显示一条帮助消息并且退出。   
--fields-terminated-by=...   
    
--fields-enclosed-by=...   
    
--fields-optionally-enclosed-by=...   
    
--fields-escaped-by=...   
    
--fields-terminated-by=...   
这些选择与-T选择一起使用,并且有相应的LOAD DATA INFILE子句相同的含义。   
LOAD DATA INFILE语法。   
-F, --flush-logs   
在开始导出前,洗掉在MySQL服务器中的日志文件。   
-f, --force,   
即使我们在一个表导出期间得到一个SQL错误,继续。   
-h, --host=..   
从命名的主机上的MySQL服务器导出数据。缺省主机是localhost。   
-l, --lock-tables.   
为开始导出锁定所有表。   
-t, --no-create-info   
不写入表创建信息(CREATE TABLE语句)   
-d, --no-data   
不写入表的任何行信息。如果你只想得到一个表的结构的导出,这是很有用的!   
--opt   
同--quick --add-drop-table --add-locks --extended-insert --lock-tables。   
应该给你为读入一个MySQL服务器的尽可能最快的导出。   
-pyour_pass, --password[=your_pass]   
与服务器连接时使用的口令。如果你不指定“=your_pass”部分,mysqldump需要来自终端的口令。   
-P port_num, --port=port_num   
与一台主机连接时使用的TCP/IP端口号。(这用于连接到localhost以外的主机,因为它使用 Unix套接字。)   
-q, --quick   
不缓冲查询,直接导出至stdout;使用mysql_use_result()做它。
--routines,-R
导出存储过程以及自定义函数。
-S /path/to/socket, --socket=/path/to/socket   
与localhost连接时(它是缺省主机)使用的套接字文件。   
-T, --tab=path-to-some-directory   
对于每个给定的表,创建一个table_name.sql文件,它包含SQL CREATE 命令,和一个table_name.txt文件,它包含数据。 注意:这只有在mysqldump运行在mysqld守护进程运行的同一台机器上的时候才工作。.txt文件

的格式根据--fields-xxx和--lines--xxx选项来定。   
-u user_name, --user=user_name   
与服务器连接时,MySQL使用的用户名。缺省值是你的Unix登录名。   
-O var=option, --set-variable var=option设置一个变量的值。可能的变量被列在下面。   
-v, --verbose   
冗长模式。打印出程序所做的更多的信息。   
-V, --version   
打印版本信息并且退出。   
-w, --where='where-condition'   
只导出被选择了的记录;注意引号是强制的!   
"--where=user='jimf'" "-wuserid>1" "-wuserid<1"  

常用的备份案例:
1).导出整个数据库(包括存储过程)
 mysqldump -h主机 -u 用户名 -p密码 -R 数据库名 > 导出的文件名    

2).导出一个表
 mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

3).导出一个数据库结构
  mysqldump -u用户名 -p密码 -d --add-drop-table smgp_apps_wcnc >d:\wcnc_db.sql

2.恢复数据
恢复有两种方法
1).直接使用mysql恢复方法mysql -u用户名 -p密码 数据库 < 文件.sql
2).使用source恢复方法,进入mysql>后,使用mysql>source 文件.sql
以上2种方法都可以恢复

如果能在服务器上进行备份操作,那么这样就可以对mysql备份与恢复了

3.如果是想把服务器上的数据库备份到本地机器,上面的方法还要将服务器上的文件下载到本地,操作起来有点麻烦,那么,可以通过编写c#代码完成这个操作。通过向cmd.exe发送mysqldump命令进行备份,关键代码如下:
            Process p = new Process();
            p.StartInfo.FileName = "cmd.exe";
            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(arguments);
            p.StandardInput.WriteLine("exit"); //一定要退出,否则WaitForExit()执行不下去
            p.WaitForExit();
            p.Close();
恢复采用同样的方法。

以上是通过c#编写程序备份与恢复mysql数据库,其中需要注意的地方是,备份使用的是mysqldump,但是恢复不是用这个工具,使用的是mysql或source。
这只是一种方法,还有其他方法的方法,比如直接备份和还原数据库文件(默认如C:\ProgramData\MySQL\MySQL Server 5.5\data\website)。

 

合肥开拓科技,为中小微企业提供软件开发,网站建设及网站推广等计算机软硬件及网络服务,详见http://www.kt00.com

相关新闻: