mysql备份还原,在win7系统上可以,在winservice2008中不能成功备份大数据。
来源:互联网 发布:otg软件下载 编辑:程序博客网 时间:2024/05/16 06:55
package com.cloudmanage.struts2.kzt.service;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import org.apache.log4j.Logger;
import com.cloudmanage.global.Message;
import com.cloudmanage.ibatis.dao.IbatisDao;
public class DbService {
private static Logger log = Logger.getLogger(DbService.class);
private IbatisDao ibatisDao;
public IbatisDao getIbatisDao() {
return ibatisDao;
}
public void setIbatisDao(IbatisDao ibatisDao) {
this.ibatisDao = ibatisDao;
}
//展示所有的数据库列表
public ArrayList<HashMap> getAllDBlist() {
ArrayList<HashMap> result = new ArrayList<HashMap>();
ArrayList<HashMap> notdbhead = new ArrayList<HashMap>();
try {
result = (ArrayList<HashMap>)ibatisDao.getListByIbatis("getAllDBlist", null);
//复制出查询出的所有数据库表,然后对其进行挑选,然后返回, 挑选规则:(只获取DB_ 开头 的数据库。);
for(int i = 0;i<result.size();i++){
if(((String) result.get(i).get("Database")).startsWith("db_")){
notdbhead.add(result.get(i));
}
}
} catch (SQLException e) {
log.error("获取数据库列表失败。"+e);
}
return notdbhead;
}
//备份
public String backup(String hostIP, String userName, String password, String savePath, String fileName, String databaseName) {
InputStream in = null;
InputStreamReader xx = null;
BufferedReader br = null;
OutputStreamWriter writer = null ;
FileOutputStream fout = null;
try {
Runtime rt = Runtime.getRuntime();
// 调用 调用mysql的安装目录的命令
Process child = rt.exec( hostIP+"dump -hlocalhost -u"+ userName +" -p"+password+" "+databaseName);
// 设置导出编码为utf-8。这里必须是utf-8
// 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
in = child.getInputStream();// 控制台的输出信息作为输入流
xx = new InputStreamReader(in, "utf-8");
// 设置输出流编码为utf-8。这里必须是utf-8,否则从流中读入的是乱码
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
fout = new FileOutputStream(savePath+fileName);
writer = new OutputStreamWriter(fout, "utf-8");
// 组合控制台输出信息字符串
br = new BufferedReader(xx);
while ((inStr = br.readLine()) != null) {
// sb.append(inStr + "\r\n");
writer.write(inStr+"\r\n");
writer.flush();
}
// outStr = sb.toString();
// 要用来做导入用的sql目标文件:
/* fout = new FileOutputStream(savePath+fileName);
writer = new OutputStreamWriter(fout, "utf-8");*/
/* writer.write(outStr);
writer.flush();*/
in.close();
xx.close();
br.close();
writer.close();
fout.close();
} catch (Exception e) {
log.error("备份["+databaseName+"]失败。" +e);
return Message.getMsg("ER0043");
}finally{
try {
in.close();
} catch (IOException e) {
log.error("备份文件过程中,文件流关闭异常。" +e);
return Message.getMsg("ER0043");
}
try {
xx.close();
} catch (IOException e) {
log.error("备份文件过程中,文件流关闭异常。" +e);
return Message.getMsg("ER0043");
}
try {
br.close();
} catch (IOException e) {
log.error("备份文件过程中,文件流关闭异常。" +e);
return Message.getMsg("ER0043");
}
try {
writer.close();
} catch (IOException e) {
log.error("备份文件过程中,文件流关闭异常。" +e);
return Message.getMsg("ER0043");
}
try {
fout.close();
} catch (IOException e) {
log.error("备份文件过程中,文件流关闭异常。" +e);
return Message.getMsg("ER0043");
}
}
log.info("备份["+databaseName+"]完毕。备份文件为:["+fileName+"]。");
return "";
}
//数据还原
public String restore(String hostIP, String userName, String password, String savePath, String fileName, String databaseName) {
OutputStream outputStream = null;
BufferedReader br = null;
OutputStreamWriter writer = null;
try {
Runtime runtime = Runtime.getRuntime();
Process process = runtime
.exec( hostIP+".exe -hlocalhost -u"+userName+" -p"+password+" --default-character-set=utf8 " + databaseName);
outputStream = process.getOutputStream();
br = new BufferedReader(new InputStreamReader( new FileInputStream(savePath+fileName), "utf-8"));
String str = null;
StringBuffer sb = new StringBuffer();
writer = new OutputStreamWriter(outputStream,
"utf-8");
while ((str = br.readLine()) != null) {
// sb.append(str + "\r\n");
writer.write(str + "\r\n");
writer.flush();
}
// str = sb.toString();
/* writer = new OutputStreamWriter(outputStream,
"utf-8");*/
// writer.write(str);
writer.flush();
outputStream.close();
br.close();
writer.close();
} catch (UnsupportedEncodingException e) {
log.error("恢复["+fileName+"]备份失败。" +e);
return Message.getMsg("ER0044");
} catch (FileNotFoundException e) {
log.error("恢复["+fileName+"]备份失败。" +e);
return Message.getMsg("ER0044");
} catch (IOException e) {
log.error("恢复["+fileName+"]备份失败。" +e);
return Message.getMsg("ER0044");
}finally{
try {
outputStream.close();
} catch (IOException e) {
log.error("恢复["+fileName+"]备份失败。" +e);
return Message.getMsg("ER0044");
}
try {
br.close();
} catch (IOException e) {
log.error("恢复["+fileName+"]备份失败。" +e);
return Message.getMsg("ER0044");
}
try {
writer.close();
} catch (IOException e) {
log.error("恢复["+fileName+"]备份失败。" +e);
return Message.getMsg("ER0044");
}
}
log.info("恢复["+databaseName+"]备份成功。恢复文件为:["+fileName+"]。");
return "";
}
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import org.apache.log4j.Logger;
import com.cloudmanage.global.Message;
import com.cloudmanage.ibatis.dao.IbatisDao;
public class DbService {
private static Logger log = Logger.getLogger(DbService.class);
private IbatisDao ibatisDao;
public IbatisDao getIbatisDao() {
return ibatisDao;
}
public void setIbatisDao(IbatisDao ibatisDao) {
this.ibatisDao = ibatisDao;
}
//展示所有的数据库列表
public ArrayList<HashMap> getAllDBlist() {
ArrayList<HashMap> result = new ArrayList<HashMap>();
ArrayList<HashMap> notdbhead = new ArrayList<HashMap>();
try {
result = (ArrayList<HashMap>)ibatisDao.getListByIbatis("getAllDBlist", null);
//复制出查询出的所有数据库表,然后对其进行挑选,然后返回, 挑选规则:(只获取DB_ 开头 的数据库。);
for(int i = 0;i<result.size();i++){
if(((String) result.get(i).get("Database")).startsWith("db_")){
notdbhead.add(result.get(i));
}
}
} catch (SQLException e) {
log.error("获取数据库列表失败。"+e);
}
return notdbhead;
}
//备份
public String backup(String hostIP, String userName, String password, String savePath, String fileName, String databaseName) {
InputStream in = null;
InputStreamReader xx = null;
BufferedReader br = null;
OutputStreamWriter writer = null ;
FileOutputStream fout = null;
try {
Runtime rt = Runtime.getRuntime();
// 调用 调用mysql的安装目录的命令
Process child = rt.exec( hostIP+"dump -hlocalhost -u"+ userName +" -p"+password+" "+databaseName);
// 设置导出编码为utf-8。这里必须是utf-8
// 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
in = child.getInputStream();// 控制台的输出信息作为输入流
xx = new InputStreamReader(in, "utf-8");
// 设置输出流编码为utf-8。这里必须是utf-8,否则从流中读入的是乱码
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
fout = new FileOutputStream(savePath+fileName);
writer = new OutputStreamWriter(fout, "utf-8");
// 组合控制台输出信息字符串
br = new BufferedReader(xx);
while ((inStr = br.readLine()) != null) {
// sb.append(inStr + "\r\n");
writer.write(inStr+"\r\n");
writer.flush();
}
// outStr = sb.toString();
// 要用来做导入用的sql目标文件:
/* fout = new FileOutputStream(savePath+fileName);
writer = new OutputStreamWriter(fout, "utf-8");*/
/* writer.write(outStr);
writer.flush();*/
in.close();
xx.close();
br.close();
writer.close();
fout.close();
} catch (Exception e) {
log.error("备份["+databaseName+"]失败。" +e);
return Message.getMsg("ER0043");
}finally{
try {
in.close();
} catch (IOException e) {
log.error("备份文件过程中,文件流关闭异常。" +e);
return Message.getMsg("ER0043");
}
try {
xx.close();
} catch (IOException e) {
log.error("备份文件过程中,文件流关闭异常。" +e);
return Message.getMsg("ER0043");
}
try {
br.close();
} catch (IOException e) {
log.error("备份文件过程中,文件流关闭异常。" +e);
return Message.getMsg("ER0043");
}
try {
writer.close();
} catch (IOException e) {
log.error("备份文件过程中,文件流关闭异常。" +e);
return Message.getMsg("ER0043");
}
try {
fout.close();
} catch (IOException e) {
log.error("备份文件过程中,文件流关闭异常。" +e);
return Message.getMsg("ER0043");
}
}
log.info("备份["+databaseName+"]完毕。备份文件为:["+fileName+"]。");
return "";
}
//数据还原
public String restore(String hostIP, String userName, String password, String savePath, String fileName, String databaseName) {
OutputStream outputStream = null;
BufferedReader br = null;
OutputStreamWriter writer = null;
try {
Runtime runtime = Runtime.getRuntime();
Process process = runtime
.exec( hostIP+".exe -hlocalhost -u"+userName+" -p"+password+" --default-character-set=utf8 " + databaseName);
outputStream = process.getOutputStream();
br = new BufferedReader(new InputStreamReader( new FileInputStream(savePath+fileName), "utf-8"));
String str = null;
StringBuffer sb = new StringBuffer();
writer = new OutputStreamWriter(outputStream,
"utf-8");
while ((str = br.readLine()) != null) {
// sb.append(str + "\r\n");
writer.write(str + "\r\n");
writer.flush();
}
// str = sb.toString();
/* writer = new OutputStreamWriter(outputStream,
"utf-8");*/
// writer.write(str);
writer.flush();
outputStream.close();
br.close();
writer.close();
} catch (UnsupportedEncodingException e) {
log.error("恢复["+fileName+"]备份失败。" +e);
return Message.getMsg("ER0044");
} catch (FileNotFoundException e) {
log.error("恢复["+fileName+"]备份失败。" +e);
return Message.getMsg("ER0044");
} catch (IOException e) {
log.error("恢复["+fileName+"]备份失败。" +e);
return Message.getMsg("ER0044");
}finally{
try {
outputStream.close();
} catch (IOException e) {
log.error("恢复["+fileName+"]备份失败。" +e);
return Message.getMsg("ER0044");
}
try {
br.close();
} catch (IOException e) {
log.error("恢复["+fileName+"]备份失败。" +e);
return Message.getMsg("ER0044");
}
try {
writer.close();
} catch (IOException e) {
log.error("恢复["+fileName+"]备份失败。" +e);
return Message.getMsg("ER0044");
}
}
log.info("恢复["+databaseName+"]备份成功。恢复文件为:["+fileName+"]。");
return "";
}
}
之前是用的stringbuffer 才出现错误,现在改为这样,暂时还在测试,没有出现问题,仅在这里做个笔记,以便以后查阅
阅读全文
0 0
- mysql备份还原,在win7系统上可以,在winservice2008中不能成功备份大数据。
- java+mysql开发的系统,在系统中数据库备份还原的思路与实现
- mysql备份利器 Innobackup 大数据备份还原
- mysql 数据备份、还原
- SQL2005备份如何在SQL2000上还原
- mysql在windows下备份还原
- 在Delphi中备份和还原数据库
- mysql 数据备份和还原
- MySQL数据备份与还原
- mysql数据备份与还原
- MySQL:数据备份与还原
- MySQL数据备份与还原
- mysql数据备份与还原
- mysql数据备份与还原
- mysql数据备份与还原
- Mysql 数据备份与还原
- MySQL 数据备份与还原
- MySQL 数据备份与还原
- 程序中的配置文件
- JAVA基础之String类的介绍
- 杰卡德相似系数
- 2631: tree LCT第二题
- windows下在控制台下 mysql的一些简单的控制语句
- mysql备份还原,在win7系统上可以,在winservice2008中不能成功备份大数据。
- Coursera机器学习 Week7 笔记
- struts2之国际化(i18n)
- 全在其中
- 版本管理器的搭建
- 英语偏旁部首
- C++中的也能使用正则表达式
- 2109找女朋友(快排递归算法与非递归算法)
- List<?>和List<T>的区别?以及List 和List<Object>的关系