利用Mysqldump备份和迁移,我想很多人都用过,具体参数不介绍了,这里主要讲.NET调用Mysqldump进行备份和.NET调用Mysql.exe进行导入数据。

这里使用的是5.1版的Mysqldump.exe和Mysql.exe(5.5版的用过,没测试成功)

如果是B/S程序,需要在webconfig配置成模拟超级管理方式登录

<system.web>
<identity impersonate="true" userName="administrator" password="" /><!--模拟超级管理员登录-->
</system.web>

因为要解决导入时视图嵌视图会报错的情况,所以本案分成两步操作。

第一步:只迁移表结构、视图、存储过程、函数、事件等。(为何这里数据不一起导呢,因为到视图需要加上--extended-insert=false,这样导数据会很慢,所以分成两步导。)

        string strError = string.Empty;//执行cmd获取输出信息。
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;//获取输出流
//p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;//获取错误信息流 p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.CreateNoWindow = true; //除数据外,表结构、视图、存储过程、函数、事件全部导出
p.Start();
p.StandardInput.WriteLine("c:");
p.StandardInput.WriteLine("cd C:\\Program Files (x86)\\MySQL\\MySQL Server 5.1\\bin");
p.StandardInput.WriteLine("mysqldump -h 192.168.0.1 -P3306 -uroot -p123456 -q -d -R -E --skip-add-drop-table --default-character-set=utf8
          --extended-insert=false MysqlDBName > c:\MysqlDBNameNoData.sql");
//-q 快速读取,-d不导数据,-R存储存储过程和函数,--extended-insert=false 逐行执行(视图嵌视图时需要用到),-E 导出事件,--add-drop-tables 删除表,--skip-add-drop-table不删除表
p.StandardInput.WriteLine("exit");
p.BeginOutputReadLine();
strError = p.StandardError.ReadToEnd();
p.WaitForExit();
if (!string.IsNullOrWhiteSpace(strError))//执行失败则跳出
{
return ;
} //去除DEFINER(如果数据库在不同的服务器,很可能会有权限问题,将权限这部分代码替换掉)
StreamReader sr = new StreamReader(storeDBnoDataPath);
Regex rg3 = new Regex("DEFINER=`.{1,50}`@`%`");//如果用户名比较长,这里可以设置的更长一些,但不要过度长,否则会替换掉需要的数据
string sql = sr.ReadToEnd();
sr.Close();
string strOutput = rg3.Replace(sql, ""); StreamWriter sw = new StreamWriter(storeDBnoDataPath, false, System.Text.Encoding.UTF8);
sw.Write(strOutput);
sw.Close(); //除数据外,表结构、视图、存储过程、函数、事件全部导入
p.Start();
p.StandardInput.WriteLine("c:");
p.StandardInput.WriteLine("cd C:\\Program Files (x86)\\MySQL\\MySQL Server 5.1\\bin");
p.StandardInput.WriteLine("mysql -h 192.168.0.2 -P3306 -uroot -p123456 MysqlDBName < c:\MysqlDBNameNoData.sql");
p.StandardInput.WriteLine("exit");
strError = p.StandardError.ReadToEnd();
p.WaitForExit();
if (!string.IsNullOrWhiteSpace(strError))//执行失败则跳出
{
return ;
}

第二部:导数据。(为了使导入数据比较快,不用加上--extended-insert=false)

 //只导出数据
p.Start();
p.StandardInput.WriteLine("c:");
p.StandardInput.WriteLine("cd C:\\Program Files (x86)\\MySQL\\MySQL Server 5.1\\bin");
p.StandardInput.WriteLine("mysqldump -h 192.168.0.1 -P3306 -uroot -p123456 -q --no-create-info --default-character-set=utf8 --skip-add-locks
            MysqlDBName < c:\MysqlDBNameOnlyData.sql“);//-q --no-create-info 只导出数据 --skip-add-locks 不添加表lock
p.StandardInput.WriteLine("exit");
strError = p.StandardError.ReadToEnd();
p.WaitForExit();
if (!string.IsNullOrWhiteSpace(strError))
{
return ;
} //导入数据
p.Start();
p.StandardInput.WriteLine("c:");
p.StandardInput.WriteLine("cd C:\\Program Files (x86)\\MySQL\\MySQL Server 5.1\\bin");
p.StandardInput.WriteLine("mysql -h 192.168.0.2 -P3306 -uroot -p123456 MysqlDBName < c:\MysqlDBNameOnlyData.sql“);
p.StandardInput.WriteLine("exit");
strError = p.StandardError.ReadToEnd();
p.WaitForExit();
if (!string.IsNullOrWhiteSpace(strError))
{
return ;
}
//关闭进程
p.Close();

Mysql备份迁移——Mysqldump(.NET调用Mysqldump.exe方式)——(解决视图嵌视图报错)的更多相关文章

  1. Mysql备份迁移——MySqlBackup(.net)——(无法解决视图嵌视图报错)

    这里是利用MySqlBackup,可以再nuget中下载. 无法解决视图嵌视图报错的问题,只导表跟数据比较合适,如果有视图嵌视图,请参照Mysql备份迁移——Mysqldump(.NET调用Mysql ...

  2. MariaDB/MySQL备份和恢复(一):mysqldump工具用法详述

    本文目录:1.备份分类2.备份内容和备份工具3.mysqldump用法详述 3.1 语法选项 3.1.1 连接选项 3.1.2 筛选选项 3.1.3 DDL选项 3.1.4 字符集选项 3.1.5 复 ...

  3. MySQL备份迁移之mydumper

    简介 mydumper 是一款开源的 MySQL 逻辑备份工具,主要由 C 语言编写.与 MySQL 自带的 mysqldump 类似,但是 mydumper 更快更高效. mydumper 的一些优 ...

  4. MySQL在windows系统中修改datadir路径后无法启动问题,报错1067

    windows server2008下如何更改MySQL数据库的目录的帖子已经很多了,这里简单介绍一个步骤,如果不成功请先查看其它帖子. 更改默认的mysql数据库目录 将 C:\Documents ...

  5. MySQL 存储过程例子,不能在if else里面用begin end否则会报错Error Code : 1064!

    Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your My ...

  6. 不要在基类析构函数中调用纯虚函数,否则运行时会报错“pure virtual method called”

    如上. 这是因为:delete派生类对象时,先调用派生类的析构函数,然后再调用基类的析构函数:此时如果调用纯虚函数的话,派生类的对象已经被破坏了,所以会报错. http://www.cnblogs.c ...

  7. dataTable调用接口渲染数据,没有数据,报错

    当没有数据的时候,报错: 解决方法: 在后台那边处理一下,当没有数据的时候,令 data : ' ' 或者 data : [ ] 前端代码: var loading = layer.load(1, { ...

  8. docker-compose exec时 出现"fork/exec /proc/self/exe: no such file or directory" 报错

    问题:跟往常一样执行docker-compos exec redis sh时出现如下错误,而容器是运行状态中. # docker-compose exec redis sh rpc error: co ...

  9. Mysql备份系列(2)--mysqldump备份(全量+增量)方案操作记录

    在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 线上数据库备份场景:每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备份 ...

随机推荐

  1. 转: MVC设计思想简介

    模型-视图-控制器(MVC)是80年代Smalltalk-80出现的 一种软件设计模式,现在已经被广泛的使用. 1.模型(Model) 模型是应用程序的主体部分.模型表示业务数据,或者业务逻辑. 2. ...

  2. Leetcode 171 Excel Sheet Column Number 难度:0

    https://leetcode.com/problems/excel-sheet-column-number/ class Solution { public: int titleToNumber( ...

  3. c# 配置文件之configSections配置(二)

    在很多时候我们需要自定义我们自己的自定义App.config 文件,而微软为我们提供了默认的 System.Configuration.DictionarySectionHandler System. ...

  4. 反向Ajax,实现服务器向客户端推送消息之 Comet

    基于 HTTP 长连接.无须在浏览器端安装插件的“服务器推”技术为“Comet”. 下面将介绍两种 Comet 应用的实现模型. 基于 AJAX 的长轮询(long-polling)方式 AJAX 的 ...

  5. mybatis sql in 查询

    mybatis官方学习文档:http://www.mybatis.org/core/getting-started.html 本文转自:http://www.blogjava.net/xmatthew ...

  6. iOS 服务器端推送证书p12文件制作

    A.苹果服务器地址: Production和development用的push的服务器不同pdev是:$apnsHost = 'gateway.sandbox.push.apple.com';pro是 ...

  7. JMeter学习(十)内存溢出解决方法

    使用jmeter进行压力测试时遇到一段时间后报内存溢出outfmenmory错误,导致jmeter卡死了,先尝试在jmeter.bat中增加了JVM_ARGS="-Xmx2048m -Xms ...

  8. 标准库中的-stack

    #include <sequence_concepts.h> __STL_BEGIN_NAMESPACE // Forward declarations of operators == a ...

  9. socket_server源码剖析、python作用域、IO多路复用

    本节内容: 课前准备知识: 函数嵌套函数的使用方法: 我们在使用函数嵌套函数的时候,是学习装饰器的时候,出现过,由一个函数返回值是一个函数体情况. 我们在使用函数嵌套函数的时候,最好也这么写. def ...

  10. Python 手写数字识别-knn算法应用

    在上一篇博文中,我们对KNN算法思想及流程有了初步的了解,KNN是采用测量不同特征值之间的距离方法进行分类,也就是说对于每个样本数据,需要和训练集中的所有数据进行欧氏距离计算.这里简述KNN算法的特点 ...