package com.trade.backupDB;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.StringTokenizer;
import com.trade.commen.*;
import com.sys.buffer.Buffers;
import com.sys.dbm.DbexecuteDAO;
import com.sys.dbm.Dbtable;
import com.sys.log.Logger;
@SuppressWarnings("unchecked")
public class Backup {
Logger log;
commMethodMgr commen;
ArrayList queryResult = new ArrayList();
Buffers inBuffer;
Buffers outBuffer;
Dbtable tradeQuery;
DBUtil dbutil = new DBUtil();
config cfg = null;
public Backup() {
log = new Logger(this);
commen = new commMethodMgr();
tradeQuery = new Dbtable();
cfg = new config();
cfg.init();
}
public void setTradeQuery(Dbtable tradeQuery) {
this.tradeQuery = tradeQuery;
}
public Dbtable getTradeQuery() {
return this.tradeQuery;
}
public void setOutBuffer(Buffers outBuffer) {
this.outBuffer = outBuffer;
}
public Buffers getOutBuffer() {
return this.outBuffer;
}
public ArrayList getQueryResult() {
return this.queryResult;
}
public void setQueryResult(ArrayList queryResult) {
this.queryResult = queryResult;
}
/**
* 批量备份表
*/
public void backupTable(Buffers inbuffer) throws IOException {
this.outBuffer = inbuffer;
this.inBuffer = inbuffer;
log.LOG_INFO("进入backupTable方法...");
int iResult = -1;
// String tableName = inbuffer.getString("TABLE_NAME");//表名组成的串
// String dir = inbuffer.getString("DIR");
// if(dir.equals("")){
// dir = cfg.getString("database_backup_files_path");//默认取配置文件中配置的数据库备份存放位置
// }
// StringTokenizer st = new StringTokenizer(tableName,"|");
// while(st.hasMoreElements()){
// String t_n = st.nextToken();//表名
// iResult = backupTable(t_n,dir);
// }
try {
String filename = "/usr/tradetype_2009." + ".sql";
String mysql = "mysqldump --user=root --password=111111 --opt bizoss_cms_new tradetype > "
+ filename;
java.lang.Runtime.getRuntime().exec(
new String[] { "sh", "-c", mysql });
} catch (Exception e) {
e.printStackTrace();
}
if (iResult != 0) {
this.outBuffer.setInt("RESULT_CODE", -1);
this.outBuffer.setString("RESULT_INFO", "业务处理失败!");
} else {
this.outBuffer.setInt("RESULT_CODE", 0);
this.outBuffer.setString("RESULT_INFO", "业务处理成功!");
}
log.LOG_INFO("退出backupTable方法...");
}
/**
* 批量还原表
*/
public void restoreTable(Buffers inbuffer) throws IOException {
this.outBuffer = inbuffer;
this.inBuffer = inbuffer;
log.LOG_INFO("进入restoreTable方法...");
int iResult = -1;
String tableName = inbuffer.getString("TABLE_NAME");
String dir = inbuffer.getString("DIR");
if(dir.equals("")){
dir = cfg.getString("database_backup_files_path");//默认取配置文件中配置的数据库备份存放位置
}
StringTokenizer st = new StringTokenizer(tableName,"|");
while(st.hasMoreElements()){
String t_n = st.nextToken();//表名
iResult = restoreTable(t_n,dir);
}
if (iResult != 0) {
this.outBuffer.setInt("RESULT_CODE", -1);
this.outBuffer.setString("RESULT_INFO", "业务处理失败!");
} else {
this.outBuffer.setInt("RESULT_CODE", 0);
this.outBuffer.setString("RESULT_INFO", "业务处理成功!");
}
log.LOG_INFO("退出restoreTable方法...");
}
//备份整个数据库
public void backupAll(Buffers inbuffer) throws IOException {
this.outBuffer = inbuffer;
this.inBuffer = inbuffer;
log.LOG_INFO("进入restoreTable方法...");
int iResult = -1;
String dbName = inbuffer.getString("DBNAME");//数据库名称
if(dbName.equals("")){
dbName = cfg.getString("mysqlbase.sid");//默认取配置文件中配置的数据库名称
}
String dir = inbuffer.getString("DIR");
if(dir.equals("")){
dir = cfg.getString("database_backup_files_path");//默认取配置文件中配置的数据库备份存放位置
}
iResult = backupAll(dbName,dir);
if (iResult != 0) {
this.outBuffer.setInt("RESULT_CODE", -1);
this.outBuffer.setString("RESULT_INFO", "业务处理失败!");
} else {
this.outBuffer.setInt("RESULT_CODE", 0);
this.outBuffer.setString("RESULT_INFO", "业务处理成功!");
}
log.LOG_INFO("退出restoreTable方法...");
}
//还原整个数据库
public void restoreAll(Buffers inbuffer) throws IOException {
this.outBuffer = inbuffer;
this.inBuffer = inbuffer;
log.LOG_INFO("进入restoreAll方法...");
int iResult = -1;
String dbName = inbuffer.getString("DBNAME");//数据库名称
if(dbName.equals("")){
dbName = cfg.getString("mysqlbase.sid");//默认取配置文件中配置的数据库名称
}
String dir = inbuffer.getString("DIR");
if(dir.equals("")){
dir = cfg.getString("database_backup_files_path");//默认取配置文件中配置的数据库备份存放位置
}
iResult = restoreAll(dbName,dir);
if (iResult != 0) {
this.outBuffer.setInt("RESULT_CODE", -1);
this.outBuffer.setString("RESULT_INFO", "业务处理失败!");
} else {
this.outBuffer.setInt("RESULT_CODE", 0);
this.outBuffer.setString("RESULT_INFO", "业务处理成功!");
}
log.LOG_INFO("退出restoreAll方法...");
}
/**
* 查询指定数据库的所有表名
* @param dbName 数据库名称
* @return ArrayList
*/
public ArrayList selAllTableInfo(String dbName){
//返回的结果集
ArrayList<HashMap> resultList = new ArrayList<HashMap>();
DbexecuteDAO exec = new DbexecuteDAO();
String sql = "select table_name, table_type,engine from information_schema.tables where table_schema='"+dbName+"' order by table_name asc";
resultList = exec.selBizQuery(sql);
String sql2 = "select count(*) as counts from ";
for (int i = 0; i < resultList.size(); i++) {
HashMap map = (HashMap)resultList.get(i);
String tableName = "";
String tableSize = "";
//计算每个表的记录数
if(map.get("table_name") != null){
tableName = map.get("table_name").toString();
tableSize = exec.selBizObject(sql2+tableName).get("counts").toString();
}
map.put("table_size", tableSize);
}
return resultList;
}
/**
* 查询指定表的表结构
* @param tableName 表名
* @return ArrayList
*/
public ArrayList selTableStructure(String tableName){
String sql = "DESCRIBE "+tableName;
ArrayList resultList = new DbexecuteDAO().selBizQuery(sql);
return resultList;
}
/**
* 备份一个表的数据
* @param tableName表名
* @param dir备份文件的存放路径
* 注:默认文件名和表名一致,如表名为user,则备份的文件名称为user.txt
*/
public int backupTable(String tableName,String dir){
String fileName = dir+tableName+".txt";
System.out.print("**********"+fileName);
if(fileIsExist(fileName)){//备份文件已存在,删除它
System.out.print("**********exist");
File file = new File(fileName);
file.delete();
}
String sql = "SELECT * INTO OUTFILE '"+fileName+"' FROM "+tableName;
dbutil.executeSql(sql);
return 0;
}
/**
* 还原一个表的数据
* @param tableName表名
* @param dir备份文件的存放路径
* 注:默认文件名和表名一致,如表名为user,则备份的文件名称为user.txt
*/
public int restoreTable(String tableName,String dir){
//还原前首先必须清空表中的数据
new DbexecuteDAO().executeSql("delete from "+tableName);
String fileName = dir+tableName+".txt";
String sql = "load data infile '"+fileName+"' into table "+tableName;
System.out.print("###############"+sql);
dbutil.executeSql(sql);
return 0;
}
/**
* 备份整个数据库
* @param dbName 数据库名称
* @param dir 数据库备份文件安装目录
*/
public int backupAll(String dbName,String dir){
ArrayList tableList = selAllTableInfo(dbName);
if(tableList != null && tableList.size() > 0){
for (int i = 0; i < tableList.size(); i++) {
HashMap map = (HashMap)tableList.get(i);
String tableName = "";
//计算每个表的记录数
if(map.get("table_name") != null){
tableName = map.get("table_name").toString();
bac
评论0
最新资源