MySqlBackup.NET——用于C#,VB.NET,ASP.NET的MySQL备份解决方案

目录

1.简介

2.特征和依赖

特征

先决条件/依赖关系

3.背景

4.基本用法

简单导出示例

简单的导入示例

ExportInfo选项的完整列表

ImportInfo选项的完整列表

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

6.更多指南和示例


获取方式:

1.简介

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

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

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

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

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

2.特征和依赖

特征

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

先决条件/依赖关系

MySqlBackup.NET建立在MySQL dot net Connector / NetMySql.Data.DLL之上

3.背景

本文假定您已经熟悉MySQLdot net连接器(MySql.Data.dll)与您可以执行四种基本操作的最少知识,其操作分别是SELECTINSERTUPDATE 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 DATABASESQL语句添加到转储文件中。
ExportInfo.AddDropDatabase - bool
  • 默认值: false
  • 获取或设置一个值,指示是否应将DROP DATABASESQL语句添加到转储文件中
ExportInfo.ExportTableStructure - bool
  • 默认值: true
  • 获取或设置一个值,指示是否应导出表结构(CREATE TABLE)。
ExportInfo.AddDropTable - bool
  • 默认值: true
  • 获取或设置一个值,指示是否应将DROP TABLESQL语句添加到转储文件中
ExportInfo.ResetAutoIncrement - bool
  • 默认值: false
  • 获取或设置一个值,指示是否应将每个表的自动增量值重置为 1
ExportInfo.ExportRows - bool
  • 默认值: true
  • 获取或设置一个值,指示是否应导出行。
ExportInfo.MaxSqlLength - int
  • 默认值:5 * 1024 * 10245mb
  • 获取或设置将多个INSERT组合为单个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
  • BinaryCharchar格式
  • 注意:将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[^]

以下是一些指南。

 

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值