【mysql】备份篇2:使用java程序定期备份mysql数据库

承接备份篇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 }
View Code

这样,将此类放置在你的项目中运行起来即可,只要项目不被停止,它会一直工作下去的。

原文地址:https://www.cnblogs.com/sxdcgaq8080/p/6646000.html