利用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. launch文件

    launch在ROS应用中,每个节点通常有许多参数需要设置,为了方便高效操作多个节点,可以编写launch文件,然后用roslaunch命令运行roslaunch: roslaunch [option ...

  2. redis入门指南-安装redis

    纸上得来终觉浅 绝知此事要躬行 Redis官方不支持window.微软发布了可在redis的分支.不建议使用 但我确实用了. win7 redis2.8.4  php5.6  apache2.4 ht ...

  3. IIS调试技巧

    VS2010如何调试IIS上的网站 通常,我们在Visual Studio里调试ASP.NET网站,都是加个断点,然后按F5,在VS自带的虚拟服务器下调试的.但有时候,VS自带的服务器弱爆了,无法满足 ...

  4. 手把手教你用python抓网页数据

    http://www.1point3acres.com/bbs/thread-83337-1-1.html

  5. Pig与Hive的区别

    Language 在Hive中可以执行  插入/删除 等操作,但是Pig中我没有发现有可以 插入 数据的方法,请允许我暂且认为这是最大的不同点吧. Schemas Hive中至少还有一个“表”的概念, ...

  6. 集合ArrayList

    /*集合ArrayList * 例如: * 1.创建:ArrayList<Egg> myList = new ArrayList<Egg>(); *      Egg类型的集合 ...

  7. 《final修饰基本类型变量和引用类型变量的区别》

    //final修饰基本类型变量和引用类型变量的区别 import java.util.Arrays; class Person { private int age; public Person(){} ...

  8. 原生javascript加载运行

    原生javascript加载运行 (function(){ //TODO sometings }()); 在要运行相应代码的位置加入script标签,创建函数并自执行; 关于window.onload ...

  9. Qt控件篇 ---- QTableView/QTableWidget

    记录 //按字母排序 item->setText("2"); //按数值排序item->setData(Qt::DisplayRole, 2);

  10. linux下安装mongodb(php版本5.3)

    转:原文出处忘记了. 1. 下载MongoDB 2. 解压文件到某目录下,然后重命名: [root@localhost var]# tar -xzvf mongodb-linux-i686-2.0.1 ...