您的位置:首页 > 编程语言 > Java开发

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

2017-03-30 14:17 555 查看
承接备份篇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+"\r\n");
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
这样,将此类放置在你的项目中运行起来即可,只要项目不被停止,它会一直工作下去的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: