项目中使用Linux脚本恢复MySQL数据库
Java Linux 脚本执行 source 恢复数据库
//备份数据库
/**
* 备份MySQL脚本 linux sh 自定义目录
*
*/
public static void backupMysqlBylinuxShell(String selectPathRoute) {
String databaseRoute = createDatabaseBackupPath(selectPathRoute);
List<String> databaseinfo = getDatabaseName();
String[] cmds = new String[]{"/bin/bash", "-c", "DB_HOST=\"" + databaseinfo.get(3) + "\"\n" +
" DB_NAME=\"" + databaseinfo.get(0) + "\"\n" +
" DATE=\"$(date +\"%Y-%m-%d-%H%M%S\")\" \n" +
" DB_USER=\"" + databaseinfo.get(1) + "\"\n" +
" DB_PASS=\"" + databaseinfo.get(2) + "\"\n" +
" BAKUP_FILE=" + databaseRoute + "/$DB_NAME-$DATE.sql\n" +
" SQL_OPT=\"-u$DB_USER -p$DB_PASS -h $DB_HOST $DB_NAME\"\n" +
" /usr/bin/mysqldump --opt $SQL_OPT > $BAKUP_FILE\n" +
" echo 'Backup success。'\n"};
try {
RmtShellExecutor.execArrayCmd("commands", cmds);
} catch (Exception e) {
e.printStackTrace();
}
}
//------------------------
/**
* 恢复数据库
* sqlPath 资源文件路径
* databaseinfo 数据库信息
*/
public static void recoveryDataBase(String sqlPath) throws Exception {
List<String> databaseinfo = getDatabaseName();
String[] cmds = new String[]{"/bin/bash", "-c", "DB_HOST=\"" + databaseinfo.get(3) + "\"\n" +
" DB_NAME=\"" + databaseinfo.get(0) + "\"\n" +
" DB_USER=\"" + databaseinfo.get(1) + "\"\n" +
" DB_PASS=\"" + databaseinfo.get(2) + "\"\n" +
" mysql -u$DB_USER -p$DB_PASS -h $DB_HOST $DB_NAME <<EOF \n" +
" source " + sqlPath + ";\n" +
"EOF\n" + // !注意 EOF要顶行
" exit; \n"};
RmtShellExecutor.execArrayCmd("commands", cmds);
}
//------------------------------
/**
* 获取数据库信息
*/
public static List<String> getDatabaseName() {
String databaseName = "namexxx";
String userName = "root";
String pwd = "root";
String jdbcip = "127.0.0.1";
List<String> dataInfo = new ArrayList<String>(4);
try {
InputStream is = MySqlImportAndExport.class.getClassLoader().getResourceAsStream("db.properties");
Properties properties = new Properties();
properties.load(is);
databaseName = properties.getProperty("jdbc.database");
log.debug("获取数据库名称:" + databaseName);
dataInfo.add(databaseName);
userName = properties.getProperty("jdbc.username");
dataInfo.add(userName);
log.debug("获取用户名:" + userName);
pwd = properties.getProperty("jdbc.password");
dataInfo.add(pwd);
log.debug("获取密码:" + pwd);
jdbcip = properties.getProperty("jdbc.mysqlIp");
dataInfo.add(jdbcip);
} catch (IOException e) {
e.printStackTrace();
}
return dataInfo;
}
//------------------------------------
/**
* 执行linux shell
* @param message
* @param args
* @throws Exception
*/
public static void execArrayCmd(String message, String[] args) throws Exception {
log.debug("---执行linux shell ---");
log.debug(message + ":");
Process process = Runtime.getRuntime().exec(args);
for (String arg : args) {
System.out.println(arg);
System.out.print(" ");
}
BufferedReader errorReader = new BufferedReader(new InputStreamReader(
process.getInputStream()));
String line = null;
while ((line = errorReader.readLine()) != null) {
System.err.println(line);
}
errorReader.close();
BufferedReader infoReader = new BufferedReader(new InputStreamReader(
process.getErrorStream()));
while ((line = infoReader.readLine()) != null) {
System.out.println(line);
}
infoReader.close();
log.debug("");
}