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

java 代码判断Mysql服务是否开启

2015-12-23 16:44 579 查看
先啰嗦一下,为什么要监听mysql服务是否开启。也不知道为什么,我们服务器上的mysql服务总是自动的就关闭了,我们要调用接口不停低向数据库中插入数据,如果mysql服务停止了,而调用接口的程序还在一直运行,那么获取的实时数据就不能插入数据库了,所以要来监听一下mysql服务是否停止了。如果mysql服务停止了,就做出相应的操作,即让程序停止,不在向数据库中插入数据直到mysql服务启动。

废话不多说上代码

package cn.com.dekn.client.webservice.tblsavevehicleweight.util;

import java.io.IOException;
import java.io.InputStream;

public class JudgeMysqlIsOpen {
public static String getInfoMySqlIsOpen(){
Process p = null;
try{
//                p = new ProcessBuilder("mysqladmin","-u yonghu -h 192.168.1.86 -p123456 -P 8806 ping").start();
//                p = new ProcessBuilder("mysqladmin -u -h -p -P","yonghu","192.168.1.86","123456", "8806","ping").start();
//访问运程服务器上的mysql
//           p = new ProcessBuilder("mysqladmin","-uyonghu","-h192.168.1.86","-p123456", "-P8806",  "ping").start();
//访问本地的mysql
p = new ProcessBuilder("mysqladmin","-uroot","-proot","ping").start();

}catch(IOException e){
return "获取mysql是否停止异常";
}
byte[] b = new byte[1024];
int readbytes = -1;
StringBuffer sb = new StringBuffer();
//读取进程输出值
//在JAVA IO中,输入输出是针对JVM而言,读写是针对外部数据源而言
InputStream in = p.getInputStream();
try{
while((readbytes = in.read(b)) != -1){
sb.append(new String(b,0,readbytes));
}
}catch(IOException e1){
return "读取流异常";
}finally {
try{
in.close();
}catch (IOException e2){
return "关闭流异常";
}
}
return sb.toString();
}

}


其中加注释的是本人还不熟悉ProcessBuilder这个类时传参情况,它是java.lang包下的一个类,JDK1.5以后才有。实验证明最后两种远程的和本地的那种格式是正确。

下面说一下mysql中查看服务是否启动的有关命令和参数的意思,先上效果图


在dos窗口运行命令,结果如图


我的mysql在安装的时候没有设置密码所以在这里没有写,如果mysql有密码也可以这样


mysql服务停止后


dos命令执行情况


以上是测试本地的,下面是测试远程的,由于公司的服务不能随便的停止,所以就只演示mysql开启时的效果




mysqladmin -u user -h 192.168.1.86 -p mima -P 3306 ping

mysqladmin 是mysql查看服务器的命令

-u 是连接数据库的用户名

-h 是远程服务器的ip地址

-p 是登陆mysql的密码(注意p是小写的)

-P 是mysql的端口号(这里的p是大写的)

ping 本人理解就是ping mysql服务是否开启

这些是在dos窗口中输入的命令时候写的。在java代码中如何写,就是我上面的代码缩写的样子了。不过有几点还是要注意一下:

1.在new ProcessBuilder实例的时候,参数传的得这样
new ProcessBuilder("mysqladmin","-uyonghu","-h192.168.1.86","-pmima", "-P3306",  "ping").start()
其中-h和ip地址之间不要有空格,还有“”双引号前后都不要有空格,其他的都一样,还有-p密码一定要放在-hip地址之后,不然也会报错。最后一点:如果是监控远程服务器上的mysql服务的状态你首先保证能ping通,其次是那个账号和密码具有远程登录的权限就是你可以用mysql -uroot -p远程登录。

有关java.lang包下的这个ProcessBuilder类,本人还在琢磨当中,目前实现功能重要,嘿嘿。

如果我说的有什么不对,或者错误,还望大神们多多指教,共同学习讨论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java mysql mysqladmin