天天看点

MySqlBackup.NET——用于C#,VB.NET,ASP.NET的MySQL备份解决方案1.简介2.特征和依赖3.背景4.基本用法5.在ASP.NET中使用的示例6.更多指南和示例

目录

1.简介

2.特征和依赖

特征

先决条件/依赖关系

3.背景

4.基本用法

简单导出示例

简单的导入示例

ExportInfo选项的完整列表

ImportInfo选项的完整列表

5.在ASP.NET中使用的示例

6.更多指南和示例

获取方式:

  • https://github.com/MySqlBackupNET/MySqlBackup.Net
  • ASP.NET在线演示:http://mysqlbackup.somee.com
  • ohloh.net——https://www.ohloh.net/p/MySqlBackupNET
  • 通过NuGet安装:PM> Install-Package MySqlBackup.NET 

    https://www.nuget.org/packages/MySqlBackup.NET/[^]

    什么是NuGet?| 如何在Visual Studio 2012中安装NuGet包?

1.简介

本文介绍了一个可以在C#或VB.NET中备份/恢复MySQL数据库的工具(DLL)以及一些如何使用它的示例代码。它是MySqlDump的一种替代品。

制作此工具的另一个好处是,我们不必依赖两个小程序--MySqlDump.exe和MySql.exe来执行备份和还原任务。我们将更好地控制输出结果。

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

MySQL Workbench对开发人员有好处,但是,当涉及到客户端或最终用户时,推荐的方法是让每个参数都预设,所有他们需要知道的只是按下“备份”大按钮,一切都自行完成。使用MySQL Workbench作为备份工具不适合客户端或最终用户。

另一方面,MySqlDump.exe不能用于Web应用程序。由于大多数Web托管提供商禁止这样做,MySqlBackup.NET将有助于构建基于Web(ASP.NET / Web服务)的备份工具。

2.特征和依赖

特征

  • MySQL数据库的备份和恢复
  • 可以在任何.NET语言中使用
  • 到/从 MemoryStream导出/导入
  • 条件行导出(过滤表或行)
  • 进度报告可用于导出和导入任务
  • 能够将行导出到不同的模式(插入,插入忽略,替换,重复键更新,更新)
  • 可以直接在ASP.NET或Web服务中使用

先决条件/依赖关系

MySqlBackup.NET建立在MySQL dot net Connector / Net(MySql.Data.DLL)之上

  • 必须将此DLL的引用添加到项目中才能使MySqlBackup.NET正常工作
  • MySql.Data.DLL由Oracle Corporation开发,根据GPL许可证授权(http://www.gnu.org/licenses/old-licenses/gpl-2.0.html)

3.背景

本文假定您已经熟悉MySQL的dot net连接器(MySql.Data.dll)与您可以执行四种基本操作的最少知识,其操作分别是SELECT,INSERT,UPDATE, 和DELETE。

4.基本用法

在使用MySqlBackup.NET编码之前添加using语句:

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

自定义export行为的示例:

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

示例代码:

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);
        }
    }
}
           

ExportInfo选项的完整列表

ExportInfo.GetDocumentHeaders(cmd)
           
  • 返回: List<string>
  • 默认值:在测试应用中演示
  • 获取文档标题列表
ExportInfo.SetDocumentHeaders(List<string>)
           
  • 设置文档标题
ExportInfo.GetDocumentFooters()
           
  • 返回: List<string>
  • 默认值:在测试应用中演示
  • 获取文档页脚
ExportInfo.SetDocumentFooters(List<string>)
           
  • 设置文档标题
ExportInfo.ExcludeTables - List<string>
           
  • 默认值:空列表
  • 获取或设置将被排除以供导出的表(黑名单)。这些表的行也不会导出。
ExportInfo.TablesToBeExportedList - List<string>
           
  • 默认值:空列表
  • 获取或设置将导出的表的列表。如果不是,则将导出所有表。
ExportInfo.TablesToBeExportedDic - Dictionary<string, string>
           
  • 默认值:空字典
  • 获取或设置将使用自定义SELECT定义导出的表
  • 如果为none或为空,则将导出所有表和行
  • Key =表的名称。Value =自定义SELECT语句
  • 例1: SELECT * FROM product WHERE category = 1;
  • 例2: SELECT name,description FROM product;
ExportInfo.RecordDumpTime - bool
           
  • 默认值: true
  • 获取或设置一个值,指示是否应将转储时间记录在转储文件中
ExportInfo.AddCreateDatabase - bool
           
  • 默认值: false
  • 获取或设置一个值,指示是否应将“CREATE DATABASE”的SQL语句添加到转储文件中。
ExportInfo.AddDropDatabase - bool
           
  • 默认值: false
  • 获取或设置一个值,指示是否应将“DROP DATABASE”的SQL语句添加到转储文件中
ExportInfo.ExportTableStructure - bool
           
  • 默认值: true
  • 获取或设置一个值,指示是否应导出表结构(CREATE TABLE)。
ExportInfo.AddDropTable - bool
           
  • 默认值: true
  • 获取或设置一个值,指示是否应将“DROP TABLE”的SQL语句添加到转储文件中
ExportInfo.ResetAutoIncrement - bool
           
  • 默认值: false
  • 获取或设置一个值,指示是否应将每个表的自动增量值重置为 1
