我有一个设置,可以在其中自动执行远程服务器上的日志检查。我已经创建了像这样的方法,该方法使用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-in​​fo显示列类型信息。
    -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'"
);

08-04 17:03