2013-06-02 2 views
-2

Я использую этот класс java для создания и восстановления резервной копии MySql базы данных «tcs», что я должен добавить или изменить в этом коде для создания и восстановления резервной копии MySql в Linux?Создание резервной копии MySql с помощью Java в Linux

import java.io.File; 

public class NastyDbJobs { 

    private static String dbName = "tcs"; 
    private static String dbUserName = "root"; 
    private static String dbPassword = "password"; 

    public static boolean backupDB(File file) { 
     String path = file.getPath(); 

     if (!path.contains(".sql")) { 
      file = new File(path + ".sql"); 
     } 

     String executeCmd = "mysqldump -u " + dbUserName + " -p" + dbPassword + " --add-drop-database -B " + dbName + " -r " + file.getPath(); 
     Process runtimeProcess; 
     try { 

      runtimeProcess = Runtime.getRuntime().exec(executeCmd); 
      int processComplete = runtimeProcess.waitFor(); 

      if (processComplete == 0) { 
       System.out.println("Backup created successfully"); 
       runtimeProcess.destroy(); 
       return true; 
      } else { 

       System.out.println("Could not create the backup"); 
      } 


     } catch (Exception ex) { 
      ex.printStackTrace(); 


     } 

     return false; 
    } 

    public static boolean restoreDB(File file) { 
     String path = file.getPath(); 
     if (!path.contains(".sql")) { 
      file = new File(path + ".sql"); 
     } 

     String[] executeCmd = new String[]{"mysql", "--user=" + dbUserName, "--password=" + dbPassword, "-e", "source " + file.getPath()}; 

     Process runtimeProcess; 
     try { 

      runtimeProcess = Runtime.getRuntime().exec(executeCmd); 
      int processComplete = runtimeProcess.waitFor(); 

      if (processComplete == 0) { 
       System.out.println("Backup restored successfully"); 
       return true; 
      } else { 
       System.out.println("Could not restore the backup"); 
      } 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 

     return false; 
    } 
} 
+0

Что вы имеете в виду для Linux ? Если он уже сохраняет и восстанавливает только штраф, он должен быть совместим с перекрестными для всех os's – greedybuddha

+0

. Команда exec не является кросс-платформой. – MoienGK

+0

Я вижу, я не заметил, что вы использовали команды для mysqldump. попробуйте этот http://stackoverflow.com/questions/9567699/how-to-mysqldump-on-java – greedybuddha

ответ

0

Вам придется иметь какой-то ини/Свойства файла/базы данных значение, которое указывает на полный путь туздЫшпр, если его в переменной пути. Затем замените туздЫшпр полный путь

"/myPath/mysql5/mysqldump" 

или

"c:\\myPath\\mysql5\\mysqldump" 

затем в ехес команды первого параметра передать полный путь к приложению системы туздЫшпр

+0

Вы имеете в виду, что я могу использовать exec в linux тоже? – MoienGK

+0

да, но команда для выполнения может быть разной, поэтому загрузите ее из файла, чтобы вы могли ее изменить без необходимости перекомпилировать свой код. конечно, файл ini должен быть безопасно защищен. – tgkprog

1
import java.io.File; 
import java.io.InputStream; 
import java.io.PrintStream; 
import java.util.*; 

import java.util.Date; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
public class TableBackup_1 { 

private static String ip="localhost"; 
private static String port="3306"; 
private static String database="xyz"; 
private static String user="root"; 
private static String pass="pass"; 
private static String path="/home/Admin/abc/"; 
public static void export() 
{ 
Date dateNow = new Date(); 
SimpleDateFormat dateformatyyyyMMdd = new SimpleDateFormat("yyyyMMdd"); 
String date_to_string = dateformatyyyyMMdd.format(dateNow); 
System.out.println("date into yyyyMMdd format: " + date_to_string); 
String ss="abc.sql"; 
String fullName = path + " " + date_to_string + " " + ss; 
String dumpCommand = "mysqldump " + database + " -h " + ip + " -u " + user +" -p" + pass; 
Runtime rt = Runtime.getRuntime(); 
File test=new File(fullName); 
PrintStream ps; 
try{ 
Process child = rt.exec(dumpCommand); 
ps=new PrintStream(test); 
InputStream in = child.getInputStream(); 
int ch; 
while ((ch = in.read()) != -1) { 
ps.write(ch); 
//System.out.write(ch); //to view it by console 
} 

InputStream err = child.getErrorStream(); 
while ((ch = err.read()) != -1) { 
System.out.write(ch); 
} 
}catch(Exception exc) { 
exc.printStackTrace(); 
} 
} 

public static void main(String args[]){ 
export(); 
} 
} 
+1

Не могли бы вы немного рассказать о том, что это делает и как он отвечает на вопрос? –

+0

Пробовал этот код с некоторыми настройками моего приложения EE на сервере tomcat. Это отлично работает :) –

Смежные вопросы