c# Process 执行完回调 Proc_OutputDataReceived

mysql mysqldump mysql source备份还原数据

直接贴代码

前提:mysql5.7

vs2017  3.5

mysql文件夹 C:\Program Files\MySQL\MySQL Server 5.7\bin

备份文件夹 D:\Backup\2018\201812\20181217

还原:

备份:

直接上代码

class Program
{
static void Main(string[] args)
{
string cmdRestore = "source D:\\Backup\\2018\\201812\\20181217\\ib_response201812171400.sql";
///还原
StartCmdRestore(strMysqlFile, new string[] { cmdRestore }, "ib_response201812171400"); //备份
//string cmdBackUp = "mysqldump -hlocalhost -uroot -proot ibsdk_qsmessage_bak ib_response201812171400 > d:\\123.sql";
//StartCmd(strMysqlDumpFile, new string[] { cmdBackUp });
Console.Read();
}
static string strMysqlRoot = "root";
static string strMysqlPassword = "root";
static string strMysqlDataBaseNameBAK = "ibsdk_qsmessage_bak";
static string CmdPath = @"C:\Windows\System32\cmd.exe";
static string strMysqlDumpFile = "C:\\Program Files\\MySQL\\MySQL Server 5.7\\bin\\";
static string strMysqlFile = @"C:\Program Files\MySQL\MySQL Server 5.7\bin\";
static int cntMM = ;
static string CurrentRestoreTableName = string.Empty;
private static string DATABASE_PROVIDER = "MySql.Data.MySqlClient";
private static string DATABASE_CONSTRING_BAK = "Data Source=localhost;Initial Catalog=ibsdk_qsmessage_bak;Persist Security Info=True;User ID=root;Password=root;Min Pool Size=1;Max Pool Size=3;Allow User Variables=True;Allow Zero Datetime = true;"; /// <summary>
/// 执行Cmd命令
/// </summary>
/// <param name="workingDirectory">要启动的进程的目录</param>
/// <param name="command">要执行的命令</param>
public static void StartCmd(string workingDirectory, string[] commands)
{
Process process = new Process();
process.StartInfo.FileName = CmdPath;
process.StartInfo.WorkingDirectory = workingDirectory;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
process.OutputDataReceived += Process_OutputDataReceived;
process.Start();
process.BeginOutputReadLine();
//process.StandardInput.WriteLine("cd " + workingDirectory);
process.StandardInput.WriteLine(commands[]);
process.StandardInput.WriteLine("exit");
process.StandardInput.WriteLine("exit");
process.Close();
} private static void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if(e != null && e.Data != null)
Console.WriteLine("out:" + e.Data.ToString());
//Console.WriteLine("aaa:" + cnt);
} /// <summary>
/// 执行Cmd命令
/// </summary>
/// <param name="workingDirectory"></param>
/// <param name="command"></param>
/// <param name="tableName"></param>
public static void StartCmdRestore(string workingDirectory, string[] command, string tableName)
{
//创建进程对象
Process proc = new Process();
//调用dos窗口
proc.StartInfo.FileName = "cmd.exe";
//不显示窗体
proc.StartInfo.CreateNoWindow = true;
//设置dos窗口的目录路径,这里就是自己安装mysql的bin目录
proc.StartInfo.WorkingDirectory = workingDirectory;
//允许输入流
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.EnableRaisingEvents = true;
proc.EnableRaisingEvents = true;//程序退出引发事件 proc.OutputDataReceived += Proc_OutputDataReceived;
//执行
proc.Start();
proc.BeginOutputReadLine();
//登陆数据库,这里的内容和我们直接使用dos窗口登陆数据库的方式一致
proc.StandardInput.WriteLine(string.Format("mysql -u{0} -p{1}", strMysqlRoot, strMysqlPassword));
//切换到我们需要操作的数据库
proc.StandardInput.WriteLine(string.Format("use {0};", strMysqlDataBaseNameBAK));
//先前备份的sql脚本文件读取
proc.StandardInput.WriteLine(command[]);// "source D:\\Backup\\2018\\201812\\20181216\\ib_response201812161030.sql");
CurrentRestoreTableName = tableName;
proc.StandardInput.WriteLine("exit");
proc.StandardInput.WriteLine("exit"); proc.Close(); } private static void Proc_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
//Console.WriteLine("out");
if(e != null && e.Data != null)
Console.WriteLine("out:" + e.Data.ToString()); if(cntMM >= )
{
//string strShowTables1 = "select count(1) from ib_response201812171400;";
//int cnt = SessionFactory.GetSessionMySQLIB(DATABASE_PROVIDER,
// DATABASE_CONSTRING_BAK).Count(strShowTables1);
//Console.WriteLine(CurrentRestoreTableName + "还原后数据条数:--" + cnt);
cntMM = ;
}
if(!string.IsNullOrEmpty(e.Data) && e.Data.ToLower().IndexOf("mysql") >= )
{ cntMM++; }
} }

已测试

有疑问可联系QQ 1023360745  仅供技术交流  骚扰不回。

建议先备份再还原

注意:还原会锁表 自己查看SQL

查询数据条数 自己根据自己的mysql 查询一下

我的场景:

备份数据:window服务中 一段代码 来自己备份数据

还原数据:client发送请求则还原需要查询的数据表 回调告诉client还原成功数据已ready!

欢迎点评

