mysql 备份 代码_我写的备份mysql数据库的代码

package com.ncs.opts.face.system.action;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.LineNumberReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.InterceptorRef;

import org.apache.struts2.convention.annotation.InterceptorRefs;

import org.apache.struts2.convention.annotation.Namespace;

import org.apache.struts2.convention.annotation.ParentPackage;

import org.apache.struts2.convention.annotation.Result;

import org.apache.struts2.convention.annotation.Results;

import java.util.List;

import java.util.Map;

import java.util.Properties;

import com.ncs.opts.face.common.BasicAction;

/**

*

* 属性文件jdbc.properties内容如下

*

* Jdbc.username = icpside

*

* Jdbc.password = icpside

*

* mysqlpath = C:\\Program Files\\MySQL\\MySQL Server 5.1\\bin\\ MYSQL 安装路径

*

* sqlpath = D:\\mysqlback\\ 备份路径

*

* sqlName = 要备份的文件名称 例如:beifen.sql

*

* @author MH

*

*/

@Namespace("/sys")

@ParentPackage("opts-default")

@InterceptorRefs( { @InterceptorRef("annotationInterceptor"),

@InterceptorRef("defaultStack") })

@Results( {

@Result(name = "bakDatabaseSuccess", location = "/sys/databasemanager.jsp"),

@Result(name = "bakDatabaseError", location = "/sys/databasemanager.jsp"),

@Result(name = "loadSuccess", location = "/sys/databasemanager.jsp"),

@Result(name = "loadError", location = "/sys/databasemanager.jsp"),

@Result(name = "OK", location = "/sys/mapview.jsp"),

})

public class DataBaseManagerAction extends BasicAction {

private List list;

private Map map;

public List getList() {

return list;

}

public void setList(List list) {

this.list = list;

}

public Map getMap() {

return map;

}

public void setMap(Map map) {

this.map = map;

}

private InputStream configFile;

private Properties props;

public String getProperty(String property) {

return props.getProperty(property);

}

public void loadConfig() throws IOException {

// 当前类文件目录下的文件

configFile = getClass().getResourceAsStream("/jdbc.properties");

props = new Properties();

props.load(configFile);

}

/**

* 数据备份

*

* @return

*/

@Action("bakDatabase")

public String bakDatabase() {

String backup = backup();

if (backup.equals("0")) {

this.addActionMessage("数据库备份成功!");

return "bakDatabaseSuccess";

} else {

this.addActionError("数据库备份失败,请检查配置文件是否配置有误!");

return "bakDatabaseError";

}

}

/**

* 还原数据

*

* @return

*/

@Action("recoverDatabase")

public String recoverDatabase() {

String load = load();

if (load.equals("0")) {

this.addActionMessage("数据库还原成功!");

return "loadSuccess";

} else {

this.addActionError("数据库还原失败,请检查配置文件是否配置有误!");

return "loadError";

}

}

/**

* mysql数据备份 接收脚本名,并返回此路径 sqlName为备份的脚本名比如xxx.sql 并返回结果 0为成功1为失败

*/

public static String backup() {

// 这里是读取的属性文件,也可以直接使用

String sqlName = getPprVue("data.name");

String root = getPprVue("jdbc.username");

String pass = getPprVue("jdbc.password");

String mysqlpaths = getPprVue("mysqlpath");

String sqlpath = getPprVue("sqlpath");

File backupath = new File(sqlpath);

if (!backupath.exists()) {

backupath.mkdir();

}

String command = mysqlpaths;// mysql的bin路径

command += "mysqldump ";

command += "--opt ";

// command+="--complete-insert ";

command += "-h localhost ";

command += "--user=" + root + " ";

command += "--password=" + pass + " ";

command += "--lock-all-tables=true ";

command += "--result-file=" + sqlpath + sqlName + " ";

command += "icpdb ";// 数据库名称

// command+="> D:/mysqlback/uuu.sql ";

// 得到MYSQL的用户名密码后调用 mysql 的 cmd:

try {

Process p = Runtime.getRuntime().exec(command);

System.out.println(command);

// 设置输出流编码为utf8。为了防止乱码

InputStreamReader ir = new InputStreamReader(p.getInputStream(),

"utf8");

LineNumberReader input = new LineNumberReader(ir);

String line;

while ((line = input.readLine()) != null)

System.out.println(line);

input.close();

System.out.println("/* 数据库备份成功! */");

return "0";

// 0代表成功,1代表失败

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return "1";

}

/**

* mysql数据恢复 接收脚本路径,并返回结果 0为成功1为失败

*/

public static String load() {

try {

Runtime rt = Runtime.getRuntime();

String sqlpath = getPprVue("sqlpath");

String sqlName = getPprVue("data.name");

String root = getPprVue("jdbc.username");

String pass = getPprVue("jdbc.password");

// 得到MYSQL的用户名密码后调用 mysql 的 cmd:

Process child = rt.exec(getPprVue("mysqlpath") + "mysql -u "

+ root + " -p" + pass + " icpdb");

OutputStream out = child.getOutputStream();// 控制台的输入信息作为输出流

String inStr;

StringBuffer sb = new StringBuffer("");

String outStr;

BufferedReader br = new BufferedReader(new InputStreamReader(

new FileInputStream(sqlpath + sqlName), "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();

System.out.println("/* 数据库还原成功! */");

return "0";

// 0代表成功,1代表失败

} catch (Exception e) {

e.printStackTrace();

}

return "1";

}

// 读取属性值

public static String getPprVue(String properName) {

String properValue = null;

try {

DataBaseManagerAction pro = new DataBaseManagerAction();

pro.loadConfig();

// 读取对应的KEY

properValue = pro.getProperty(properName);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return properValue;

}

// public static void main(String[] args) throws IOException {

// String backup = backup();

// System.out.println(backup);

// String load = load();

// System.out.println(load);

// }

@Action("getMAP")

public String getMAP() {

if (null != list && list.size() > 0) {

for (int i = 0; i < list.size(); i++) {

System.out.println(list.get(i));

}

}

if (null != map && map.size() > 0) {

System.out.println(map.get("name"));

System.out.println(map.get("pass"));

}

return "OK";

}

public static void main(String[] args) {

String command = "G:\\MySQL Server 5.1\\bin mysqldump --opt -h localhost --user=root --password=icpside --lock-all-tables=true --result-file=D:\\mysqlback\\backNm.sql icpdb";

try {

Process p = Runtime.getRuntime().exec(command);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值