StringBuffer command = new StringBuffer();
String username ="root";//用户名
String password ="root";//用户密码
String host = "127.0.0.1";//从哪个主机导出数据库,如果没有指定这个值,则默认取localhost
String port ="3306";//使用的端口号
//注意哪些地方要空格,哪些不要空格
command.append("mysql -u").append(username).append(" -p").append(password)//密码是用的小p,而端口是用的大P。
.append(" -h").append(host).append(" -P").append(port).append(" ")
.append(" -e SET GLOBAL rpl_semi_sync_master_timeout = 3000 ");
Runtime runtime = Runtime.getRuntime();
runtime.exec(command);
代码很简单,就是想实现一个简单的配置my.ini的需求,但是并不返回结果,调用也失败了。求问是什么地方出问题了,谢谢
1
riverphoenix OP 因为不能重启mysql,所以放弃了直接改写配置文件的想法,现在想要不要通过调用shell脚本来解决问题
|
2
riverphoenix OP 额,现在有个想法,写一个sql脚本,然后由java来调用,但是没有实验过,
|
3
liprais 2015-06-05 16:59:59 +08:00 1
调用失败返回的什么信息?
|
4
riverphoenix OP @liprais 什么都不返回,消息直接阻塞了
|
5
Septembers 2015-06-05 17:22:17 +08:00 via Android
@riverphoenix 写个脚本吧,吧参数引入环境变量,然后运行脚本
|
6
riverphoenix OP @Septembers 现在有个问题,我的一台电脑上可能安装多个mysql,这样就需要把端口号和ip地址传给脚本,而且我执行的命令是更改mysql配置的,不知道这么做可不可以,有没有更好的方法
|
7
ruosu0710 2015-06-05 22:37:00 +08:00
你上面的java 中调用cmd .
看一下你的执行目录. 能不能用mysql或者看一下mysql有没有加入环境变量. 如果不行的话.定位到mysql 的bin目录执行. 类似/app/mysql/bin/mysql -uroot -proot |
8
wohenyingyu01 2015-06-06 11:35:26 +08:00 1
你在命令行输入这个指令会进入mysql的命令行吧?当然会阻塞了,为什么不用mysql驱动呢?
try{ Class.forName("com.mysql.jdbc.Driver"); //Java 8 new feature: try-with-resources; try(Connection con=DriverManager.getConnection( "jdbc:mysql://127.0.0.1:3306/mysql?zeroDateTimeBehavior=convertToNull", username, password); Statement s=con.createStatement(); ){ con.setAutoCommit(true); long resultImport=s.executeUpdate("SET GLOBAL rpl_semi_sync_master_timeout = 3000"); System.out.println(resultImport); }// TODO code application logic here catch(SQLException e){ e.printStackTrace(); } } catch(ClassNotFoundException cnf){ System.out.println("MySQL drivers can not be loaded!!!"); } |
9
riverphoenix OP @wohenyingyu01 谢谢,没试过在jdbc里面更改mysql配置,我试试
|
10
riverphoenix OP @ruosu0710 应该不是这个问题,我的mysql在我本地服务中可以查到,直接cmd进去也可以执行,现在就是没有好的想法,
|