承接备份篇1,
在备份篇1中,使用dat文件加+系统计划任务程序完成mysql定期备份任务
在这一篇,备份使用java程序定期备份mysql数据库。
下面代码和程序思想给出:
1 package com.agen.util; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.InputStreamReader; 9 import java.io.OutputStreamWriter; 10 import java.sql.Time; 11 import java.util.Date; 12 import java.util.Timer; 13 import java.util.TimerTask; 14 15 /** 16 * java程序实现mysql定期备份功能 17 * 主体思想: 18 * 1.runtime.exec(DOS命令)执行DOS命令,得到mysql备份文件 19 * 2.OutputStreamWriter将读取到的备份文件,写出到本地磁盘 20 * 3.设置定时任务TimerTask 21 * 4.timer.schedule(task, nowTime,1000*3);设置定时器相关参数并执行定时任务 22 * @author sxd 23 * 24 */ 25 public class MysqlBak { 26 27 private static String sqlUrl = ""C://Program Files//MySQL//MySQL Server 5.5//bin//mysqldump" -u root --password=root performance"; 28 private static String targetUrl = "D:\db_backup\performance_"; 29 30 public MysqlBak() throws IOException{ 31 backUp(); 32 } 33 34 35 36 37 public static void main(String[] args) { 38 Date nowTime = new Date(); 39 TimerTask task = new TimerTask() { 40 41 @Override 42 public void run() { 43 try { 44 System.out.println("mysql备份开始时间:"+nowTime.toLocaleString()); 45 MysqlBak bak = new MysqlBak(); 46 } catch (IOException e) { 47 System.out.println("异常如下:"+e); 48 } 49 50 } 51 }; 52 53 //java自带 定时器 54 Timer timer = new Timer(); 55 //参数1 要干的事情 56 //参数2 任务开始执行的时间【这里将时间定为 任务启动的时间】 57 //参数3 隔多长时间执行一次任务【毫秒为单位】 58 timer.schedule(task, nowTime,1000*3); 59 } 60 61 62 /** 63 * mysql数据库的备份 64 * @throws IOException 65 */ 66 public static void backUp() throws IOException{ 67 //每个java程序都有自己的一个Runtime类实例,使应用程序与其运行的环境相连接, 68 //应用程序不能自己创建自己的Runtime实例,只能通过getRuntime()获得 69 Runtime runtime = Runtime.getRuntime(); 70 //调用mysql安装目录的命令 71 Process child = runtime.exec(sqlUrl); 72 //读取到此子进程的输出流 73 InputStream in = child.getInputStream(); 74 //把进程执行中的控制台输出信息写入.sql文件,这就是完成了备份文件 75 //如果不对控制台信息进行读出,会导致进程堵塞无法运行 76 //设置编码为UTF-8,否则会乱码 77 InputStreamReader inputStreamReader = new InputStreamReader(in,"utf-8"); 78 //用来存储 从子进程读取到程序的每一行的数据 79 String inStr; 80 //将每一行的数据追加至stringBuffer 81 StringBuffer sb = new StringBuffer(""); 82 83 BufferedReader br = new BufferedReader(inputStreamReader); 84 System.out.println("操作命令执行首行:"+(inStr = br.readLine())); 85 while((inStr = br.readLine()) != null){ 86 sb.append(inStr+" "); 87 } 88 //获取当前时间,用于拼接备份文件的文件名 89 String nowTime = new Time(System.currentTimeMillis()).toLocaleString(); 90 //备份文件的输出流 91 FileOutputStream out = new FileOutputStream(new File(targetUrl+nowTime.replace(" ", "_").replace(":", "_")+".sql")); 92 OutputStreamWriter outputStreamWriter = new OutputStreamWriter(out,"utf-8"); 93 outputStreamWriter.write(sb.toString()); 94 outputStreamWriter.flush(); 95 96 in.close(); 97 inputStreamReader.close(); 98 br.close(); 99 out.close(); 100 outputStreamWriter.close(); 101 System.out.println("备份成功"); 102 System.out.println("mysql备份完成的时间:"+new Date().toLocaleString()); 103 104 } 105 }
这样,将此类放置在你的项目中运行起来即可,只要项目不被停止,它会一直工作下去的。