目前在进行一些项目开发的时候遇到要对数据库进行备份与还原的操作。在进行操作的时候在对数据库进行备份时遇到一些问题,记录下来。
数据库的备份需要调用cmd命令,起初我们是这样设计的
public void backup(String path) throws IOException{
Runtime runtime = Runtime.getRuntime();
//-u后面是用户名,-p是密码-p后面最好不要有空格,-family是数据库的名字
String cmd = "mysqldump -u userName -ppassword --set-charset=UTF8 databaseName";
Process process = runtime.exec(cmd);
InputStream inputStream = process.getInputStream();//得到输入流,写成.sql文件
InputStreamReader reader = new InputStreamReader(inputStream,"utf-8");
BufferedReader br = new BufferedReader(reader);
String s = null;
StringBuffer sb = new StringBuffer();
while((s = br.readLine()) != null){
sb.append(s+"\r\n");
}
s = sb.toString();
File file = new File(path);
file.getParentFile().mkdirs();
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(s.getBytes());
fileOutputStream.close();
br.close();
reader.close();
inputStream.close();
}
利用以上方法测试时会报错但
mysqldump -u userName -ppassword --set-charset=UTF8 databaseName
该命令放cmd命令运行时若显示 无内部命令,说明mysql数据库在环境变量中未进行配置,我们需要在系统的环境变量中path下加入mysql在本机的路径 “ D:\network\phpStudy\MySQL\bin”
在加入这个之后在cmd中可以正常运行改命令对数据库进行备份。
但在java程序中运行仍会报错 Cannot run program "mysqldump": CreateProcess error=2
还是会报mysqldump文件,具体原因暂时还不太明确,不过我们将以上命令改为
cmd /c mysqldump -u userName -ppassword --set-charset=UTF8 databaseName
之后命令就可以正常运行,不会报错了,同时数据库也备份成功
另附上还原数据库的操作:
public void recover(String path) throws IOException {
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("cmd /c mysql -u userName -p password --default-character-set=utf8 lemon");
OutputStream outputStream = process.getOutputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
String str = null;
StringBuffer sb = new StringBuffer();
while((str = br.readLine()) != null){
sb.append(str+"\r\n");
}
str = sb.toString();
System.out.println(str);
OutputStreamWriter writer = new OutputStreamWriter(outputStream,"utf-8");
writer.write(str);
writer.flush();
outputStream.close();
br.close();
writer.close();
}
点击查看更多内容
2人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