zoukankan      html  css  js  c++  java
  • 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: est.exe
    输入 sc start testservicename 启动服务
    输入 sc stop testservicename 停止服务
    输入 sc delete testservicename删除服务,该服务将在下次重启后删除,在重启之前将不能注册同一个名字的服务。

    3、成果展示




    项目总结:

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

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


  • 相关阅读:
    对象的数组去重
    js中map()、some()、every()、filter()的区别
    vue-cli3.0 vue脚手架3.0的使用
    统计各元素出现的次数(字符串,数组)
    string转换为其它数据类型 atoi _atoi_l, _wtoi, _wtoi_l
    static_cast void*
    printf()
    strlen _tcslen
    CSting 类型转换
    模板
  • 原文地址:https://www.cnblogs.com/chenxiaochan/p/7237583.html
Copyright © 2011-2022 走看看