使用java实现自动备份mysql数据库

Posted on

使用java实现自动备份mysql数据库 - 苳眠的牧场 - ITeye技术网站

首页 资讯 精华 论坛 问答 博客 专栏 群组 更多 ▼

招聘 搜索

您还未登录 ! 登录 注册

苳眠的牧场

使用java实现自动备份mysql数据库 **

博客分类:

  • mysql mysql数据库备份java

     Last modified:2013-05-02 16:55:01
    
    /*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
    
     在实际应用中,定时备份数据库是一件非常重要的工作,下面是关于利用java程序实现数据库自动调用的方法,其实也不一定非要用java语言了,只要原理会了,大家大可使用其他语言来实现。话不多说,下面就来演示一下如何**自动备份mysql下的abc数据库**:
    

1,在java API中为我们提供了一个Runtime类,它可以用来调用一些程序,比如notepad.exe,cmd.exe...

具体怎么回事,想了解的同学去看API吧,下面是实现代码:Backup.java

Java代码 收藏代码

  1. import java.util.Calendar;
  2. import java.util.Date;
  3. import java.text.SimpleDateFormat;
  4. import java.io.IOException;
  5. import java.io.PrintStream;
  6. public class Backup
  7. {
  8. public static void main(String[] args)
  9. {
  10. Runtime runtime = Runtime.getRuntime();
  11. Calendar calendar = Calendar.getInstance();
  12. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss");
  13. String currentTime = dateFormat.format(calendar.getTime());
  14. Process p = null;
  15. PrintStream print = null;
  16. StringBuilder buf = new StringBuilder();
  17. for(String a : args){
  18. buf.append(a);
  19. buf.append(" ");
  20. }
  21. String databases = buf.toString();
  22. System.out.println(databases);
  23. try{
  24. p = runtime.exec("cmd /c mysqldump -uroot -p1234 -B "+databases+">"+currentTime+".sql.bak");
  25. }catch (IOException e){
  26. if( p != null ){
  27. p.destroy();
  28. }
  29. try{
  30. print = new PrintStream(currentTime+"_backup_err.log");
  31. dateFormat.applyPattern("yyyy-MM-dd HH:mm:ss");
  32. currentTime = dateFormat.format(calendar.getTime());
  33. print.println(currentTime+" backup failed.");
  34. e.printStackTrace(print);
  35. print.flush();
  36. }catch (IOException e2){
  37. }finally{
  38. if(print!=null){
  39. print.close();
  40. }
  41. }
  42. }
  43. }
  44. }
    import java.util.Calendar; import java.util.Date; import java.text.SimpleDateFormat; import java.io.IOException; import java.io.PrintStream; public class Backup { public static void main(String[] args) { Runtime runtime = Runtime.getRuntime(); Calendar calendar = Calendar.getInstance(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss"); String currentTime = dateFormat.format(calendar.getTime()); Process p = null; PrintStream print = null; StringBuilder buf = new StringBuilder(); for(String a : args){ buf.append(a); buf.append(" "); } String databases = buf.toString(); System.out.println(databases); try{ p = runtime.exec("cmd /c mysqldump -uroot -p1234 -B "+databases+">"+currentTime+".sql.bak"); }catch (IOException e){ if( p != null ){ p.destroy(); } try{ print = new PrintStream(currentTime+"_backup_err.log"); dateFormat.applyPattern("yyyy-MM-dd HH:mm:ss"); currentTime = dateFormat.format(calendar.getTime()); print.println(currentTime+" backup failed."); e.printStackTrace(print); print.flush(); }catch (IOException e2){ }finally{ if(print!=null){ print.close(); } } } } }

2,将以上java程序编译后得到Backup.class文件;

3,创建批处理文件mytask.bat: Bat代码 收藏代码

  1. @echo off
  2. cd c:\backup_wj
  3. rem 这里提倡使用绝度路径,并且如果绝度路径中有空格,记得用
  4. rem 引号将路径括起来!
  5. rem 可以将abc替换为其他数据库,多多个数据库,并用空格隔开
  6. "D:\Program Files\Java\jdk1.6.0_31\bin\java.exe" Backup abc
    @echo off cd c:\backup_wj rem 这里提倡使用绝度路径,并且如果绝度路径中有空格,记得用 rem 引号将路径括起来! rem 可以将abc替换为其他数据库,多多个数据库,并用空格隔开 "D:\Program Files\Java\jdk1.6.0_31\bin\java.exe" Backup abc

3.1:根据评论我又发现了一个新的方法,不需要使用java,直接写一个批处理文件就可以实现自动备份功能,读者可以直接使用下面的批处理文件代替原来的批处理文件,不需要在使用java了,然后按照下面的步骤制订计划任务就可以了,代码如下: Bat代码 收藏代码

  1. mysqldump -uroot -p1234 -B abc > %date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.sql.bak
    mysqldump -uroot -p1234 -B abc > %date:~0,4%%date:~5,2%%date:~8,2%
    %time:~0,2%%time:~3,2%%time:~6,2%.sql.bak

4,将Backup.class、mytask.bat放到同一个目录下,比如我就放在了c:\backup_wj目录下

5,在win7下配置任务计划,下面照着步骤一步一步走就行了:

5.1:在控制面板下找到“管理工具”——》“任务计划程序”

5.2:选择“任务计划程序库”——》“创建基本任务”

5.3:填写任务名称和描述

5.4:下面根据向导的描述操作就可以了;

5.5:点击“浏览”选择批处理文件“mytask.bat”;

5.6:点击“完成”后,选中autoBackup,点击“运行”测试一下:

是不是有一个黑窗口一闪而过,好的那么打开你存放backup.bat的目录看一看,是不是生成了一个备份文件呢?

下面是我的,不过我们的备份文件已经生成了4次,从文件名就可以看出生成的时间。

那么其中的原理大家都会了吧,其实就是让我们的操作系统定时去执行一个批处理文件“Backup.bat”,而这个批处理文件会去执行一个.class文件,这是一个java可执行文件,它会调用runtime.exec()方法,在命令行下执行一段命令,这段命令就是备份数据库的命令。

注意:对于备份的时间,我们可以设置得更加精细,通过“编辑触发器”中的“重复任务间隔”我们可以精确到每5分钟重复执行一次。具体怎么设置大家可以根据实际情况来设置。

  • 大小: 65.5 KB

  • 大小: 53.9 KB

  • 大小: 79.5 KB

  • 大小: 39 KB

  • 大小: 34.2 KB

  • 大小: 30.9 KB

  • 大小: 31.8 KB

  • 大小: 34.1 KB

  • 大小: 52.6 KB

  • 大小: 36.3 KB

  • 大小: 48.2 KB

  • 大小: 64.3 KB

  • 大小: 44.2 KB

  • 大小: 83.7 KB

  • 查看图片附件

7

5

分享到: 关于工资的三个秘密

7 楼 kjj 4 小时前

如果是java,我以为你要一条条读取,原来回头来调用mysqldump ,直接at搞定算了! 6 楼 wangjie2013 16 小时前

freezingsky 写道

mysql自身就可以实现了,实在没必要用其他的任何语言来附加,有种多余的感觉 。 mysql提供指令自动备份了吗?怎么做呀??

5 楼 freezingsky 16 小时前

mysql自身就可以实现了,实在没必要用其他的任何语言来附加,有种多余的感觉 。 4 楼 wangjie2013 19 小时前

RamosLi 写道

一行命令就能搞定: at xx:xx /every:date mysqldump xxx 命令格式自己查吧 at/? 那么如果要实现每天多次备份是不是执行多次at命令,更改为不同的时间就可以了呀? 还有,,,,怎么停止呢?

3 楼 RamosLi 19 小时前

一行命令就能搞定: at xx:xx /every:date mysqldump xxx 命令格式自己查吧 at/? 2 楼 wangjie2013 20 小时前

cgs1999 写道

使用java有点多余,其实可以新建一个批处理文件backup.bat,内容如下: Java代码 收藏代码

  1. mysqldump -uroot -p1234 -B abc>%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.sql.bak
    mysqldump -uroot -p1234 -B abc>%date:~0,4%%date:~5,2%%date:~8,2%
    %time:~0,2%%time:~3,2%%time:~6,2%.sql.bak 同样使用系统的“计划任务”实现定时备份 哈哈 你还真想的出来!哈哈 我本来也想过看看有系统有没有提供获取完整时间的方法,就查到date和time,不过没想到你拼出来了,哈哈。

1 楼 cgs1999 22 小时前

使用java有点多余,其实可以新建一个批处理文件backup.bat,内容如下: Java代码 收藏代码

  1. mysqldump -uroot -p1234 -B abc>%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.sql.bak
    mysqldump -uroot -p1234 -B abc>%date:~0,4%%date:~5,2%%date:~8,2%
    %time:~0,2%%time:~3,2%%time:~6,2%.sql.bak 同样使用系统的“计划任务”实现定时备份

发表评论

您还没有登录,请您登录后再发表评论

wangjie2013的博客

wangjie2013

小网客的博客

小网客

GoodWell的博客

GoodWell haiwuyanlzh的博客

haiwuyanlzh

hubert_bubert的博客

hubert_bubert

文章分类

存档分类

最新评论

  • wangjie2013: s1318601 写道讲下优点和适用范围及实际情况呗建议不错, ... 单例设计模式
  • s1318601: 讲下优点和适用范围及实际情况呗 单例设计模式
  • wangjie2013: yekui 写道买就不用了 ,直接去CSDN上去下就好了。地址 ... 试读《征服C指针》
  • wangjie2013: yekui 写道只是只有存在你脑子里才是有价值的,并不是说买来 ... 试读《征服C指针》
  • yekui: 只是只有存在你脑子里才是有价值的,并不是说买来的书,知识就能自 ... 试读《征服C指针》 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。若作者同意转载,必须以超链接形式标明文章原始出处和作者。 © 2003-2012 ITeye.com. All rights reserved. [ 京ICP证110151号 京公网安备110105010620 ]

This ad is supporting your extension Allow Right-Click: More info | Privacy Policy | Hide on this page

希望本站内容对您有点用处,有什么疑问或建议请在后面留言评论
转载请注明作者(RobinChia)和出处 It so life ,请勿用于任何商业用途