注意:
1.必须把mysql bin目录加入到环境变量中,否则无法使用mysql的mysqldump命令
2.我程序中的EXE 命令其实是mysql安装bin目录中的mysqldump.exe文件,这个文件放在哪里没关系,但是路径中一定要有mysqldump.exe这个文件
public static final String USER = "root"; // 数据库帐号
public static final String PASS = "123"; // 登陆密码
public static final String DATABASE = "db_stusys"; // 需要备份的数据库名
public static final String FILEPATH = "f:\\db_stusys.sql"; // 备份的路径地址
public static final String HOST = "127.0.0.1"; // 备份的路径地址
public static final String EXE = "f:/mysqldump "; // mysqlb备份命令
/**
* 备份数据库
* @author:qiuchen
* @createTime:2012-6-26
*/
public static void dumpDb(){
//备份文件又命令创建
File file = new File(FILEPATH);
if(file.exists()){
file.delete();
}
//拼接备份命令
StringBuffer sb = new StringBuffer();
sb.append(EXE);
sb.append(DATABASE);
sb.append(" -h" + HOST);
sb.append(" -u" + USER);
sb.append(" -p" + PASS);
sb.append(" --set-charset=utf8");
sb.append(" --result-file="+FILEPATH);
try {
Process p = Runtime.getRuntime().exec(sb.toString());
// 获取进程的错误流
final InputStream is1 = p.getErrorStream();
// 获取进程的标准输入流
final InputStream is2 = p.getInputStream();
// 启动两个线程,一个线程负责读标准输出流,另一个负责读标准错误流
new Thread() {
public void run() {
BufferedReader br1 = new BufferedReader(
new InputStreamReader(is1));
try {
String line1 = null;
while ((line1 = br1.readLine()) != null) {
if (line1 != null) {
}
}
} catch (IOException e) {
try {
is1.close();
} catch (IOException e1) {
}
} finally {
try {
is1.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
new Thread() {
public void run() {
BufferedReader br2 = new BufferedReader(
new InputStreamReader(is2));
try {
String line2 = null;
StringBuffer stringBuffer = new StringBuffer();
while ((line2 = br2.readLine()) != null) {
if (line2 != null) {
System.out.println(line2);
stringBuffer.append(line2);
}
}
} catch (IOException e) {
try {
is2.close();
} catch (IOException e1) {
}
} finally {
try {
is2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
int i = p.waitFor();
if(i==0){
System.out.println("备份成功!");
}
p.destroy();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}