java实现的MySQL自动备份和还原(struts2+Hibernate)---兼容 window+Linux
2014-05-08 09:46
801 查看
相信很多朋友都经历过数据库出问题的情况,我也同样(见我的上一篇博文:phpmyadmin误删表后的恢复过程(心惊胆跳啊) )。如果数据很大或者很重要,那么恢复起来是相当困难的,所以我们在做一个相对完善的系统时,数据库的备份/还原功能是必不可少的。本文将在javaEE环境下实现MySQL的自动备份/还原,使用了struts2和hibernate框架,MySQL版本是5.1.16。
下图展示的是web application的执行流程,
Timer是在一个随着application启动而启动的servlet中初始化,并接受一个名叫‘BACKUP_DEPLY'的参数,它告诉Timer多久去备份一次数据库(单位为小时):
每次备份数据库后,会将备份信息保存到数据库中,为此我们定义了一个PO,如下:
上图是备份过程中主要用到的类,大概过程为:
1.当Timer开始执行备份操作时,会调用BackupService(BackupServiceImpl为其实现类)中的backup()方法
2.BackupService会实例化一个BackWorker(MySQLBackupWorker为其实现类),并调用它的backup(boolean isRestore)throws Excetion方法来完成备份
3.当BackupWorker的isDone()方法返回true时,则表示备份成功(这时可以通过BackupWorker的getFileName()方法获取保存的文件名),否则是失败
BackupWorker接口定义如下:
MySQLBackupWorker是MySQL的备份/还原类,实现了BackupWorker接口,在构造函数被执行时,会读取我们预设的MySQL相关设置(即上面类图中的MySQLBackup.properties),配置文件中包含如下内容:
(使用时,请将这些配置修改为本机的实际值,当OS为Linux是,mysqlpath可以不用设置,前提是 mysqldump 命令有效)
下面是MySQLBackupWorker中在window环境下的备份实现(默认的编码是utf-8,可以改为本机值):
获取更多源代码:源代码
【本文为小弟原创文章,引用请注明出处,谢谢】
下图展示的是web application的执行流程,
Timer是在一个随着application启动而启动的servlet中初始化,并接受一个名叫‘BACKUP_DEPLY'的参数,它告诉Timer多久去备份一次数据库(单位为小时):
<servlet> <servlet-name>StartupServlet</servlet-name> <servlet-class>com.nerve.web.servlet.StartupServlet</servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>BACKUP_DELAY</param-name> <param-value>24</param-value><!--自动备份程序执行间隔,单位为小时--> </init-param> </servlet>
每次备份数据库后,会将备份信息保存到数据库中,为此我们定义了一个PO,如下:
public class Backup{ private int id; private String name; private long size; private Date addDate; //setter and getter }
上图是备份过程中主要用到的类,大概过程为:
1.当Timer开始执行备份操作时,会调用BackupService(BackupServiceImpl为其实现类)中的backup()方法
2.BackupService会实例化一个BackWorker(MySQLBackupWorker为其实现类),并调用它的backup(boolean isRestore)throws Excetion方法来完成备份
3.当BackupWorker的isDone()方法返回true时,则表示备份成功(这时可以通过BackupWorker的getFileName()方法获取保存的文件名),否则是失败
BackupWorker接口定义如下:
public interface BackupWorker { public void backup(boolean isRestore) throws Exception; public void reload(String path) throws Exception; /** * 是否备份成功 * @method name: isDone * @return type: boolean * @return */ public boolean isDone(); /** * 获取备份后文件的名称(不包括目录) * @method name: getFileName * @return type: String * @return */ public String getFileName(); /** * 获取备份后文件的大小 * @method name: getFileSize * @return type: long * @return */ public long getFileSize(); /** * 获取配置文件中自动备份的时间间隔,单位为小时 * @method name: getHours * @return type: int * @return */ public int getHours(); /** * 更新自动备份的时间间隔 * @method name: setHours * @return type: void * @param hours */ public void setHours(int hours); /** * 删除备份文件 * @method name: delete * @return type: void * @param fileName */ public void delete(String fileName); }
MySQLBackupWorker是MySQL的备份/还原类,实现了BackupWorker接口,在构造函数被执行时,会读取我们预设的MySQL相关设置(即上面类图中的MySQLBackup.properties),配置文件中包含如下内容:
(使用时,请将这些配置修改为本机的实际值,当OS为Linux是,mysqlpath可以不用设置,前提是 mysqldump 命令有效)
下面是MySQLBackupWorker中在window环境下的备份实现(默认的编码是utf-8,可以改为本机值):
public void backup(boolean isRe) throws Exception { boolean isWindow = isWindowsOS(); isRestore = isRe; if(isWindow){ this.backupWindow(); }else{ this.backupLinux(); } } /** * window下的mysql备份 * @method name: backupWindow * @return type: void */ private void backupWindow(){ try { String sqlPath = bkPath + getBackupName(); mkDir(sqlPath); StringBuffer sb = new StringBuffer(); sb.append(mysqlPath); sb.append("mysqldump "); sb.append("--opt "); sb.append("-h "); sb.append(host); sb.append(" "); sb.append("--user="); sb.append(loginName); sb.append(" "); sb.append("--password="); sb.append(loginPass); sb.append(" "); sb.append("--lock-all-tables=true "); sb.append("--result-file="); sb.append(sqlPath); sb.append(" "); sb.append("--default-character-set=utf8 "); sb.append(dbName); System.out.println(sb.toString()); Runtime cmd = Runtime.getRuntime(); try { Process p = cmd.exec(sb.toString()); int tag = p.waitFor(); System.out.println("result::: "+tag); if(tag == 0) done = true; } catch (IOException e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } }
获取更多源代码:源代码
【本文为小弟原创文章,引用请注明出处,谢谢】
相关文章推荐
- java实现的MySQL自动备份和还原(struts2+Hibernate)---兼容 window+Linux
- java+mysql开发的系统,在系统中数据库备份还原的思路与实现
- java实现mysql的备份和还原
- Java实现Sqlserver及MySql的备份与还原
- Linux 实现自动备份mysql
- Mysql学习总结(44)——Linux下如何实现mysql数据库每天自动备份定时备份
- shell脚本实现mysql自动还原(linux)
- Mysql学习总结(44)——Linux下如何实现mysql数据库每天自动备份定时备份
- linux下mysql自动备份和自动删除文件功能实现
- 在linux下实现mysql自动备份数据
- Java 实现 MySQL 数据库 备份与还原
- Java实现Sqlserver及MySql的备份与还原
- Mysql 备份脚本和window下如何实现自动备份
- Java实现Mysql的定时备份与还原
- java调用mysql的工具类实现数据库远程备份,还原,生成创建表的sql脚本
- 批处理 简单实现mysql 的 window的自动备份脚本
- linux mysql自动备份脚本改写实现
- java实现Mysql的备份与还原
- MySql在Linux上实现每天自动备份
- Linux下定时任务实现mysql自动备份并上传远程ftp