目录
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包?
本文介绍了一个可以在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)
本文假定您已经熟悉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
- 默认值:在测试应用中演示
- 获取文档标题列表
ExportInfo.SetDocumentHeaders(List)
- 设置文档标题
ExportInfo.GetDocumentFooters()
- 返回: List
- 默认值:在测试应用中演示
- 获取文档页脚
ExportInfo.SetDocumentFooters(List)
- 设置文档标题
ExportInfo.ExcludeTables - List
- 默认值:空列表
- 获取或设置将被排除以供导出的表(黑名单)。这些表的行也不会导出。
ExportInfo.TablesToBeExportedList - List
- 默认值:空列表
- 获取或设置将导出的表的列表。如果不是,则将导出所有表。
ExportInfo.TablesToBeExportedDic - Dictionary
- 默认值:空字典
- 获取或设置将使用自定义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.IntervalForProgressReport - int
- 默认值: 100
- 获取或设置值表示引发ExportProgressChanged事件的时间间隔(以毫秒为单位)
ImportInfo.IgnoreSqlError - bool
- 默认值: false
- 获取或设置一个值,指示是否应忽略导入过程中发生SQL错误
ImportInfo.ErrorLogFile - string
- 默认值: string.empty
- 获取或设置用于记录错误消息的文件路径
导出的示例代码。以下代码将内容导出到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
("alert('ok');"));
6.更多指南和示例
项目网站的文档中提供了更多指南和示例:https://github.com/adriancs2/MySqlBackup.Net/wiki[^]
以下是一些指南。
- 在MemoryStream,Zip和ASP.NET中使用的示例
- 使用导出/备份的进度报告
- 使用导入/恢复进度报告
- 每个表的条件行导出
- 常见问题——常见错误
原文地址:https://www.codeproject.com/Articles/256466/MySqlBackup-NET