您的位置:首页 > 数据库 > MySQL

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

2016-03-28 11:30 495 查看

项目需求:

        在搭建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集群可以使用服务。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: