这两天对mysql数据库的备份与恢复少有研究,终于弄清楚怎么回事了。郁闷的很……
首先:先介绍几个mysql命令——
mysqldump:是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时
这两天对mysql数据库的备份与恢复少有研究,终于弄清楚怎么回事了。郁闷的很……
首先:先介绍几个mysql命令——
mysqldump:是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。现在来看一下 mysqldump 的一些主要参数:
--compatible=name:
这个命令告诉告诉mysqldump,导出的数据和那个版本的数据库进行匹配兼容。name值可以是ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等。
--complete-insert,-c
导出的数据采用包含字段名的完整 INSERT 方式。这样可以提高插入效率,但会收到max_allowed_packet 参数限制,不建议使用。
--lock-all-tables=true/false
这个参数是在开始执行mysqldump是停掉所有的表的进程,确保表的一致性和完整性。这个选项知识和mylsam表。
--quick
这个选项在输出大量数据时比较有用,他强制mysqldump直接将数据输出而不先存缓存在输出。
--result-file=filepath
这个事告诉mysqldump将数据存储到那 就是备份的存储路径。
--default-character-set=utf8 /gb2312
这个告诉我们输出的编码格式,这个很重要,在很达成度上解决了乱码问题。
例:mysqldump -h host -u username -p password --default-character-set=utf8 databasename > filepath
恢复直接用mysql命令
例: mysql -h host -u username -p password databasename <filepath
下面看个小小的例子:
数据备份
public String getBDMessage(String path) {
LoggerCode.printInfo("---------DBBackServiceImpl--------------数据备份-----------------------");
Runtime rs = Runtime.getRuntime();
Process pro = null;
String sql = "groupsmg."+DateUtil.getSystemTime()+".sql";
try {
File filePath = new File(path);
if(!filePath.exists())
filePath.mkdir();
StringBuffer sb = new StringBuffer();
sb.append("mysqldump ");
sb.append("-h"+DBMessage.getHost()+" ");
sb.append("--user="+DBMessage.getUser());
sb.append(" --password="+DBMessage.getPass());
sb.append(" --lock-all-tables=true ");
sb.append("--result-file="+filePath+getSeparator());
sb.append(sql+" ");
sb.append("--default-character-set=utf8 ");
sb.append(DBMessage.getDatabase());
if(pro!=null){
pro.destroy();
}
String[] cmd = {"cmd","/c",sb.toString()};
pro = null;
pro = rs.exec(cmd);
//pro=rs.exec(sb.toString());liunx下的备份
int wait = pro.waitFor();
if(wait==0){
return sql;
}else{
return null;
}
} catch (Exception e) {
LoggerCode.printInfo("----------DBBackServiceImpl-----------------备份失败-------------------");
LoggerCode.printInfo(e.getMessage());
return null;
}
}
数据恢复:
public boolean DBFileRecover(String value,String path) {
LoggerCode.printInfo("------------DBBackServiceImpl---------------数据恢复-------------------");
if(value!=null&&value.length()>0&&!value.equals("undefined")){
Runtime rt = Runtime.getRuntime();
try {
File filePath = null;
if(path!=null){
filePath = new File(path);
}
if(!filePath.exists()){
filePath.mkdir();
}
DBBack back = dbDao.getDBBack(Integer.parseInt(value));
StringBuffer sb = new StringBuffer();
//sb.append(DBMessage.url);
sb.append("mysql");
sb.append(" -h"+DBMessage.getHost());
sb.append(" -u "+DBMessage.getUser());
sb.append(" -p"+DBMessage.getPass());
sb.append(" "+DBMessage.getDatabase()+" < "+filePath+getSeparator());
sb.append(back.getUrl());
String[] cmd = {"cmd","/c",sb.toString()};
Process pro = rt.exec(cmd);
int i = pro.waitFor();
//String cmd = {"sh","-c",sb.toString}
//pro = rt.exec(cmd);//liunx下的恢复数据
if(i==0){
return true;
}else{
return false;
}
} catch (Exception e) {
LoggerCode.printInfo("------------DBBackServiceImpl---------------数据恢复失败-------------------");
LoggerCode.printInfo(e.getMessage());
return false;
}
}else{
return false; }
}
这个方法是解决window、liunx下的文件路径问题;“\"--windows. "/"--liunx
public String getSeparator(){
return System.getProperties().getProperty("file.separator");
}
这个事获得用户名密码:
import org.hibernate.cfg.Configuration;
public class DBMessage {
private static Configuration cfg = null;
static {
try{
cfg = new Configuration().configure("hibernate.cfg.xml");
}catch(Exception e){
System.out.println(e.getMessage());
}
}
public static String getUser(){
return cfg.getProperty("connection.username");
}
public static String getPass(){
return cfg.getProperty("connection.password");
}
public static String getHost(){
String url = cfg.getProperty("connection.url");
String s = url.replaceAll("jdbc:mysql://", "");
s = s.replaceAll("/", ":");
String[] pare = s.split(":");
return pare[0];
}
public static String getDatabase(){
String url = cfg.getProperty("connection.url");
String s = url.replaceAll("jdbc:mysql://", "");
s = s.replaceAll("/", ":");
Sring[] pare = s.split(":");
return pare[2];
}
}
分享到:
相关推荐
在Java中实现MySQL数据库备份,主要涉及到以下几个步骤: 1. **连接MySQL**:使用JDBC(Java Database Connectivity)驱动,建立与MySQL服务器的连接。你需要在项目中添加MySQL JDBC驱动的jar包(如`mysql-...
本知识点将深入探讨如何在SpringBoot环境下对MySQL数据库进行备份与恢复,以确保数据的安全。 首先,`MysqlBackup.java` 文件很可能是实现备份和恢复功能的核心Java类。在SpringBoot中,我们可以利用JDBC(Java ...
上述代码展示了如何使用Java来实现MySQL数据库的备份和还原操作。以下是对这些操作的详细解释: 首先,代码导入了多个Java库,包括`java.io`包下的类,用于处理输入/输出流,以及`java.util`包下的类,如`Date`和`...
本文将详细讲解如何使用Java实现基于MySQL数据库的备份与还原操作。 首先,我们了解到数据库备份通常有两种主要的方式:一是使用数据库管理工具(如MySQL的Workbench),二是通过编程方式执行。在Java中,我们可以...
MySQL数据库在日常运维中扮演着至关重要的角色,因此掌握如何进行完整备份、增量备份与还原是每个IT专业人员必备的技能。在这个主题中,我们将深入探讨如何使用Java来实现这些功能。 首先,让我们理解什么是数据库...
### Java JSP 实现 MySQL 数据库备份与还原 #### 知识点概述 本文将详细介绍如何使用 Java Bean 技术配合 JSP 来实现 MySQL 数据库的备份与还原功能。在实际开发过程中,数据库的备份与恢复是非常重要的环节,它...
本项目提供了一个基于Java Servlet(jsp)的MySQL数据库数据备份与还原的源代码,帮助用户轻松地完成这一任务。 首先,我们要理解数据库备份的重要性。在日常操作中,由于硬件故障、软件错误、恶意攻击或意外删除等...
这里我们讨论的“数据库备份及还原Java源码”是一个基于Swing开发的客户端程序,专用于MySQL数据库的备份和恢复操作。下面我们将深入探讨相关知识点。 1. **数据库备份**: - **全量备份**:备份整个数据库,包括...
而`java实现数据库备份说明.txt`文件可能详细阐述了实现备份的具体步骤和技术细节,包括代码示例、配置说明和可能遇到的问题。 在实际项目中,为了提高容灾能力,我们还需要考虑备份的冗余和恢复策略。例如,可以...
MySQL数据库的备份与还原是数据库管理中的关键环节,确保数据的安全性和可恢复性。以下将详细介绍MySQL数据库的备份和还原过程。 **一、MySQL数据库的备份** 1. **启动SQLyog工具**:SQLyog是一款图形化的MySQL...
本文将详细讲解如何使用Java来实现MySQL数据库的备份与恢复功能,以及相关的关键知识点。 首先,我们需要理解数据库备份的基本原理。备份是为了防止数据丢失,通常包括全量备份和增量备份。全量备份是指复制整个...
### JAVA实现数据库备份与还原的关键知识点 #### 一、引言 随着信息技术的发展,数据库作为存储数据的核心组件,在各类业务场景中发挥着至关重要的作用。为了确保数据的安全性与完整性,定期进行数据库备份是非常...
【Java实现SQL Server及MySQL备份与还原】 在Java开发中,有时我们需要对数据库进行备份和还原操作,以确保数据的安全性和可恢复性。本篇将详细介绍如何使用Java来实现SQL Server和MySQL这两种常见数据库的备份与...
本文将详细介绍如何使用Java实现MySQL数据库的备份与还原,主要涉及以下知识点: 1. **使用数据库自带工具**: MySQL提供了`mysqldump`和`mysql`客户端工具进行数据备份和还原。`mysqldump`用于生成SQL脚本,包含...
利用JDBC连接数据库,不依耐mysql的shell命令, 适合b/s 服务器备份
Java 实现 SqlServer 及 MySql 的备份与还原 Java 实现 SqlServer 及 MySql 的备份与还原是通过使用 Java 语言来实现数据库的备份和还原操作。本文将介绍如何使用 Java 语言来实现 SqlServer 及 MySql 的备份与还原...
Java在线备份和还原MySQL数据库,使用mysqldump命令实现备份,使用mysql命令实现的还原,具体大家看源代码吧,在还原的时候足足整了我一个下午才找到错误原因,源代码里面有写原因。大家看代码就知道了。