JAVA实现数据库备份与还原
更新时间:2023-05-13 04:33:01 阅读量: 实用文档 文档下载
JAVA实现数据库备份与还原[MYSQL为例]
数据库数据的备份与还原最好是使用数据库自带的客户端软件来实现,JAVA可以通过调用mysqldump、mysql客户端软件分别进行mysql数据库的备份还原,当然前提是JAVA服务器必须安装mysql客户端软件,但是也可以通过java telnet登陆数据库服务器实现备份,关于telnet的相关资料请Google.
MYSQL支持的备份方式:
1.使用SELECT INTO ...OUTFILE,例如
SQL代码
SELECT * INTO OUTFILE "D:\\test.sql" fields terminatedby ',' lines terminatedby '' from category ;
生成的文件会存放在数据库服务器上面
SELECT INTO只备份了数据库表中的数据:如下为category备份后的文件内容
XML/HTML代码
1,ELECTRONICS,\N
2,TELEVISIONS,1
3,TUBE,2
4,LCD,2
5,PLASMA,2
6,PORTABLE ELECTRONICS,1
7,MP3 PLAYERS,6
8,FLASH,7
9,CD PLAYERS,6
10,2 WAY RADIOS,6
2.使用BACKUP TABLE,例如
SQL代码
BACKUPTABLE test_tableto 'D:\backup';
BACKUP只针对MyISAM表格,且在MYSQL 5.1的参考手册中“注释:本语句不理想”; BACKUP语句效果为拷贝数据库表中的.frm文件到数据库服务器目标目录
3.使用mysqldump程序或mysqlhotcopy脚本
MYSQL 5.1的参考手册中关于mysqldump的说明:“可用来转储数据库或搜集数据库进行备份或将数据转移到另一个SQL服务器(不一定是一个MySQL服务器)。转储包含创建表和/或装载表的SQL语句。“
JAVA可以运用Process类的exec(String str)方法调用系统命令,所以需要在服务器上安装mysqldump程序已完成备份,可以对远程的数据库服务器进行备份(配置hostname参数),备份语句具体参数参考MYSQL参考手册
MYSQL备份命令行:
SQL代码
mysqldump -hhostname -uusername -ppassword databasename > ‘backupfile’
JAVA代码如下:
Java代码
public final String BACKUP_COMMAND ="mysqldump";
public final String ENCODING ="utf8";
public boolean backup(String file) {
boolean isSuccess =true;
try {
Runtime rt = Runtime.getRuntime();
String backupStr =this.getBackupStr();
T(backupStr);
Process process = rt.exec(backupStr);
BufferedReader br =new BufferedReader(new InputStreamReader(process.getInputStream(), ENCODING));
String inStr ="";
StringBuffer sb =new StringBuffer("");
while ((inStr = br.readLine()) !=null) {
sb.append(inStr).append("");
}
String outStr = sb.toString();
OutputStreamWriter writer
FileOutputStream(file), ENCODING);
writer.write(outStr);
writer.flush();
br.close(); writer.close(); }catch (Exception e) { =new OutputStreamWriter(new
e.printStackTrace();
isSuccess =false;
}
return isSuccess;
}
private String getBackupStr() {
String backupStr = BACKUP_COMMAND +" -u" + db.getUserName() +" -p" + db.getPassword() +" -h" + db.getHost() +" --set-charset=" + db.getEncoding() +"
" + db.getName();
return backupStr;
}
MYSQL还原命令行:
SQL代码
mysql -hhostname -uusername -ppassword databasename < ‘backupfile’ JAVA代码如下:
Java代码
public final String REVERT_COMMAND ="mysql";
public boolean revert(String file) {
try {
Runtime rt = Runtime.getRuntime();
String revertStr =this.getRevertStr();
Process process = rt.exec(revertStr);
String inStr;
StringBuffer sb =new StringBuffer("");
BufferedReader br =new BufferedReader(new InputStreamReader( new FileInputStream(file), ENCODING));
while ((inStr = br.readLine()) !=null) {
sb.append(inStr).append("");
}
String outStr = sb.toString();
OutputStreamWriter writer
OutputStreamWriter(process.getOutputStream(), ENCODING);
writer.write(outStr);
writer.flush();
br.close();
writer.close();
}catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
private String getRevertStr() {
String backupStr = REVERT_COMMAND +" -u" + db.getUserName() +" -p" + db.getPassword() +" -h" + db.getHost() +" " + db.getName(); =new
return backupStr;
}
mysqlhotcopy程序,MYSQL 5.1的参考手册的说明:"如果你在服务器上进行备份,并且表均为MyISAM表,它运行在Unix和NetWare中"
实现原理和mysqldump一样,这里暂不详细说明
附上mysqldump备份后的文件的内容:DROP TAB
XML/HTML代码
CREATE TABLE `category` (
`category_id` int(11) NOT NULL auto_increment,
`name` varchar(20) NOT NULL,
`parent` int(11) default NULL,
PRIMARY KEY (`category_id`)
)ENGINE=MyISAM DEFAULTCHARSET=latin1 ROW_FORMAT=REDUNDANT;
--
-- Dumping data for table `category`
--
/*!40000 ALTER TABLE `category` DISABLE KEYS */;
LOCK TABLES `category` WRITE;
INSERT INTO `category` VALUES (1,'ELECTRONICS',NULL),(2,'TELEVISIONS',1),(3,'TUBE',2),(4,'LCD',2),(5,'PLASMA',2),(6,'PORTABLE ELECTRONICS',1),(7,'MP3 PLAYERS',6),(8,'FLASH',7),(9,'CD PLAYERS',6),(10,'2 WAY RADIOS',6);
UNLOCK TABLES;
/*!40000 ALTER TABLE `category` ENABLE KEYS */;
数据库的备份import java.io.IOException;
import javax.swing.JOptionPane;
public class JavaOutputOracle {
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
Process processexp = null;// 创建一个本机进程
String exp = "exp scott/tiger@oracle file=d:/gengen.dmp";
try {
processexp = rt.exec(exp);
if (processexp.waitFor() != 0) {
JOptionPane.showMessageDialog(null, "数据库备份失败");
} else {
JOptionPane.showMessageDialog(null, "数据库备份成功");
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
数据的恢复:
import java.io.IOException;
import javax.swing.JOptionPane;
public class OracleInput{
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
Process processexp = null;
String imp = "imp scott/tiger@oracle file=d:/gengen.dmp";
try {
processexp = rt.exec(imp);
if (processexp.waitFor() != 0) {
JOptionPane.showMessageDialog(null, "没有备份的数据库信息文件");
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
做一个项目中的数据库备份与恢复(MSSQL)
数据库备份
String webtruepath=getServletContext().getRealPath(request.getServletPath());//取Servlet的真实路径 java.io.File file=new java.io.File(webtruepath);
file=file.getParentFile();
String path=file.getPath()+"\\..\\WEB-INF\\lib\\"+name+".dbbak";//name文件名
String bakSQL="backup database school to disk=? with init";//SQL语句
java.sql.PreparedStatement bak=DBS.getConnection().prepareStatement(bakSQL);
bak.setString(1,path);//path必须是绝对路径
if(!bak.execute())over="备份成功";
else over="备份失败";
bak.close();
数据库恢复
if(!DBS.close()){
over="关闭所有链接失败";
}else{
String webtruepath=getServletContext().getRealPath(request.getServletPath()); java.io.File file=new java.io.File(webtruepath);
file=file.getParentFile();
String path=file.getPath()+"\\..\\WEB-INF\\lib\\"+name;
String reSQL="restore database school from disk=? with replace";
Class.forName(DBInf.getDriverClassName());
java.sql.Connection con=DriverManager.getConnection(DBInf.getMester());
java.sql.PreparedStatement reStmt=con.prepareStatement(reSQL);
reStmt.setString(1,path);//path必须是绝对路径
if(!reStmt.execute())over="恢复成功";
else over="恢复失败";
reStmt.close();
con.close();
}
正在阅读:
JAVA实现数据库备份与还原05-13
汉中市茶叶生产企业名录2018版201家 - 图文01-26
共青团武汉理工大学委员会文件09-15
儿童学英文数来宝,少儿英语02-16
浅析带钢的对中纠偏控制(新版)04-17
国脉信息学院数据库综合实验10-21
繁简体字对照表09-10
紧急放行管理办法11-22
云舍:迷人“土家第一村”【文化底蕴】05-20
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 还原
- 备份
- 实现
- 数据库
- JAVA
- 读《会计基础工作规范》感想
- 《测试技术》复习题2
- 济川中学初三政治期末试题 2012.1.15
- 事业单位考试土木工程施工题库
- 北京大学2013年网络学历教育艺术概论模拟题2
- 2013床垫十大品牌排名
- 201209学期《环境法》复习纲要一
- 120急诊急救管理规范
- 动物性食品中兽药最高残留限量
- 2011年宁波市中考英语真题试卷及答案~9D6E3
- 职工羽毛球比赛规程
- 英汉语中几种常见音韵修辞格的异同探析
- 第四届“叶圣陶杯”大赛
- 注射用潘托拉唑钠与奥硝唑氯化钠注射液存在配伍禁忌
- 高刚性金属板与磁性橡胶结合的新型减震材料
- 初中化学1-8单元方程式大全(按单元) 整理 - 副本
- SYBASE常见问题收集整理
- 临床药理复习习题(带答案)
- 【高层报告】2010中央经济工作会议解读:我国宏观经济形势和政策取向
- 房地产开发有限公司薪酬设计方案