c# Process cmd 执行完回调 Proc_OutputDataReceived mysql mysqldump mysql source备份还原数据的更多相关文章

  1. MySQL mysqldump与source导入慢的解决方法

    Jquery中文网 >  数据库  >  mysql  >  正文 MySQL mysqldump与source导入慢的解决方法 MySQL mysqldump与source导入慢的 ...

  2. MYSQL的日志与备份还原

    一.错误日志 当数据库出现任何故障导致无法使用时,第一时间先去查看该日志 1.服务器启动关闭过程中的信息 2.服务器运行过程中的错误信息 日志存放路径,可以通过命令查看: 日志文件命名格式:host_ ...

  3. MySQL - 日常操作二 备份还原

    登录mysql的命令 # 格式: mysql -h 主机地址 -u 用户名 -p 用户密码 mysql -h 110. -P3306 -uroot -p mysql -uroot -p -S /dat ...

  4. Mysql表复制及备份还原

    1.复制表结构   1.1 含有主键等信息的完整表结构   CREATE table 新表名 LIKE book;     1.2 只有表结构,没有主键等信息   create table 新表名 s ...

  5. MySQL远程连接和备份还原

    连接远程数据库 mysql -h 数据库地址 -P 端口号 -u 用户名 -p mysql -h -u root -p 备份数据库, 热备份 mysqldump -h 127.0.0.1 -u roo ...

  6. mfc调用cmd执行完保留黑框

    mfc调用cmd的方法有很多,本文采用 ShellExecute ShellExecute(AfxGetMainWnd()->m_hWnd,L"open",L"cm ...

  7. MySQL 利用binlog增量备份+还原实例

    一,什么是增量备份 增量备份,就是将新增加的数据进行备份.假如你一个数据库,有10G的数据,每天会增加10M的数据,数据库每天都要备份一次,这么多数据是不是都要备份呢?还是只要备份增加的数据呢,很显然 ...

  8. 使用mysqldump进行mysql数据库备份还原

    mysqldump是mysql自带的备份还原工具,默认在安装目录的bin下 可通过cmd命令行启动,然后运行: 还原一个数据库: mysql -h 主机 -u 用户名 -p密码 数据库名 < 指 ...

  9. MySQL mysqldump 数据备份

    1.mysqldump 命令工具说明 参数注解: mysqldump 是采用SQL 级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备 ...

随机推荐

  1. 融云亮相GDG谷歌女性开发者大会 揭秘IMSDK网络优化策略

    4 月 20 日,冷雨阻碍不了天津GDG谷歌女性开发者大会的热烈召开,一众开发者.架构师和科技公司创业者云集一堂,就女性开发者的技术.职场.人生多方面话题展开深入探讨.活动由GDG (谷歌开发者社区) ...

  2. 安卓recyclerView 分割线的那些事

    在这里我想记录下recyclerView 分割线遇到的一些问题,主要提供一些个人思路,代码可能不多~ 1.宽度问题 描述:我现在需要做一张卡片,卡片里面是一条条联系人,而且我们卡片外层是有阴影的,我的 ...

  3. GMap获取可视范围内四个角的坐标

    原理: 先获取控件的四个顶点,逐一将其转换成经纬度坐标. private void GetBonds() { //左上↖ PointLatLng pLeftTop = map1.FromLocalTo ...

  4. puppeteer实现线上服务器任意区域截图

    整个九月份由于业务繁重以及玩心颇重,一直没有机会来写一篇博文.而且笔者于十月一日将会举办人生大事--婚礼,现在家里筹办过程中只能抽出零碎的时间来写这篇文章. 关于服务端截图,这种使用场景非常少见,大多 ...

  5. 物理层PHY 和 网络层MAC

    PHY模块简介 物理层位于OSI最底层,物理层协议定义电气信号.线的状态.时钟要求.数据编码和数据传输用的连接器. 物理层的器件称为PHY. 上图里的灰色方框图里的就是PHY芯片内部模块图. MAC器 ...

  6. tomcat启动项目时一直在跑,项目没起来

    1. 在整合maven项目时我遇到一个问题,tomcat启动项目总是报超时,后来我把timeout调到180秒,还是启动超时.看了不是timeout时间短的问题. 2.弄了一天也没解决,后来请大神给看 ...

  7. 原生JS封装创建多级菜单函数

    手写一个使用原生JS封装的多级菜单的函数,满足以下几点需求. 子类层级不确定,可根据数据自动生成多级菜单. 操作便捷,只需传入一个HTML标签. 缺点: 需要满足特定的数据结构 废话不多说,展示代码. ...

  8. robotframework-ride支持python3

    最近发现robotframework的RIDE工具终于支持python3了,赶紧就安装了一下. 最新版本1.7.3.1基于wxPython4.0.4,此时的wxPython也是支持Python3.x的 ...

  9. jmeter需要学习的其他点

    jmeter知识点访问地址参数化http请求默认值远程连接非GUI运行测试命令jmeter参数设置jmeter常用脚本开发 Beanshell sampleDebug SampleFtp请求java请 ...

  10. [转]osgconv工具简介

    osgconv是一种用来读取3D数据库以及对它们实施一些简单的操作的实用应用程序,同时也被称作 一种专用3D数据库工具. 用osgconv把其他格式的文件转换为OSG所支持的格式 osgconv是一种 ...