原理:本方法主要是使用cmd执行mysqldump这个转储数据库程序,当然有很多工具可以利用,这个只是最基础的方法
备份
备份所使用的主要是
eg:mysqldump -hhostname -uusername -ppassword databasename >db.sql
这个mysql语句,就能完全实现文件的备份.
具体在代码中体现:
/**
* 备份mysql数据库
*
* @param root
* mysql登录名
* @param rootPass
* 登录密码
* @param dbName
* 要备份的数据库名称
* @param backupsPath
* 备份的路径
* @param backupsSqlFileName
* 备份文件的名字
* @return
* @param tableName 这里实现了只备份某一张表或多张表
*这里使用了不确定参数
*备份mysql数据库的命令 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);
// 读取备份数据并生成文件
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("数据库已备份到——>>" + pathSql);
} catch (Exception e) {
System.out.println("生成m=mysql文件失败");
}
return pathSql;
}
还原
还原所使用的主要是:
//具体的含义就是执行db.sql这个文件
eg:mysql -hhostname -uusername -ppassword databasename < db.sql
具体代码体现:
public static boolean load(String root, String rootPass, String dbName, String fPath) {
try {
Runtime rt = Runtime.getRuntime();
System.out.println("还原");
// 调用 mysql 的 cmd:
String mysql = "mysql -u" + root + " -p" + rootPass + " " + dbName;
Process child = rt.exec("cmd /c " + mysql);
OutputStream out = child.getOutputStream();// 控制台的输入信息作为输出流
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);
// 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
writer.flush();
// 别忘记关闭输入输出流
out.close();
br.close();
writer.close();
System.out.println("还原成功");
} catch (Exception e) {
System.out.println("还原失败");
e.printStackTrace();
}
return true;
}
经测试,可用。
网友评论