我有一个设置,可以在其中自动执行远程服务器上的日志检查。我已经创建了像这样的方法,该方法使用exec命令来拖尾这样的日志。
Process p = Runtime.getRuntime().exec("ssh <user>@<domain> tail -f /location/logs
我将日志打印到我的终端,在这里可以运行正则表达式模式以确保它们正确。
现在,我需要对照服务器上的一些mysql表来检查日志中的某些条目。我已经使用List设置了类似的方法来执行一系列命令以返回mysql表中的条目:
List<String> cmd = Arrays.asList("ssh user@domain mysql -u user -ppassword -h ipaddress", "use database", "SELECT column1, column2, etc FROM database");
Process dumpcapProcess = Runtime.getRuntime().exec(cmd.toArray(new String[]{}));
String line;
// Reading the InputStream stream
BufferedReader reader = new BufferedReader(new InputStreamReader(dumpcapProcess.getInputStream()));
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// Reading the error stream for debug
reader = new BufferedReader(new InputStreamReader(dumpcapProcess.getErrorStream()));
while ((line = reader.readLine()) != null) {
System.out.println(line);
但它不起作用。我玩过exec字符串的语法看起来像这样:
List<String> cmd = Arrays.asList("ssh", "user@domain", "mysql", "-u", "user", "-ppassword", "-h", "ipAddress", "use databases", "SELECT columns FROM database");
现在我收到此错误:
用法:mysql [OPTIONS] [数据库]
-?、 --help显示此帮助并退出。
-I,--help是-的同义词?
--auto-rehash启用自动重新哈希。一个人不需要使用
“重新哈希”以完成表和字段,但启动
并且重新连接可能需要更长的时间。禁用
-禁用自动重新哈希。
(默认为开;使用--skip-auto-rehash禁用。)
-A,-不自动重新哈希
没有自动重新哈希。一个人必须使用“重新哈希”来获得
表和字段完成。这样可以更快地开始
mysql并在重新连接时禁用重新哈希。
-自动垂直输出
如果出现以下情况,则自动切换到垂直输出模式
结果比端子宽度宽。
-B,--batch不使用历史记录文件。禁用交互行为。
(启用-静音。)
--bind-address =名称要绑定的IP地址。
--character-sets-dir =名称
字符集文件的目录。
--column-type-info显示列类型信息。
-c,--comments保留注释。发送评论到服务器。的
默认值为--skip-comments(放弃评论),启用
与--comments。
如何运行mysql命令将结果返回到eclipse终端?
最佳答案
您可以使用-e
参数直接从命令行传递查询。例:
mysql -uuser -ppass -hhost -Ddatabase -e'show tables'
这未经测试,但应该类似于:
List<String> cmd = Arrays.asList(
"ssh",
"user@domain",
"mysql",
"-uuser",
"-ppassword",
"-h10.0.0.1",
"-Ddb",
"-e'SELECT columns FROM table'"
);