java对mysql数据库进行备份和还原
来源:互联网 发布:手机淘宝怎么改中评 编辑:程序博客网 时间:2024/05/17 23:45
package com.yc.utils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
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 java.util.Properties;
import com.yc.bean.Operate;
注意:在进行备份和还原操作时,要查看自己是否有配置好mysql的配置。即在命令行中输入这行命令是否可以执行
public class AddressUtil {
public static String time = "";// 存放时间
public static String address = "";// 存放地址
/* 可以备份一个单独的表,也可以备份整个库
* @param val 代表的是"结构"或"数据"
*
* @param addressname 代表的是文件名
*
* @param userName mysql登录名
*
* @param password登录密码
*
* @param dbName 要备份的数据库名称
*
* @return
*/
public static boolean save(Operate operate, String userName,
String password, String dbName, String table) {
String pathSql = findPath(operate.getAddressname());// 备份文件存放的路径
address = pathSql;
String val = operate.getTypes(); //获取类型
boolean flag = false;
try {
File fileSql = new File(pathSql);
// 判断文件是否存在
if (!fileSql.exists()) {
fileSql.createNewFile();
}
StringBuffer sbs = new StringBuffer();
if (table != null || "".equals(table)) {
if (val.equals("数据和结构")) {
sbs.append("mysqldump ");
sbs.append(" -u ");
sbs.append(userName + " ");
sbs.append("-p" + password + " ");
sbs.append(dbName);
sbs.append(" " + table);
} else if (val.equals("结构")) {
sbs.append("mysqldump ");
sbs.append(" -u ");
sbs.append(userName + " ");
sbs.append("-p" + password + " ");
sbs.append(" -d ");
sbs.append(dbName);
sbs.append(" " + table);
}
} else {
if (val.equals("数据和结构")) {
sbs.append("mysqldump ");
sbs.append(" -u ");
sbs.append(userName + " ");
sbs.append("-p" + password + " ");
sbs.append(dbName);
}
if (val.equals("结构")) {
sbs.append("mysqldump ");
sbs.append(" -u ");
sbs.append(userName + " ");
sbs.append("-p" + password + " ");
sbs.append(" -d ");
sbs.append(dbName);
}
}
Runtime runtime = Runtime.getRuntime();
// 调用 mysql 的 cmd:
Process child = runtime.exec("cmd /c " + sbs.toString());
// 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
InputStream in = child.getInputStream();// 控制台的输出信息作为输入流
InputStreamReader xx = new InputStreamReader(in, "utf8");// 设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
// 组合控制台输出信息字符串
BufferedReader br = new BufferedReader(xx);
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
// 要用来做导入用的sql目标文件:
FileOutputStream fout = new FileOutputStream(pathSql);
OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");
writer.write(outStr);
// 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
writer.flush();
// 别忘记关闭输入输出流
in.close();
xx.close();
br.close();
writer.close();
fout.close();
flag = true;
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
* 备份文件存放的路径
*
* @return
*/
public static String findPath(String addressname) {
String pathSql = System.getProperty("user.home") + File.separator;// C:\Users\
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
String date = sdf.format(new Date());// 获取当前的时间,以此来以时间进行命名
time = date;
if (addressname == null || "".equals(addressname)) {
pathSql += (date + ".sql");
} else {
pathSql += (addressname + ".sql");
}
return pathSql;
}
/**
* 还原操作
*
* @param operate
* @return
*/
public static boolean rollback(Operate operate, String userName,
String password, String dbName) {
boolean flag = false;
try {
String fPath = operate.getAddress();
Runtime rt = Runtime.getRuntime();
// 调用 mysql 的 cmd:
StringBuffer sbs = new StringBuffer();
sbs.append("mysql ");
sbs.append(" -u ");
sbs.append(userName + " ");
sbs.append("-p" + password + " ");
sbs.append(dbName);
// Process child = rt.exec("cmd /c "+sbs.toString());
Process child = rt.exec("cmd /c " + sbs.toString());
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();
flag = true;
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
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 java.util.Properties;
import com.yc.bean.Operate;
注意:在进行备份和还原操作时,要查看自己是否有配置好mysql的配置。即在命令行中输入这行命令是否可以执行
public class AddressUtil {
public static String time = "";// 存放时间
public static String address = "";// 存放地址
/* 可以备份一个单独的表,也可以备份整个库
* @param val 代表的是"结构"或"数据"
*
* @param addressname 代表的是文件名
*
* @param userName mysql登录名
*
* @param password登录密码
*
* @param dbName 要备份的数据库名称
*
* @return
*/
public static boolean save(Operate operate, String userName,
String password, String dbName, String table) {
String pathSql = findPath(operate.getAddressname());// 备份文件存放的路径
address = pathSql;
String val = operate.getTypes(); //获取类型
boolean flag = false;
try {
File fileSql = new File(pathSql);
// 判断文件是否存在
if (!fileSql.exists()) {
fileSql.createNewFile();
}
StringBuffer sbs = new StringBuffer();
if (table != null || "".equals(table)) {
if (val.equals("数据和结构")) {
sbs.append("mysqldump ");
sbs.append(" -u ");
sbs.append(userName + " ");
sbs.append("-p" + password + " ");
sbs.append(dbName);
sbs.append(" " + table);
} else if (val.equals("结构")) {
sbs.append("mysqldump ");
sbs.append(" -u ");
sbs.append(userName + " ");
sbs.append("-p" + password + " ");
sbs.append(" -d ");
sbs.append(dbName);
sbs.append(" " + table);
}
} else {
if (val.equals("数据和结构")) {
sbs.append("mysqldump ");
sbs.append(" -u ");
sbs.append(userName + " ");
sbs.append("-p" + password + " ");
sbs.append(dbName);
}
if (val.equals("结构")) {
sbs.append("mysqldump ");
sbs.append(" -u ");
sbs.append(userName + " ");
sbs.append("-p" + password + " ");
sbs.append(" -d ");
sbs.append(dbName);
}
}
Runtime runtime = Runtime.getRuntime();
// 调用 mysql 的 cmd:
Process child = runtime.exec("cmd /c " + sbs.toString());
// 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
InputStream in = child.getInputStream();// 控制台的输出信息作为输入流
InputStreamReader xx = new InputStreamReader(in, "utf8");// 设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
// 组合控制台输出信息字符串
BufferedReader br = new BufferedReader(xx);
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
// 要用来做导入用的sql目标文件:
FileOutputStream fout = new FileOutputStream(pathSql);
OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");
writer.write(outStr);
// 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
writer.flush();
// 别忘记关闭输入输出流
in.close();
xx.close();
br.close();
writer.close();
fout.close();
flag = true;
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
* 备份文件存放的路径
*
* @return
*/
public static String findPath(String addressname) {
String pathSql = System.getProperty("user.home") + File.separator;// C:\Users\
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
String date = sdf.format(new Date());// 获取当前的时间,以此来以时间进行命名
time = date;
if (addressname == null || "".equals(addressname)) {
pathSql += (date + ".sql");
} else {
pathSql += (addressname + ".sql");
}
return pathSql;
}
/**
* 还原操作
*
* @param operate
* @return
*/
public static boolean rollback(Operate operate, String userName,
String password, String dbName) {
boolean flag = false;
try {
String fPath = operate.getAddress();
Runtime rt = Runtime.getRuntime();
// 调用 mysql 的 cmd:
StringBuffer sbs = new StringBuffer();
sbs.append("mysql ");
sbs.append(" -u ");
sbs.append(userName + " ");
sbs.append("-p" + password + " ");
sbs.append(dbName);
// Process child = rt.exec("cmd /c "+sbs.toString());
Process child = rt.exec("cmd /c " + sbs.toString());
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();
flag = true;
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
}
阅读全文
0 0
- java对mysql数据库进行备份和还原
- Java在线备份和还原MySQL数据库。
- java实现mysql数据库备份和还原
- Java备份和还原MySQL数据库
- Java MySQL数据库备份和还原
- Window服务器 - Java进行Mysql数据库备份与还原
- 对mysql数据库进行备份和恢复
- C#调用Process进行mysql数据库备份和还原
- java对oracle数据进行备份和还原
- java备份还原mysql数据库
- Java备份还原Mysql数据库
- java 备份还原 mysql 数据库
- java mysql数据库备份还原
- Java备份还原Mysql数据库
- java备份还原mysql数据库
- Java备份&还原MySQL数据库
- 备份和还原MySQL数据库
- mysql数据库备份和还原
- 希尔排序
- 每日一诗词 —— 无题
- Codeforces Round #432 (Div. 2)C,D,E题目详解
- spring,springmvc,mybatits集成实例--多表关联查询
- 流式大数据实时处理技术、平台及应用
- java对mysql数据库进行备份和还原
- 数据库——事务隔离级别的理解
- 0.ROS 安装与配置
- bzoj 1588: [HNOI2002]营业额统计 spaly
- ECNUSUM4 J hdu5652India and China Origins
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
- 【模板】树状数组
- POJ2240-Arbitrage-C语言&&NYOJ-188
- python函数参数中*args,**kwargs的使用和意义