`
单眼皮小猪
  • 浏览: 122607 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java使用mysqldump备份mysql数据库

 
阅读更多
今天公司分配了新任务,备份mysql数据库或者备份某两张表,做完oracle的备份,做mysql的备份,我都无语了,不过网友是无私的,感谢网友的分享,查过资料后,终于搞定,在此备份下资料,以免将来用到。代码是从oracle数据库那边改过来的,中间可能会有注释、属性名称涉及oracle,这个无所谓的
其实代码很简单,只是需要前台传递一个是否备份全库的标识1:全库;2:备份重要数据表

类名:IEEM060501Action.java

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.Date;
import com.jysd.ms.exception.BaseException;
import com.jysd.ms.util.ReadSystemConfig;
import com.jysd.ms.util.TimeCountUtil;
import com.opensymphony.xwork2.ActionSupport;

public class IEEM060501Action extends ActionSupport {

	private static final long serialVersionUID = 1L;
	private Runtime runtime = Runtime.getRuntime();   
	private Process process = null ;   
    //返回前台数据
	private String message;
    //备份文件地址
    private String backupUrl ;
    //备份文件名

    private String dmpName;
    //备份方式
    private int backupMode;
    //备份类型
    private int backupType;
    /**
	* @方法名称: execute
	* @描述: 数据备份管理初始化方法   
	* 创建人:
	* @return String
	* @param @return     
	*/
	public String execute()throws BaseException{
		backupUrl = ReadSystemConfig.getValue("backupPath");
		return SUCCESS;
	}
	/**
	* @方法名称: backup
	* @描述: 备份数据库

	* 创建人:
	* @return String
	* @param @return
	* @param @throws BaseException     
	*/
	public String backup()throws BaseException{
		//从配置文件中读取数据库信息,并备份数据库
		boolean backupFlag = backupOracleDB(getExpString());
		if(backupFlag){
			message="备份成功!";
		}else{
			message="备份失败!";
		}
		return "backJson";
	}
   /**
	* @方法名称: backupOracleDB
	* @描述: 备份、还原 mysql数据库的方法   
	* 创建人:
	* @return boolean
	* @param @param cmdStr 备份命令 ( 即导出 )
	* @param @return     
	*/
	public boolean backupOracleDB(String cmdStr) {   
		boolean isSuccess = true;
		try {   
			process = runtime .exec(cmdStr);
			String line = null; 
			BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()));  
		   //读取ErrorStream很关键,这个解决了挂起的问题。  
		   while ((line = br.readLine()) != null){  
		        System.out.println(line);  
		    }  
		   br = new BufferedReader(new InputStreamReader(process.getInputStream()));  
		   while ((line = br.readLine()) != null){  
		        System.out.println(line);  
		    }  
		   //process.waitFor();  
			if(process.waitFor()!=0){
				isSuccess = false;
			}
		}catch (Exception e) {   
			e.printStackTrace();
			isSuccess = false;
		}   
		return isSuccess ;   
	}   
    /**
	* @方法名称: getLeftMenu
	* @描述: 获取备份数据库的执行语句,备份文件名称,以当前时间命名
	* @创建人:
	* @return String
	* @param @throws BaseException     
	*/
	private String getExpString()throws BaseException{
		StringBuffer sbu = new StringBuffer();
		try {
			sbu.append(ReadSystemConfig.getValue("mysqlPath"));
			sbu.append("mysqldump ");
			sbu.append("-h ");
			sbu.append(ReadSystemConfig.getValue("ipaddress"));
			sbu.append(" ");
			sbu.append("-u");
			sbu.append(ReadSystemConfig.getValue("username"));
			sbu.append(" ");
			sbu.append("-p");
			sbu.append(ReadSystemConfig.getValue("password"));
			sbu.append(" ");
			/*
			 * 这只是一个快捷选项,等同于同时添加
			 * --add-drop-table,--add-locks,--create-options,--quick,--extended-insert,
			 * --lock-tables,--set-charset,--disable-keys选项。
			 * 本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。
			 * 该选项默认开启,但可以用 --skip-opt 禁用。
			 */
			sbu.append("--opt ");
			//该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中
			sbu.append("-q ");
			//
			//sbu.append("--lock-all-tables=true ");
			//
			//sbu.append("--complete-insert=false ");
			//每条记录对应一个insert语句
			sbu.append("--extended-insert=false ");
			sbu.append("--result-file=");
			String filePath = ReadSystemConfig.getValue("backupPath");
			File file = new File(filePath);
			if(!file.exists()){
				file.mkdirs();
			}
			sbu.append(filePath);
			//-start-数据库备份文件名称----------------------
			//用户备份的名称为空时,以当前系统时间为备份名称;不为空时,在后面缀上系统时间
			Date date = new Date();
			if(dmpName==null){
			dmpName = TimeCountUtil.dateToString(date,"yyyyMMddHHmmss");
			}else{
			dmpName += TimeCountUtil.dateToString(date,"yyyyMMddHHmmss");
			}
			dmpName = dmpName.replace(" ","");
			dmpName = dmpName.replace(".sql","");
			sbu.append(dmpName).append(".sql");
			//-end--数据库备份文件名称----------------------
			sbu.append(" ");
			sbu.append("--default-character-set=utf8 ");
			
			//备份方式编号等于2,仅备份监测数据(实时表、日结表数据)
			if(backupMode==2){
				//sbu.append("-B");
				sbu.append(ReadSystemConfig.getValue("databaseName"));
				//sbu.append(" ");
				//sbu.append("--table");
				sbu.append(" ").append(ReadSystemConfig.getValue("realtable")).append(" ").append(ReadSystemConfig.getValue("daytable"));
			}else{
				sbu.append(ReadSystemConfig.getValue("databaseName"));
			}
		} catch (Exception e) {   
	         e.printStackTrace();
	      }
	      System.out.println(sbu.toString());
		return sbu.toString();
	}
	/**
	 * 读取数据库信息

	 */
	/*private static Properties properties = new Properties() ;
	static {
        InputStream in = ReadSystemConfig.class.getClassLoader().getResourceAsStream("backupOracle.properties");
        try {
			properties.load(in);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}*/
	
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	public String getBackupUrl() {
		return backupUrl;
	}
	public void setBackupUrl(String backupUrl) {
		this.backupUrl = backupUrl;
	}
	public String getDmpName() {
		return dmpName;
	}
	public void setDmpName(String dmpName) {
		this.dmpName = dmpName;
	}
	public int getBackupMode() {
		return backupMode;
	}
	public void setBackupMode(int backupMode) {
		this.backupMode = backupMode;
	}
	public int getBackupType() {
		return backupType;
	}
	public void setBackupType(int backupType) {
		this.backupType = backupType;
	}
	
}

general.properties
backupPath=D\:/mysqlbackup/
mysqlPath=C\://Program Files//MySQL//MySQL Server 5.1//bin//
username=root
password=123456
ipaddress=192.168.1.126
databaseName=mydb
realtable=table1
daytable=table2

差点忘了这个读取properties的类了,也贴出来吧
ReadSystemConfig.java
package com.jysd.ms.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**实现功能:
 * 类名:  ReadSystemConfig.java
 * 更新时间:  $Date$      
 * 最后更新者: $Author$
 * 修改备注:
 */
public class ReadSystemConfig {
	private static Properties properties = new Properties() ;
	static {
        InputStream in = ReadSystemConfig.class.getClassLoader().getResourceAsStream("general.properties");
        try {
			properties.load(in);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static String getValue(String key){
		
		return properties.getProperty(key);
	}
}
 
分享到:
评论

相关推荐

    mysqldump java远程备份mysql数据库 cmd备份

    下面将详细介绍如何通过CMD(命令提示符)和Java来使用mysqldump进行MySQL数据库的备份。 ### CMD备份 在Windows系统中,我们通常使用CMD(命令提示符)来执行mysqldump命令。首先,确保MySQL服务器已运行,并且...

    java备份mysql数据库

    标题“Java备份MySQL数据库”指的是使用Java编程语言来创建一个程序,该程序能够对MySQL数据库进行备份操作。这种备份通常涉及导出数据库的结构和数据,以便在需要时可以恢复到某个特定时间点的状态。在Java中实现这...

    通过Java代码备份Mysql数据库Demo

    这个“通过Java代码备份Mysql数据库Demo”是一个简单的示例,旨在帮助开发者快速理解和实践这一功能,从而节省学习和调试的时间。 首先,我们需要了解Java中用于连接MySQL数据库的JDBC(Java Database Connectivity...

    java备份与恢复mysql数据库源码

    接下来,我们来看如何编写Java代码来备份MySQL数据库。这通常涉及到执行`mysqldump`命令,这是一个MySQL提供的工具,可以生成数据库或表的SQL语句。在Java中,我们可以使用`ProcessBuilder`类来执行系统命令。以下是...

    linux和windows上备份Mysql数据库java代码

    3. **CmdUtil.java** - 在Linux和Windows系统中,备份MySQL数据库的常见方式之一是通过执行操作系统命令,比如`mysqldump`。这个类可能包含了运行操作系统命令的函数,使用Java的Runtime或ProcessBuilder类来执行...

    远程备份MySQL数据库

    "远程备份MySQL数据库" 远程备份MySQL数据库是一种非常重要的数据库管理任务,旨在保护数据库中的数据免受意外损失或篡改的影响。利用sqldump工具,可以轻松地将远程数据库备份到本地,确保数据的安全性和可靠性。 ...

    mysql数据库备份还原实战操作步骤-mysqldump备份还原

    在本文中,我们将介绍 MySQL 数据库备份还原实战操作步骤,包括使用 mysqldump 工具进行备份和恢复数据库的详细指令。 一、备份数据库 mysqldump 是 MySQL 提供的一种备份工具,使用 mysqldump 可以将 MySQL ...

    java实现mysql数据库备份

    文档中的代码采用java技术模拟mysql命令实现mysql数据库的备份!

    Java实现对Mysql数据库的备份还原

    本文将深入探讨如何使用Java语言来实现MySQL数据库的备份与还原功能,这是一个跨平台的解决方案,无论是在Windows还是Linux环境下都能正常工作。 首先,让我们了解备份和还原的基本概念。数据库备份是为了防止数据...

    java 定时备份数据库

    总之,实现Java定时备份MySQL数据库需要理解如何在Java中调用外部命令,如何创建定时任务,以及如何与Spring等框架集成。在SSM项目中,可以利用Spring的定时任务特性来优雅地管理备份任务。记得在实际应用中处理异常...

    java备份与恢复MYSQL数据库

    首先,备份MySQL数据库通常涉及两种主要方式:全量备份和增量备份。全量备份是指备份整个数据库,包括所有的表、索引、用户权限等信息。增量备份则只备份自上次备份以来发生改变的数据,这样可以节省存储空间。Java...

    Mysql数据库定时备份

    在本文中,我们将介绍三种不同的Mysql数据库定时备份方法,包括手动备份、使用定时任务备份和Java代码添加监听备份。 手动备份 手动备份是最简单的一种备份方法,只需要使用mysqldump命令将数据库备份到文件中。...

    mysql 数据库备份 java 源代码

    要进行MySQL数据库备份,我们通常会执行`mysqldump`命令,这是一个用于备份MySQL数据库的实用工具。然而,在Java中,我们可以使用JDBC(Java Database Connectivity)API来模拟这个过程。首先,我们需要创建一个JDBC...

    Java在线备份和还原MySQL数据库

    Java在线备份和还原MySQL数据库,使用mysqldump命令实现备份,使用mysql命令实现的还原,具体大家看源代码吧,在还原的时候足足整了我一个下午才找到错误原因,源代码里面有写原因。大家看代码就知道了。

    Java实现MySQL数据库备份

    在Java编程环境中,实现MySQL数据库备份通常涉及到操作系统命令行调用和文件操作。这段代码提供了一个名为`MySQLDatabaseBackup`的类,该类包含了将MySQL数据库导出为SQL文件的功能。下面将详细解释这个过程: 1. *...

    Java操作mysql备份

    以下是一个简单的Java备份MySQL数据库的步骤: 1. 引入JDBC驱动:首先需要在项目中添加MySQL的JDBC驱动依赖,以便Java程序可以连接到MySQL服务器。 2. 创建数据库连接:使用`DriverManager.getConnection()`方法,...

    java备份还原数据库

    在Java中,可以使用`Runtime.getRuntime().exec()`方法调用操作系统命令(如mysqldump for MySQL)来完成物理备份。 - **逻辑备份**:通过执行SQL语句导出数据,例如`SELECT INTO OUTFILE`或`mysqldump --no-create...

    java调用mysql命令 导入导出数据库

    在Java编程中,有时我们需要对MySQL数据库进行导入和导出操作,这通常涉及到数据库的备份、迁移或数据恢复。在给定的标题“java调用mysql命令 导入导出数据库”中,我们可以理解为使用Java来执行MySQL的命令行工具,...

    mysql(完整、增量)备份与还原

    MySQL数据库在日常运维中扮演着至关重要的角色,因此掌握如何进行完整备份、增量备份与还原是每个IT专业人员必备的技能。在这个主题中,我们将深入探讨如何使用Java来实现这些功能。 首先,让我们理解什么是数据库...

Global site tag (gtag.js) - Google Analytics