博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【mysql】备份篇2:使用java程序定期备份mysql数据库
阅读量:7054 次
发布时间:2019-06-28

本文共 3710 字,大约阅读时间需要 12 分钟。

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

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

转载地址:http://jwlol.baihongyu.com/

你可能感兴趣的文章
Google I/O 2015开发者观赏指南
查看>>
编转码、CDN和AI是如何撑起短视频数百亿市场规模的
查看>>
〔译〕C# 7 的新特性
查看>>
到底谁应该对软件开发的质量负责?
查看>>
专访尤雨溪:先别管4.0了,Vue CLI重构了解一下
查看>>
Scrum指南更新:Ken Schwaber、Jeff Sutherland访谈
查看>>
jQuery 3.3.1已经发布,开发团队正在准备4.0版本
查看>>
高效使用微软Azure服务总线的消息功能
查看>>
使用C#来面向GPU编程
查看>>
自定义类加载器-从.class和.jar中读取
查看>>
资深专家都知道的Docker常用命令
查看>>
Windows 10或成为最后一个Windows版本
查看>>
携程App for Apple Watch探索
查看>>
Spotify希望自己擅于失败
查看>>
敏捷宣言和企业Scrum作者Mike Beedle去世
查看>>
5G一周热闻:华为夺联通5G大单,首张5G电话卡发放
查看>>
调研对敏捷宣言2.0的需求
查看>>
微软在C# 8中引入预览版可空引用类型
查看>>
深究JavaScript——函数调用与this详解
查看>>
书评与访谈:Software Development Metrics
查看>>