ExportInfo.ExportRows - bool
           
  • 默认值: true
  • 获取或设置一个值,指示是否应导出行。
ExportInfo.MaxSqlLength - int
           
  • 默认值:5 * 1024 * 1024(5mb)
  • 获取或设置将多个INSERTs 组合为单个SQL 的最大长度
  • 默认值为5MB。
  • 仅适用于 RowsExportMode = "INSERT" or "INSERTIGNORE" or "REPLACE"
  • 如果RowsExportMode = ONDUPLICATEKEYUPDATE or UPDATE,则忽略该值 
ExportInfo.ExportProcedures - bool
           
  • 默认值: true
  • 获取或设置一个值,指示是否应导出存储过程
ExportInfo.ExportFunctions - bool
           
  • 默认值: true
  • 获取或设置一个值,指示是否应导出存储函数
ExportInfo.ExportTriggers - bool
           
  • 默认值: true
  • 获取或设置一个值,指示是否应导出存储的触发器
ExportInfo.ExportViews - bool
           
  • 默认值: true
  • 获取或设置一个值,指示是否应导出存储的视图
ExportInfo.ExportEvents - bool
           
  • 默认值: true
  • 获取或设置一个值,指示是否应导出存储事件
ExportInfo.IntervalForProgressReport - int
           
  • 默认值: 100
  • 获取或设置一个值,表示引发ExportProgressChanged事件的时间间隔(以毫秒为单位) 
ExportInfo.ScriptsDelimiter - string
           
  • 默认值: |
  • 获取或设置用于导出过程,函数,事件和触发器的分隔符
ExportInfo.ExportRoutinesWithoutDefiner - bool
           
  • 默认值: true
  • 获取或设置一个值,指示是否应排除DEFINER导出的脚本(过程,函数,事件,触发器,事件) 
ExportInfo.RowsExportMode - enum RowsDataExportMode
           
  • 默认值: Insert
  • 获取或设置一个enum值,指示应如何导出每个表的行
  • INSERT=默认选项。如果导出到新数据库,建议使用。如果主键存在,则该过程将停止。
  • INSERT IGNORE =如果存在主键,请跳过它
  • REPLACE =如果存在主键,则删除该行并插入新数据
  • OnDuplicateKeyUpdate=如果存在主键,请更新该行。如果所有字段都是主键,则它将更改为INSERT IGNORE。
  • UPDATE =如果主键不存在,请跳过它,如果所有字段都是主键,则不会导出任何行。
ExportInfo.WrapWithinTransaction - bool
           
  • 默认值: false
  • 获取或设置一个值,指示是否应使用事务包装行转储。
  • 如果使用RowsExportMode = "INSERT" or "INSERTIGNORE" or "REPLACE", else TRUE.,建议将此值设置为FALSE
ExportInfo.TextEncoding - System.Text.Encoding
           
  • 默认值: UTF8Encoding(false)
  • 获取或设置值表示用于导出转储的编码。 
ExportInfo.BlobExportMode - enum BlobDataExportMode
           
  • 默认值: BlobDataExportMode.HexString
  • 获取或设置一个enum值,指示应如何导出BLOB。
  • BinaryChar= char格式
  • 注意:将BLOB导出为二进制字符目前不适用于实际部署。导出BinaryChar将引发异常,该异常试图警告开发人员此函数用于开发和调试目的。阅读更多:https://github.com/MySqlBackupNET/MySqlBackup.Net/issues/47
ExportInfo.BlobExportModeForBinaryStringAllow - bool
           
  • 默认值: false
  • 如果您希望帮助调试,修复或开发将BLOB导出为二进制char格式(BlobExportMode=BinaryChar)的功能,请将此值设置为true
ExportInfo.GetTotalRowsMode - enum GetTotalRowsMethod
           
  • 默认值: InformationSchema
  • 获取或设置值表示获取总行值的方法
  • 如果您正在开发进度条,此功能非常有用
  • InformationSchema =快速,但近似值
  • SelectCount =缓慢但准确
  • Skip=跳过获取总行数。如果您没有执行任何进度报告,请使用此选项。

ImportInfo选项的完整列表

ImportInfo.IntervalForProgressReport - int
           
  • 默认值: 100
  • 获取或设置值表示引发ExportProgressChanged事件的时间间隔(以毫秒为单位) 
ImportInfo.IgnoreSqlError - bool
           
  • 默认值: false
  • 获取或设置一个值,指示是否应忽略导入过程中发生SQL错误
ImportInfo.ErrorLogFile - string
           
  • 默认值: string.empty
  • 获取或设置用于记录错误消息的文件路径

5.在ASP.NET中使用的示例

导出的示例代码。以下代码将内容导出到MemoryStream,然后直接传输下载。

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>"));
           

6.更多指南和示例

项目网站的文档中提供了更多指南和示例:

https://github.com/adriancs2/MySqlBackup.Net/wiki[^]

以下是一些指南。

  • 在MemoryStream,Zip和ASP.NET中使用的示例
  • 使用导出/备份的进度报告
  • 使用导入/恢复进度报告
  • 每个表的条件行导出
  • 常见问题——常见错误

原文地址:https://www.codeproject.com/Articles/256466/MySqlBackup-NET

继续阅读