? ? ? ?Last modified:2013-05-02 16:55:01
? ? ? **********************************************
? ? ? ?在实际应用中,定时备份数据库是一件非常重要的工作,下面是关于利用java程序实现数据库自动调用的方法,其实也不一定非要用java语言了,只要原理会了,大家大可使用其他语言来实现。话不多说,下面就来演示一下如何自动备份mysql下的abc数据库:
?
1,在java?API中为我们提供了一个Runtime类,它可以用来调用一些程序,比如notepad.exe,cmd.exe...
具体怎么回事,想了解的同学去看API吧,下面是实现代码:Backup.java
?
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:?
@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了,然后按照下面的步骤制订计划任务就可以了,代码如下:
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:在控制面板下找到“管理工具”——》“任务计划程序”
?