java实现mySQL数据库的备份与恢复
来源:互联网 发布:食品数据分析咨询公司 编辑:程序博客网 时间:2024/06/05 03:56
释:使用java来实现数据库的备份和恢复其原理相当简单,就是调用mysql控制台,执行其语法。
其下为生成文件保存的磁盘上并提下载。
一、数据库的备份
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
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.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.zyiot.constant.Constant;
import com.zyiot.util.PropertiesUtil;
@Controller
@RequestMapping("/backup")
public class BackupDataBaseController extends BaseController {
@RequestMapping("/database")
public void backUpDatabase(HttpServletRequest request, HttpServletResponse response) {
//备份文件路径
String downloadPath = PropertiesUtil.getProperties(Constant.DOWNLOAD_PATH);
//数据库地址
String databaseIP = PropertiesUtil.getProperties(Constant.DATABASE_IP);
//备份数据库名称
String dataBaseName = PropertiesUtil.getProperties(Constant.DATABASE_NAME);
//数据库用户名
String username = PropertiesUtil.getProperties(Constant.DATABASE_USERNAME);
//数据库用户密码
String password = PropertiesUtil.getProperties(Constant.DATABASE_PASSWORD);
//数据库可执行命令地址
//例:D://MySQL//MySQL Server 5.5//bin//
String mysqlCmd = PropertiesUtil.getProperties(Constant.MYSQL_CMD);
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmm");
// 用于生成备份文件名
String dataflag = df.format(date);
// 备份文件名
String fileName = dataBaseName + dataflag + ".sql";
// 数据库备份地址,也是数据库文件导出地址
String downloadURL = downloadPath + fileName;
File dodir = new File(downloadPath);
File dofile = new File(downloadURL);
//判断是否为文件夹
//文件夹不存在并创建
if (!dodir.exists() && !dodir.isDirectory()) {
dodir.mkdir();
}
//文件不存在并创建
if (!dofile.exists()) {
try {
dofile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
Runtime rt = Runtime.getRuntime();
try {
// 调用 调用mysql的安装目录的命令
Process child = rt.exec(mysqlCmd + "mysqldump -h " + databaseIP + " -u" + username + " -p" + password + " "+ dataBaseName);
InputStream in = child.getInputStream();// process的输出信息作为输入流
// 字节流转换成字符流,并设置输出流编码为utf-8,避免从流中读入的是乱码
InputStreamReader inr = new InputStreamReader(in, "utf-8");
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
// 组合process输出信息字符串
BufferedReader br = new BufferedReader(inr);
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
// 要用来做备份用的sql目标文件:
FileOutputStream fout = new FileOutputStream(downloadURL);
OutputStreamWriter writer = new OutputStreamWriter(fout, "utf-8");
writer.write(outStr);
writer.flush();
in.close();
inr.close();
br.close();
writer.close();
fout.close();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
// 读取备份文件,供客户端下载
File file = new File(downloadURL);
//设置响应信息
response.setContentType("application/x-msdownload");
response.setContentLength((int) file.length());
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
// 流化文件
FileInputStream fis;
fis = new FileInputStream(file);
BufferedInputStream buff = new BufferedInputStream(fis);
// 用于保存每次读取的字节和读取的长度
byte[] b = new byte[1024];
// 该值用于计算当前实际读取了多少字节
long k = 0;
// 从response对象中得到输出流,准备下载
OutputStream myout = response.getOutputStream();
// 开始循环下载
while (k < file.length()) {
int j = buff.read(b, 0, 1024);
k += j;
// 将b中的数据写到客户端的内存
myout.write(b, 0, j);
}
myout.flush();
buff.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
二、数据库的恢复
其参数和备份参数基本相同,原理相当简单,看懂备份,就能看懂恢复。
public void recover() {
try {
Runtime rt = Runtime.getRuntime();
// 调用 mysql 的 cmd:
Process child = rt.exec(mysqlCmd + "mysql.exe -h " + databaseIP + " -u" + username + " -p" + password + " "+ dataBaseName);
/**
*process的输入信息作为输出流
*其和备份原理相似,一个是输出,一个是输入
*/
OutputStream out = child.getOutputStream();
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(downloadURL), "utf-8"));
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
OutputStreamWriter writer = new OutputStreamWriter(out, "utf-8");
writer.write(outStr);
writer.flush();
out.close();
br.close();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
- java实现mySQL数据库的备份与恢复
- java 实现mysql 的备份与恢复
- JAVA实现MySQL的备份与恢复
- 如何用Java实现MySQL数据库的备份和恢复
- 如何用Java实现MySQL数据库的备份和恢复
- 如何用Java实现MySQL数据库的备份和恢复
- Java 下实现对mysql数据库的备份和恢复
- Java实现sqlserver2005的数据库的备份与恢复
- mysql的数据库的备份与恢复
- Java实现mysql的备份与恢复(亲测可行)
- MYSQL数据库的备份与恢复
- MySql数据库的备份与恢复
- MySql数据库表的备份与恢复
- mysql数据库的备份与恢复
- mysql数据库的备份与恢复
- mysql数据库的备份与恢复
- MYSQL数据库的备份与恢复
- mysql数据库的自动备份与恢复
- 蓝鸥Unity开发教程之课时11 Time和Mathf类
- 数据库事务隔离级别
- C#.NET后台读取服务器文件名称,并下载到本地
- 修改用户
- html-笔记
- java实现mySQL数据库的备份与恢复
- 一步步教你Hadoop多节点集群安装配置
- 上传本地图片兼容苹果安卓
- HDU 1394 Minimum Inversion Number(树状数组+逆序数)
- Sublime Text3注册码(可用)
- SLAM:使用G2O-ORB-SLAM(编译)
- Tab Control——属性页的子对话框中的CEdit控件无法输入的解决办法
- Android6.0 AMS启动Activity(六) AMS与PKMS关系(通过Intent获取ActivityInfo)
- JS高级程序设计笔记(一)-数据类型