Восстановите MYSQL из строки CMD, используя среду Java - PullRequest
1 голос
/ 16 мая 2009

Я использую Java и Mysql для программы, я использую файл сценария для восстановления базы данных.

В Java я выполняю команду: в bin: mysql -u root -proot test

Пока он не запущен в строке cmd, он не будет работать правильно и восстановит базу данных.

Есть ли кто-нибудь, кто знает .. почему это происходит .. В чем проблема, почему он не работает, если я запускаю его в среде Java.

Точный синтаксис: Я использую процесс P = runtime.getRunTime (). Exec (FilePath)

где переменная FilePath имеет значение: mysql -u root -proot test

Я использую среду Windiws. в то время как если я запущу FilePath в CmdLine, он даст идеальный результат.

Очень благодарен или помог.

Ответы [ 2 ]

2 голосов
/ 23 ноября 2010

У меня была такая же проблема!

На самом деле единственное, что я мог заставить работать (в Windows, не тестировал другие платформы), это использовать командные файлы:

вот код:

public class MysqlDatabase {

private int BUFFER = 10485760;
private String host, port, user, password, db;

public MysqlDatabase(String host, String port, String user, String password, String db) {
    this.host = host;
    this.port = port;
    this.user = user;
    this.password = password;
    this.db = db;
}

public boolean restoreDatabase(String filepath) throws Exception {
    String comando = "mysql " + db + " --host=" + host + " --port=" + port
            + " --user=" + user + " --password=" + password
            + " < " + filepath;
    File f = new File("restore.bat");
    FileOutputStream fos = new FileOutputStream(f);
    fos.write(comando.getBytes());
    fos.close();
    Process run = Runtime.getRuntime().exec("cmd /C start restore.bat ");
    return true;

}

public String getFull() throws Exception {

    Process run = Runtime.getRuntime().exec(
            "mysqldump --host=" + host + " --port=" + port
            + " --user=" + user + " --password=" + password
            + " --opt "
            + "" + db);
    InputStream in = run.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(in));

    StringBuilder temp = new StringBuilder();

    int count;
    char[] cbuf = new char[BUFFER];

    while ((count = br.read(cbuf, 0, BUFFER)) != -1) {
        temp.append(cbuf, 0, count);
    }

    br.close();
    in.close();

    return temp.toString();
}}
0 голосов
/ 16 мая 2009

Я думаю, нам нужна дополнительная информация. Пока пути заданы одинаково, если он будет запускаться из командной строки, он должен запускаться так же из Runtime.exec (). Какие ошибки вы видите?

Попробуйте настроить commend в скрипте, чтобы вы могли отобразить пути и вывод команды в файл, чтобы посмотреть его позже. В UNIX это выглядело бы как

 LOGFILE=my.log
 echo $PATH > $LOGFILE
 env >> $LOGFILE
 mysql -u root -proot test< c:\test.mysql >> $LOGFILE 2>&1

Похоже, вы используете Windows, поэтому я не знаю, как именно установить командный файл; важно убедиться, что вы отправляете в файл сообщение об ошибке mysql commend.

...