c#+windows环境 编写mysql集群服务

项目需求:

        在搭建mysql集群初期的时候遇到这样的问题,如果服务器关机了或者是把搭建mysql集群的dos窗口关了,mysql集群就宕掉了,还需要重新搭建,之前搭建的时候都说直接在dos环境下搭建就可以了,一次两次的还可以接受,虽然一分钟就能搞定集群搭建,但是宕掉的次数多了,就需要思考了,如何让他关机重启以后还可以正常运行,减少这种重复性的工作,保持正常的开发不受影响。


项目思路:

1、做一个批处理

想法:写一个批处理,让他自动运行,运行完以后自动退出。

可行性分析:mysql集群的命令运行后只是出现相应的结果显示,所以不会自动运行完并退出,无法解决当前的问题

 

2、写一个服务

想法:通过写一个服务,让他开机自动开启,如果是服务停止了,直接启动就可以了,这样就不用输入一堆的命令了,只要服务的命名规范一点,所有人的可以轻松搭建mysql集群。

可行性分析:通过实践,这种方法已经实现



项目实现:

1、写服务

在vs中新建一个c#的windows服务 项目,在service的服务类中,调出dos窗口,并在dos窗口中写入需要执行的dos命令,下面以管理节点为例,进行说明。
<strong><span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;

namespace WindowsService
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {

            String a = Execute("c:\\mysql\\bin\\ndb_mgmd.exe --configdir=c:\\mysql\\bin\\config --config-file=c:\\mysql\\bin\\config\\config.ini --ndb-nodeid=1 --reload –initial ");
            if (a != null)
            Execute("exit");
        }

        protected override void OnStop()
        {
        }
        //dosCommand Dos命令语句  
        public string Execute(string dosCommand)
        {
            return Execute(dosCommand, 10);
        }
        /// <summary>  
        /// 执行DOS命令,返回DOS命令的输出  
        /// </summary>  
        /// <param name="dosCommand">dos命令</param>  
        /// <param name="milliseconds">等待命令执行的时间(单位:毫秒),  
        /// 如果设定为0,则无限等待</param>  
        /// <returns>返回DOS命令的输出</returns>  
        public static string Execute(string command, int seconds)
        {
            string output = ""; //输出字符串  
            if (command != null && !command.Equals(""))
            {
                Process process = new Process();//创建进程对象  
                ProcessStartInfo startInfo = new ProcessStartInfo();
                startInfo.FileName = "cmd.exe";//设定需要执行的命令  
                startInfo.Arguments = "/C " + command;//“/C”表示执行完命令后马上退出  
                startInfo.UseShellExecute = false;//不使用系统外壳程序启动  
                startInfo.RedirectStandardInput = false;//不重定向输入  
                startInfo.RedirectStandardOutput = true; //重定向输出  
                startInfo.CreateNoWindow = true;//不创建窗口  
                process.StartInfo = startInfo;
                try
                {
                    if (process.Start())//开始进程  
                    {
                        if (seconds == 0)
                        {
                            process.WaitForExit();//这里无限等待进程结束  
                        }
                        else
                        {
                            process.WaitForExit(seconds); //等待进程结束,等待时间为指定的毫秒  
                        }
                     //   output = process.StandardOutput.ReadToEnd();//读取进程的输出  
                    }
                }
                catch
                {
                }
                finally
                {
                    if (process != null)
                        process.Close();
                }
            }
            return output;
        }
    }
}
</span></strong>


2、安装服务

如何安装服务:先创建服务,然后启动服务。

运行命令提示符 cmd.exe
输入 sc create testservicename binpath= D:\test.exe
输入 sc start testservicename 启动服务
输入 sc stop testservicename 停止服务
输入 sc delete testservicename删除服务,该服务将在下次重启后删除,在重启之前将不能注册同一个名字的服务。

3、成果展示




项目总结:

       刚开始研究mysql集群的时候就想写个服务,一直忙别的事情,闲下来就找老崔一块鼓捣这个,玩着玩着就弄出来了。

1、事情永远没有你想的那么难,去做就好。
2、不要做重复性的事情,代码中用的是封装,mysql集群可以使用服务。


posted @ 2016-03-28 11:30  陈晓婵  阅读(207)  评论(0编辑  收藏  举报