帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:MySQL备份  备份  asp-net  asp  


可用于:

内容

1介绍

本文介绍了在 C# 或者 VB.Net 中备份/恢复MySQL数据库以及如何使用它的一些示例代码的工具( 库) 。 它是的替代方案。

使这个工具的另一个好处是,我们不必依赖两个小程序- MySqlDump.exe MySql.exe 来执行备份和恢复任务。 我们将对输出结果有更好的控制。

使用最常用的方法备份MySQL数据库的方法是使用英镑的MySqlDump.exe 和英镑的MySQL Workbench 。

收费 MySQL Workbench 对于开发者来说是好的,但是当客户或者最终用户到达时,推荐的方式是获取每个参数的预置,他们需要知道的是按下大按钮,所有的事情都完成。 使用 MySQL Workbench 作为备份工具对于客户端或者终端用户来说不是一个合适的解决方案。

另一方面,英镑不能用于网络应用程序。 由于大多数网站托管供应商禁止,英镑的将有助于建立基于web的备份工具。

2特性&依赖项

功能

  • MySQL数据库的备份和恢复
  • 可以在任何. NET 语言中使用。
  • 导出/从MemoryStream导入/导入
  • 条件行导出( 筛选表或者行)
  • 内部加密功能构建
  • 能够恢复到新的非现有数据库
  • 在导出和导入任务中都有进度报告。
  • 能够将行导出到不同的模式。 ( 插入,插入忽略,替换,在重复的密钥更新,更新)
  • 可以直接在 ASP.NET 或者 Web服务 中使用。

先决条件/依赖项

