利用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. JAVA https证书相关

    生成证书: keytool -genkey -alias cas -keyalg RSA -keystore  cas.key 导出证书: keytool -export -alias cas  -f ...

  2. android单选框和复选框(练习)

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  3. hadoop运行原理之shuffle

    hadoop的核心思想是MapReduce,但shuffle又是MapReduce的核心.shuffle的主要工作是从Map结束到Reduce开始之间的过程.首先看下这张图,就能了解shuffle所处 ...

  4. sorttable

    http://rubaxa.github.io/Sortable/Sortable.js http://rubaxa.github.io/Sortable/Sortable.min.jshttp:// ...

  5. Mutual Training for Wannafly Union #1解题报告

    ---恢复内容开始--- q神等人组织的vjudge上的多校训练,题目基本上都来自于CF,#1是上周进行的,参加后感觉收获很多,因为上周准备期中比较忙,解题报告现在补上. 比赛地址(兼题目地址) A题 ...

  6. 快速分析apk工具aapt的使用

    前面walfred已经介绍了使用apktool对apk进行逆向编译,通过apktool我们的确可以反编译已经序列化后的AndroidManifest.xml和资源文件等等,但是有没有一种快速有效的工具 ...

  7. STC12C5A60S2 常用的中断源和相关寄存器

    1) 中断源 STC12C5A60S2共有十个中断源,每个中断源可设置4类优先级:当相同优先级下各中断优先级由高到低依次如下: 1.1)INT0(外部中断0) 中断向量地址 0003H, C语言编程: ...

  8. css2----清除浮动

    为什么要清除浮动? 非IE下,当容器的高度为auto,容器有浮动元素,此时容器的高度不能自己伸长适应内容的高度,造成内容溢出乃至影响布局,即所谓的“浮动溢出”,为防此象,需要清除浮动. 如何清除浮动? ...

  9. Caffe 源碼閱讀(一) Blob.hpp

    Blob 四維度(N K H W) N : SGD 一次 mini-batch 個數 K : 如果是圖片表示圖片通道數 如果是中間結果 則理解爲 feature map 個數 H.W : 如果是圖片理 ...

  10. Do It Wrong, Get It Right

    Do It Wrong, Get It Right Time Limit: 5000ms, Special Time Limit:12500ms, Memory Limit:65536KB Total ...