- 浏览: 436427 次
- 性别:
文章分类
最新评论
-
nianhua2008:
你好,请问哪个cocos版本可以读取cbx文件?
Cocos3dx入门 -
ihic11:
我的为什么Receive.jsp一直有乱码?请帮忙
网银在线支付注意事项 -
奔跑的蓝猫:
楼主你好!请问这两个文件怎么使用啊?
楼主能把源代码发给我下吗 ...
简易视频聊天 -
wx_hello:
不错。。学习了。。
jquery解析xml -
ocaicai:
圣人啊,救星啊,我被这个问题折磨得蛋疼!对了,我在google ...
struts2+urlrewrite
以下为实现在windows和linux 上备份Mysql数据库的java代码,它通过动态判断操作体统和动态从链接数据库的
配置文件(本文是用hibernat的配置文件)读出数据库信息生成可执行脚本,再使用java调用此脚本而实现数据
库的备份和恢复,当然你可以根据自己的需要修改扩展,呵呵
/*
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package com.et.yizh.zhp.data;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.*;
import com.et.buss.login.Account;
import com.et.util.Log;
import com.et.util.StrUtil;
/**
* @author zhangpeng
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class DatabaseManager {
private String message="";
private String operateFlag="";
private Hashtable pageInfo=new Hashtable();
private Account objAccount=null;
private String db_tools_path = ""; //执行文件保存路径
private String db_backup_path= ""; //备份文件保存路径
private HttpServletRequest request;
//private ServletContext application;
//构造及初始化
public DatabaseManager(HttpServletRequest request){
this.request=request;
//this.application=application;
this.objAccount=(Account)request.getSession().getAttribute(Account.ACCOUNT_KEY);
this.db_backup_path= DataFile.getFilepath(); //执行文件保存路径
this.db_tools_path= DataFile.getBinpath(); //备份文件保存路径
}
//构造及初始化
public DatabaseManager(){
}
//获取错误信息
public String getMessage(){
return message;
}
/**
* 进行数据备份
*/
public int backup(){
if(this.objAccount==null){
message="对不起!请先登录,才能做此操作!";
return -1;
}
boolean flag=true;
//初始化环境
String new_id=StrUtil.generalSrid();
String fileName=new_id+".sql";
//初始化参数及文件校验
File data_file=new File(db_backup_path,fileName);//备份脚本文件对象
String binname = this.getBackBin(); //获得执行备份的文件名
File bin_file=new File(db_tools_path,binname); //执行文件对象
String para=this.getCommandParameter();
String writeMsg = bin_file.getAbsolutePath()+para+" > "+data_file.getAbsoluteFile();
File bat_file=this.writeMsgToFile(writeMsg); //执行命令的脚本文件
flag=(bin_file.exists()&&bat_file.exists()); //文件校验如果都存在为真
if(!flag){
message="备份数据库失败!提示:未找到相应的文件!";
return -1;
}
//执行备份过程
CmdUtil cmd=new CmdUtil();
try{
cmd.excute(this.getShell()+bat_file.getAbsolutePath());//执行命令脚本
int i = cmd.waitFor(); //进程退出结果
//Process process = Runtime.getRuntime().exec(bat_file.getAbsolutePath());//执行命令脚本
//int i = process.waitFor();
cmd.kill();//杀死进程
Log.write("====backup===result======"+i);
if(i!=0){
message="备份数据库失败!可能原因:服务器繁忙!请稍后重试!";
this.delFile(data_file);//非正常退出而失败时,删除已经生成的不完整文件
return -1;
}
}catch(Exception e){
this.delFile(data_file);//非正常退出而失败时,删除已经生成的不完整文件
message = "备份数据库失败!可能原因:服务器繁忙!请稍后重试!!";
Log.write(e.getMessage());
return -1;
}
return 1;
}
/**
* 进行数据恢复
*/
public int restore(){
if(this.objAccount==null){
message="对不起!请先登录,才能做此操作!";
return -1;
}
boolean flag=true;
//初始化环境
String fileName=request.getParameter("id");
if(fileName.indexOf(".sql")==-1){ //不是sql脚本文件
message="数据库恢复失败!提示:数据脚本文件格式不正确!";
return -1;
}
//初始化参数及文件校验
File data_file=new File(db_backup_path,fileName);//备份脚本文件对象
String binname = this.getRestoreBin(); //获得执行恢复的文件名
File bin_file = new File(db_tools_path,binname); //执行文件对象
String para = this.getCommandParameter();
File bat_file=this.writeMsgToFile(bin_file.getAbsolutePath()+para+" < "+data_file.getAbsoluteFile());
flag=(data_file.exists()&&bin_file.exists()&&bat_file.exists()); //文件校验
if(!flag){
message="恢复数据库失败!提示:未找到相应的文件!";
return -1;
}
//执行恢复过程
CmdUtil cmd=new CmdUtil();
try{
cmd.excute(this.getShell()+bat_file.getAbsolutePath());//执行命令脚本
int i = cmd.waitFor(); //进程等待 返回退出结果
cmd.kill();//杀死进程
Log.write("=====restore==result======"+i);
if(i!=0){
message="恢复数据库失败!可能原因:服务器繁忙!请稍后重试!";
return -1;
}
}catch(Exception e){
message = "恢复数据库失败!可能原因:服务器繁忙!请稍后重试!!";
Log.write(e.getMessage());
return -1;
}
return 1;
}
//删除文件
public void delFile(File file){
if(file.exists()){
file.delete();//删除文件
}
}
/**
* 判断操作系统,给出相应执行脚本
*/
public String getShell(){
return DataFile.isLinux()?"/bin/sh ":"";
}
/**
* 判断操作系统,使用相应的备份执行文件
*/
public String getBackBin(){
return DataFile.isLinux()?"mysqldump":"mysqldump.exe";
}
/**
* 判断操作系统,使用相应的恢复执行文件
*/
public String getRestoreBin(){
return DataFile.isLinux()?"mysql":"mysql.exe";
}
/**
* 从hibernate中获取备份和恢复的参数
*/
private String getCommandParameter(){
net.sf.hibernate.cfg.Configuration cfg=new net.sf.hibernate.cfg.Configuration();
try{
cfg.configure("/hibernate.cfg.xml");
}catch (Exception e) {
Log.write("%%%%====解析/hibernate.cfg.xml失败!! Error Creating SessionFactory %%%%");
Log.write(e.getMessage());
}
String url=cfg.getProperty("connection.url");
String s=url.replaceAll("jdbc:mysql://","");
s=s.replaceAll("/",":");
String pare[]=s.split(":");
StringBuffer sb=new StringBuffer("");
//2获得备份或恢复的参数
String host=pare[0];
String port=pare[1];
String user=cfg.getProperty("connection.username");;
String passwd=cfg.getProperty("connection.password");
String database=pare[2];
sb.append(" -h"+host);
sb.append(" -P"+port);
sb.append(" -u"+user);
sb.append(" -p"+passwd);
// sb.append(" --skip-comments -q ");//不要注释 只能在备份时用
sb.append(" -B "+database); //存储多个数据库
return sb.toString();
}
/**
* 写一段字符串到执行文件中
*/
private File writeMsgToFile(String msg){
String shellfile = DataFile.isLinux()?"temp.txt":"temp.bat";//根据操作系统
File bat_file=new File(db_tools_path,shellfile);
if(bat_file.exists()){
bat_file.delete();
}
try{
BufferedWriter out=new BufferedWriter(new FileWriter(bat_file));
out.write(msg);
out.close();
}catch(Exception e){
bat_file.delete();
return null;
}
return bat_file;
}
}
下面是上面类中用的CmdUtil类:
/**
* 创建日期 2007-01-26
*
*/
package com.et.yizh.zhp.data;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import com.et.util.Log;
/**
* @author zhangpeng
*
*/
public class CmdUtil {
private Process p = null;
/**
* @return
*/
public InputStream getErrorStream() {
return p.getErrorStream();
}
/**
* @return
*/
public InputStream getInputStream() {
return p.getInputStream();
}
/**
* @return
*/
public OutputStream getOutputStream() {
return p.getOutputStream();
}
/**
* 清除运行外部命令的线程
*
*/
public final void kill() {
if (p != null) {
p.destroy();
}
p = null;
}
/**
*
*/
public void destroy() {
p.destroy();
}
/**
* @return
*/
public int exitValue() {
return p.exitValue();
}
/**
* @return
*/
public int waitFor() {
try {
return p.waitFor();
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
return -1;
}
}
/**
* 执行一个外部命令
*
* @param shellCmd
* @return
*/
public final boolean excute(String shellCmd) {
try {
if (p != null) {
kill();
}
Runtime run = Runtime.getRuntime();
p = run.exec(shellCmd);
} catch (Exception e) {
Log.write(e.getMessage());
return false;
}
return true;
}
public final StringBuffer cmd(String shellCmd, boolean isGetCmdOutPut) {
this.excute(shellCmd);
if (!isGetCmdOutPut)
return null;
StringBuffer sb = new StringBuffer(2048);
try {
//InputStream error=p.getErrorStream();
//OutputStream out = p.getOutputStream();
DataInputStream in = new DataInputStream(p.getInputStream());
BufferedReader reader = new BufferedReader(
new InputStreamReader(in));
String line;
do {
line = reader.readLine();
if (line == null) {
break;
} else {
////System.out.println(line);
sb.append(line);
sb.append("\n");
}
} while (true);
reader.close();
} catch (Exception e) {
return null;
}
return sb;
}
}
- 数据库备份所需文件.rar (2.5 MB)
- 下载次数: 118
- 数据备份.rar (5.2 KB)
- 下载次数: 84
发表评论
-
sqllite使用事务实现删除表结构中的字段
2010-07-20 11:13 2137原因:由于sqllite alter语句不支持直接删除表字段, ... -
mysql删除字段为null的记录
2010-04-05 09:38 2087delete from dx_chapter where c_ ... -
MySQL复合语句begin...end
2010-03-18 15:26 21791、中间的每个语句都必须用分号(;)来结尾 2、DECLARE ... -
mysql触发器实例
2010-03-18 15:05 570前提有两张表: menuinfo:menu_id,menu ... -
MySQL——SQL Error: 1064, SQLState: 42000错误
2010-01-18 22:30 5354原因: 在定义字段时,有和MYSQL的保留字段有相同的。 ... -
mysql常用命令
2009-12-25 10:25 10311、 mysql> select version(); ... -
MySQL 数据库的备份和恢复
2009-12-21 13:00 945mysql,mysqldump,导出,导出 ... -
MySQL show的使用方法
2009-12-21 10:53 869a. show tables或show tables from ... -
mysql使用手册
2009-11-20 17:49 1204http://dev.mysql.com/doc/refman ... -
Sql server,Oracle,MySQL随机查询记录
2009-11-15 20:17 12281. Oracle,随机查询20条 select * f ... -
模糊查询
2009-11-09 13:40 844select * form user where instr( ... -
mysql为表指定列创建唯一索引
2009-11-08 11:54 2332为表指定列创建唯一索引 alter table mem ... -
如何配置数据库连接池
2009-10-15 22:31 943在您的WEB工程的META-INF目录里新建一个context ...
相关推荐
本文将深入探讨如何使用Java语言来实现MySQL数据库的备份与还原功能,这是一个跨平台的解决方案,无论是在Windows还是Linux环境下都能正常工作。 首先,让我们了解备份和还原的基本概念。数据库备份是为了防止数据...
通过《Linux下的MySQL数据库编程》这本书,你将能够深入理解上述知识点,并通过书中提供的代码示例实践这些概念。这将有助于你在实际项目中更好地管理和操作MySQL数据库,提升开发效率和系统稳定性。
上述代码展示了如何使用Java来实现MySQL数据库的备份和还原操作。以下是对这些操作的详细解释: 首先,代码导入了多个Java库,包括`java.io`包下的类,用于处理输入/输出流,以及`java.util`包下的类,如`Date`和`...
在Java编程环境中,实现MySQL数据库备份通常涉及到操作系统命令行调用和文件操作。这段代码提供了一个名为`MySQLDatabaseBackup`的类,该类包含了将MySQL数据库导出为SQL文件的功能。下面将详细解释这个过程: 1. *...
在Linux环境下进行MySQL数据库编程是一项基础且至关重要的技能,尤其对于系统管理员和开发人员来说。以下将详细探讨这个主题,包括Linux操作系统、MySQL数据库的基本概念、安装与配置、数据库设计、SQL语言、以及...
在Linux环境下进行MySQL数据库编程是一项基础且至关重要的技能,尤其对于系统管理员和开发人员来说。MySQL是一种流行的开源关系型数据库管理系统(RDBMS),它以其高效、可靠和易用性而受到广泛赞誉。本讲义将围绕...
在Java编程中,调用MySQL命令来导入和导出数据库是一种常见的操作,这涉及到数据库管理、数据迁移或者备份恢复等场景。在这个过程中,Java通过JDBC(Java Database Connectivity)接口与MySQL进行交互,利用MySQL...
总的来说,《Linux下的MySQL数据库编程》这本书将涵盖以上所有方面,帮助读者深入了解在Linux系统上如何有效地使用和管理MySQL数据库,从而在实际项目中实现高效、安全的数据存储和处理。通过深入学习和实践,开发者...
MySQL数据库是一种广泛使用的开源关系型数据库管理系统,以其高效、稳定和易于管理的特性深受开发者喜爱。在本篇文章中,我们将深入探讨MySQL数据库的基本操作,包括数据的增、删、改、查(CRUD)以及一些核心概念。...
- MySQL:作为最流行的开源关系型数据库,MySQL提供了C、C++、Java、Python等多种语言的API,如MySQL Connector/C,用于连接和操作数据库。 - PostgreSQL:同样强大的开源数据库,支持复杂的SQL标准和事务处理,其...
本文主要探讨在Linux平台上MySQL数据库的两种备份方法:使用Linux脚本命令和通过Java编写程序。 首先,Linux脚本命令是一种简单易行的备份方式。通过执行`mysqldump`命令,可以将MySQL数据库的数据导出为SQL格式的...
MySQL数据库是世界上最受欢迎的开源关系型数据库之一,广泛应用于各种规模的企业、网站和应用程序中。本书《MySQL数据库应用从入门到精通_第2版》旨在帮助读者从零基础开始,逐步掌握MySQL的使用技巧和高级功能,...
本文将详细讲解如何使用Java来备份MySQL数据库,尤其关注在Windows和Linux操作系统上的应用。 首先,我们需要了解Java MySQL备份的基本原理。在Java中,我们可以使用JDBC(Java Database Connectivity)API来连接和...
安装MySQL数据库时,首先需要下载适合操作系统(如Windows、Linux或macOS)的安装文件,然后按照安装向导的步骤进行操作,包括选择安装类型(如默认、开发或自定义)、设置root用户的密码、选择配置服务等。...
在Windows上打开CMD,Mac或Linux上打开Terminal,输入`mysql -u root -p`,然后输入你在安装过程中设置的密码。如果成功连接,你将看到MySQL的命令提示符。 **五、数据库管理** 1. **创建数据库**:在MySQL提示符下...
1. **安装与配置**:如何在不同的操作系统上安装MySQL,包括Windows、Linux和macOS。配置文件的解读,以及如何设置用户权限和安全选项。 2. **SQL基础**:SQL语言是管理数据库的标准,包括数据查询、插入、更新和...