原理:本方法主要是使用cmd執(zhí)行mysqldump這個(gè)轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫(kù)程序,當(dāng)然有很多工具可以利用,這個(gè)只是最基礎(chǔ)的方法
備份
備份所使用的主要是
eg:mysqldump -hhostname -uusername -ppassword databasename >db.sql
這個(gè)mysql語(yǔ)句,就能完全實(shí)現(xiàn)文件的備份.
具體在代碼中體現(xiàn):
/**
* 備份mysql數(shù)據(jù)庫(kù)
*
* @param root
* mysql登錄名
* @param rootPass
* 登錄密碼
* @param dbName
* 要備份的數(shù)據(jù)庫(kù)名稱
* @param backupsPath
* 備份的路徑
* @param backupsSqlFileName
* 備份文件的名字
* @return
* @param tableName 這里實(shí)現(xiàn)了只備份某一張表或多張表
*這里使用了不確定參數(shù)
*備份mysql數(shù)據(jù)庫(kù)的命令 mysqldump -hhostname -uusername -ppassword
* databasename > backupfile.sql
*/
public static String dbBackUp(String root, String rootPass, String dbName, String backupsPath,
String backupsSqlFileName, String... tableName) {
// 生成備份文件
String pathSql = backupsPath + backupsSqlFileName;
try {
File fileSql = new File(pathSql);
if (!fileSql.exists()) {
fileSql.createNewFile();
}
String mysql = "mysqldump -u" + root + " -p" + rootPass + " " + dbName + " ";
for (String string : tableName) {
mysql = mysql + string + " ";
}
mysql = mysql + " --default-character-set=utf8 ";
System.out.println(mysql);
System.out.println("cmd命令為:——>>>" + mysql);
Runtime runtime = Runtime.getRuntime();
Process child = runtime.exec(mysql);
// 讀取備份數(shù)據(jù)并生成文件
InputStream in = child.getInputStream();
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(pathSql), "utf8");
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "utf8"));
String line = reader.readLine();
while (line != null) {
writer.write(line + "\n");
line = reader.readLine();
}
writer.flush();
System.out.println("數(shù)據(jù)庫(kù)已備份到——>>" + pathSql);
} catch (Exception e) {
System.out.println("生成m=mysql文件失敗");
}
return pathSql;
}
還原
還原所使用的主要是:
//具體的含義就是執(zhí)行db.sql這個(gè)文件
eg:mysql -hhostname -uusername -ppassword databasename < db.sql
具體代碼體現(xiàn):
public static boolean load(String root, String rootPass, String dbName, String fPath) {
try {
Runtime rt = Runtime.getRuntime();
System.out.println("還原");
// 調(diào)用 mysql 的 cmd:
String mysql = "mysql -u" + root + " -p" + rootPass + " " + dbName;
Process child = rt.exec("cmd /c " + mysql);
OutputStream out = child.getOutputStream();// 控制臺(tái)的輸入信息作為輸出流
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fPath), "utf8"));
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");
writer.write(outStr);
// 注:這里如果用緩沖方式寫入文件的話,會(huì)導(dǎo)致中文亂碼,用flush()方法則可以避免
writer.flush();
// 別忘記關(guān)閉輸入輸出流
out.close();
br.close();
writer.close();
System.out.println("還原成功");
} catch (Exception e) {
System.out.println("還原失敗");
e.printStackTrace();
}
return true;
}
經(jīng)測(cè)試,可用。