C#调用Process进行mysql数据库备份和还原

1 篇文章 0 订阅
0 篇文章 0 订阅

        在工作中,遇到使用c#对mysql数据库进行备份还原的工作,当然使用bat脚本很容易实现。搜索了一下相关资料,发现网上的相关资料大同小异,基本都是幻想copy。自己按照他们的步骤写出来,发现根本不能正常使用,真不知道他们真的有没有实测过!

        自己摸索了一下,给出自己的解决步骤:

一:仍然是调用Process这个类,原则上不变,网上的说法都是照抄,实际参数作用不详细,这里给出完整说明:

备份操作:

            //创建进程对象   
            Process proc = new Process();
            //调用dos窗口
            proc.StartInfo.FileName = "cmd.exe";
            //不显示窗体
            proc.StartInfo.CreateNoWindow = true;
            //设置dos窗口的目录路径,这里就是自己安装mysql的bin目录(我们的mysqldump.exe和mysql.exe所在目录)
            proc.StartInfo.WorkingDirectory = @"F:\mysql-5.7.16-winx64\bin";
            //允许输入流
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.RedirectStandardInput = true;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.RedirectStandardError = true;
            //执行
            proc.Start();
            //登陆数据库,这里的内容和我们直接使用dos窗口备份数据库的方式一致,前面是数据库登陆信息,后面是备份路径
            proc.StandardInput.WriteLine("mysqldump -uroot -proot warehouse > d://backup//upgrade.sql");
            sr.Close();
            proc.Close();

还原操作:

           //创建进程对象   
            Process proc = new Process();
            //调用dos窗口
            proc.StartInfo.FileName = "cmd.exe";
            //不显示窗体
            proc.StartInfo.CreateNoWindow = true;
            //设置dos窗口的目录路径,这里就是自己安装mysql的bin目录
            proc.StartInfo.WorkingDirectory = @"F:\mysql-5.7.16-winx64\bin";
            //允许输入流
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.RedirectStandardInput = true;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.RedirectStandardError = true;
            //执行
            proc.Start();
            //登陆数据库,这里的内容和我们直接使用dos窗口登陆数据库的方式一致
            proc.StandardInput.WriteLine("mysql -uroot -proot");
            //切换到我们需要操作的数据库
            proc.StandardInput.WriteLine("use warehouse;");
            //先前备份的sql脚本文件读取
            StreamReader sr=new StreamReader("d://backup//upgrade.sql");
            while (!sr.EndOfStream)
            {
                //使用WriteLine方法把脚本一行一行进行写入并且执行
                proc.StandardInput.WriteLine(sr.ReadLine());
            }
            sr.Close();
            proc.Close();

亲测可用,网上还有用StartInfo.Arguments这个参数进行命令传入执行的,但是个人认为那种方式不好用,也不灵活,如果不熟悉,很容易出错,推荐使用StandardInput.WriteLine这个方法进行命令执行!实际上通过使用mysql的备份和还原,我们可以发现,类似的其它需求同样可以使用这种方式进行操作。比方说调用7z.exe进行解压什么的,大家有兴趣可以自行开发....


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值