MySqlBackup.NET 是建立在 dot连接器/网络( mysql.data.dll ) 之上的。

  • 必须将这里DLL的引用添加到项目中,以便 MySqlBackup.NET 能够工作。
  • MySql.Data.DLL 由Oracle公司开发,授权使用GPL许可证 (http://www.gnu.org/licenses/old-licenses/gpl-2.0.html).

3更改日志记录

2.0.9.2 ( 8 2015年08月 )

  • 修正 Bug: 在未知条件中出现错误,从 information_schema.tables 中返回值 TALBE_ROWS,并将值转换错误转换为 System.Int64. ( 这里 Bug 在 2.0.9中引入) 。

V2.0.9 ( 19 2015年07月 )

  • 提高性能- 在 MySqlDatabase.cs 中修改 GetTotalRows()
  • 修改:ExportInfo.GetTotalRowsBeforeExport的默认值已经更改为"true"。 这是因为这段代码已经改变。 获取所有表的总行数所需的时间只有 1秒。
  • 修复 MySqlTable.cs 中的拼写错误: 第 38行- 用"插入"替换"insret"。
  • 修改"更新"导出模式的行为: 如果所有字段都是主键,则不会导出任何行。
  • 更新"重复密钥更新"导出模式的行为: 如果所有字段都是主键,导出行为将更改为"插入忽略"。

V2.0.8 ( 25 2015年月 )

  • 修复 Bug: 导出时间戳值时发生分析错误。 在增加导出时间分数支持之后出现这里问题。
  • 修改:在使用 RowsExportMode = OnDuplicateKeyUpdate 时,更改导出只包含主键的表的导出行为。

2.0.7.1 ( 26 2015年月 )

  • 已经更新次要智能感知。
  • 所有函数与 V2.0. 7 相同

V2.0.7 ( 25 2015年月 )

  • 新建ExportInfo选项- RowsExportMode
  • 新建ExportInfo选项- WrapWithinTransaction
  • 新建导出目标- 导出到字符串/文本
  • 输出到内存流时能够重置或者保持内存流位置。
  • 增加了对导出时间分数( 微秒)的支持。

V2.0.6 ( 17 2014年月 )

  • 修复 Bug: 导入过程中完成的百分比报告错误。

V2.0.5 ( 20 2014年月 )

  • 修正 Bug 后,1st 导出或者导入后,随后的新导出过程无法执行。
  • 添加功能- 可以直接从/导入/导入 MemoryStream 。
  • 添加功能- 可以更改导出过程的文档和页脚头。
  • 添加功能- 能够排除导出过程的表。

[ Full Change Log ]

4.background

本文假设你已经经熟悉了,连接器( MySql.Data.dll ),最少知识可以以执行四个基本操作 SELECTINSERTUPDATE<code>DELETE 如果你不是,你可以以阅读通过以及如何将 C# 连接到MySQL的说明: [ http://www.codeproject.com/Articles/43438/Connect-C-to-MySQL ]

5基本用法信息

使用 MySqlBackup.NET: 编码前添加这里语句

using MySql.Data.MySqlClient; 

简单导出示例

string constring = "server=localhost;user=root;pwd=qwerty;database=test;";string file = "C:backup.sql";using (MySqlConnection conn = new MySqlConnection(constring))
{
 using (MySqlCommand cmd = new MySqlCommand())
 {
 using (MySqlBackup mb = new MySqlBackup(cmd))
 {
 cmd.Connection = conn;
 conn.Open();
 mb.ExportToFile(file);
 conn.Close();
 }
 }
}

简单导入示例

string constring = "server=localhost;user=root;pwd=qwerty;database=test;";string file = "C:backup.sql";using (MySqlConnection conn = new MySqlConnection(constring))
{
 using (MySqlCommand cmd = new MySqlCommand())
 {
 using (MySqlBackup mb = new MySqlBackup(cmd))
 {
 cmd.Connection = conn;
 conn.Open();
 mb.ImportFromFile(file);
 conn.Close();
 }
 }
}

上面的例子将导出和导入一个带有默认选项的MySQL数据库。 有一些可以修改导出和导入行为的选项。 这些选项定义在:

  • MySqlBackup.ExportInfo
  • MySqlBackup.ImportInfo

自定义导出行为的示例:

  • 新建数据库
  • 只导出表的结构
  • 不导出数据行

示例代码:

string constring = "server=localhost;user=root;pwd=1234;database=test1;";string file = "Y:backup.sql";using (MySqlConnection conn = new MySqlConnection(constring))
{
 using (MySqlCommand cmd = new MySqlCommand())
 {
 using (MySqlBackup mb = new MySqlBackup(cmd))
 {
 cmd.Connection = conn;
 conn.Open();
 mb.ExportInfo.AddCreateDatabase = true;
 mb.ExportInfo.ExportTableStructure = true;
 mb.ExportInfo.ExportRows = false;
 mb.ExportToFile(file);
 }
 }
}

自定义导入行为的示例:

  • 导入到新的( 不存在) 数据库
  • 将新数据库的默认字符设置为 utf8

示例代码:

string constring = "server=localhost;user=root;pwd=1234;database=test1;";string file = "Y:backup.sql";using (MySqlConnection conn = new MySqlConnection(constring))
{
 using (MySqlCommand cmd = new MySqlCommand())
 {
 using (MySqlBackup mb = new MySqlBackup(cmd))
 {
 cmd.Connection = conn;
 conn.Open();
 mb.ImportInfo.TargetDatabase = "test2";
 mb.ImportInfo.DatabaseDefaultCharSet = "utf8";
 mb.ImportFromFile(file);
 }
 }
}

全 List 选项

选项数据类型默认值说明
TablesToBeExportedListList <字符串>空白只导出 List 中定义的表。
TablesToBeExportedDic字典 <字符串,字符串>空白只导出字典中定义的表。 键是指表的名称,值将被选择语句。 SELECT语句用于筛选行。 调整行的输出。例如:SELECT * FROM tableA,MembershipID = 1
RecordDumpTimebooltrue获取或者设置一个值,该值指示转储时间是否应记录在转储文件中。
EnableEncryptionboolfalse获取或者设置一个值,该值指示导出的转储文件是否应加密。
EncryptionPassword字符串空白设置用于加密导出的转储文件的密码。
AddCreateDatabaseboolfalse获取或者设置指示"创建数据库"的SQL语句是否应添加到转储文件中的值。
ExportTableStructurebooltrue获取或者设置一个值,该值指示是否应导出 table 结构( 创建表格) 。
ResetAutoIncrementbooltrue获取或者设置一个值,该值指示是否应将每个 table的自动增量值重置为 1.
ExportRowsbooltrue获取或者设置一个值,该值指示是否应导出行。
MaxSqlLengthint5x1024x1024 = 5 MB获取或者设置将多个插入项合并为单个sql的最大长度。
ExportProceduresbooltrue获取或者设置一个值,该值指示是否应导出存储过程。
ExportFunctionsbooltrue获取或者设置一个值,指示是否应导出存储的函数。
ExportTriggersbooltrue获取或者设置一个值,指示是否应导出存储的触发器。
ExportViewsbooltrue获取或者设置一个值,该值指示是否应导出已经存储的视图。
ExportEventsbooltrue获取或者设置一个值,该值指示是否应导出存储的事件。
IntervalForProgressReportint50获取或者设置一个值,该值指示( 微秒) 引发ExportProgressChanged事件的时间间隔。
GetTotalRowsBeforeExportbooltrue ( 在v2.0.9中修改)获取或者设置一个值,该值指示在导出过程开始之前是否应计算行的总数。
ScriptsDelimiter字符串|获取或者设置用于导出过程,函数,事件和触发器的分隔符。
ExportRoutinesWithoutDefinerbooltrue获取或者设置一个值,该值指示导出的脚本的( 。过程,函数,事件,触发器,事件) 是否应包括定义器。
ExcludeTables
( v2.0.5 )
List <字符串>空白获取或者设置将被排除在导出中的表的( 黑色 List ) 。 这些表的行也不会导出。
GetDocumentHeaders ( MySqlCommand )
( v2.0.5 )
List <字符串>请参阅演示应用程序获取文档标题的List 。
SetDocumentHeaders ( List <字符串> )
( v2.0.5 )
List <字符串>请参阅演示应用程序_设置文档标题。
GetDocumentFooters ( )
( v2.0.5 )
List <字符串>请参阅演示应用程序获取文档页脚。
SetDocumentFooters ( List <字符串> )
( v2.0.5 )
List <字符串>请参阅演示应用程序设置文档页脚。
RowsExportMode
( v2.0.7 )
Enum插入获取或者设置 enum 值,该值指示每个 table的行应该如何导出。
INSERT = 默认选项。 导出到新数据库或者空数据库时推荐。 如果主键已经存在,则进程将停止;
插入忽略如果主键存在,跳过它;在查找丢失的行时有用。
如果主键存在,则替换= delete,并插入新数据;
OnDuplicateKeyUpdate = 如果主键存在,则更新该行;
更新= 主键不存在,跳过它,否则更新它。
WrapWithinTransaction
( v2.0.7 )
boolfalse获取或者设置一个值,该值指示是否应用事务包装行的转储。 如果使用 RowsExportMode ="插入"或者"insertignore"或者"替换",则建议将此值设置为 false,否则 true 。


全 List 选项

选项数据类型默认值说明
EnableEncryptionboolfalse获取或者设置一个值,该值指示导入的转储文件是否已经加密。
EncryptionPassword字符串空的。设置用于对导出的转储文件进行解密的密码。
IntervalForProgressReportint100获取或者设置一个值,该值指示( 微秒) 引发ExportProgressChanged事件的时间间隔。
TargetDatabase字符串空的。获取或者设置目标数据库的名称。 如果数据库不存在,则将创建该数据库。
DatabaseDefaultCharSet字符串空的。获取或者设置目标数据库的默认字符集。 仅在导入到新的非现有数据库时才生效。
IgnoreSqlErrorboolfalse获取或者设置一个值,指示导入过程中是否发生SQL错误应被忽略。
ErrorLogFile字符串空的。获取或者设置用于记录错误消息的文件路径。

6在 ASP.NET 中使用的示例

输出示例代码。below 代码将内容导出到MemoryStream中,然后直接传输到 download 。

using System.IO;string connstr = "server=localhost;user=root;pwd=1234;database=test;";
MemoryStream ms = new MemoryStream();using (MySqlConnection conn = new MySqlConnection(connstr))
{
 MySqlCommand cmd = new MySqlCommand();
 MySqlBackup mb = new MySqlBackup(cmd);
 cmd.Connection = conn;
 conn.Open();
 mb.ExportToMemoryStream(ms);
}
Response.ContentType = "text/plain";
Response.AppendHeader("Content-Disposition", "attachment; filename=backup.sql");
Response.BinaryWrite(ms.ToArray());
Response.End();

上传和导入的示例代码:

string connstr = "server=localhost;user=root;pwd=1234;database=test;";
byte[] ba = FileUpload1.FileBytes;
MemoryStream ms = new MemoryStream(ba);using (MySqlConnection conn = new MySqlConnection(connstr))
{
 MySqlCommand cmd = new MySqlCommand();
 MySqlBackup mb = new MySqlBackup(cmd);
 cmd.Connection = conn;
 conn.Open();
 mb.ExportToMemoryStream(ms);
}
Header.Controls.Add(new LiteralControl("<script type="text/javascript">alert('ok');</script>"));

7.更多指南和示例

在站点的项目文档中提供更多指南和示例:
https://mysqlbackupnet.codeplex.com/documentation [ ^ ]

下面是一些指南

8历史记录

  • 08 2015年08月 - 2.0.9.2 释放
  • 19 2015年07月 - V2.0. 9的发布
  • 25 2015年月 - V2.0. 8的发布
  • 26 2015年月 - 2.0.7.1 释放
  • 25 2015年月 - V2.0. 7的发布
  • 17 2014年月 - V2.0. 6的发布
  • 20 2014年月 - V2.0. 5的发布
  • 。大量的变化。
  • 19 2011年月 - 版本 1.0 - 初始版本


文章标签:asp  asp-net  备份  MySQL备份  

Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语