【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+"\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

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

时间: 2024-08-02 15:00:55

【mysql】备份篇2:使用java程序定期备份mysql数据库的相关文章

如何在Java程序中访问mysql数据库中的数据并进行简单的操作_Mysql

在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据并进行简单的操作,具体详情请看下文. 创建一个javaProject,并输入如下java代码: package link; import java.sql.*; /** * 使用JDBC连接数据库MySQL的过程 * DataBase:fuck, table:person: * 使用myeclipse对mysql数据库进行增删改查的基本操作. */ public

教你怎样在java程序中引入neo4j数据库

随着关系型数据库在某些方面的力不从心,了解当下流行的各种数据库模式的特点和性能,无疑会给我们提供更多的选择和方向. neo4j是一种图形数据库,在遍历和关联查询方面具有突出的优势.废话少说,深入了解neo4j之前,先让我们尝试一下怎样在程序中使用neo4j. neo4j采用java语言开发,如果我们要在java程序中以内嵌方式使用neo4j,只需导入neo4j的对应包即可. 首先,我们来创建一个maven项目并修改pom.xml添加对neo4j的依赖. <?xml version="1.0

java程序将汉字存入mysql数据库中时变成乱码

今天郁闷了一天,java程序在向mysql插入数据前不是乱码,数据库安装时也选了编码为utf8(和我程序的编码格式一致).可是插入数据就变成乱码,相当郁闷. 原因:mysql的配置文件中的编码并没有改成utf8,: 解决办法:在mysql的安装目录下找到my.ini文件,将里面两处涉及编码的地方改成utf8,如下: # MySQL Server Instance Configuration File # ----------------------------------------------

Java程序员快速入门Go语言

这篇文章帮助Java程序员快速入门Go语言. 转载至 开源中国社区. http://www.oschina.net 本文将以一个有代表性的例子为开始,以此让Java程序员对Go语言有个初步认识,随后将详细的描述Go语言的各个构成模块,最后以一个例子来讲解Go语言与Java语言的不同点.   先来认识堆栈(例子) 为了满足大家的好奇心,我们将开始于一个麻雀虽小但五脏内全的例子,这个例子将是Stack.java的Go语言版本. 01 //实现堆栈的包集合 02 package collection

mysql-求助。。java程序访问数据库试用AS别名报错Column &amp;amp;#39;userid&amp;amp;#39; not found.

问题描述 求助..java程序访问数据库试用AS别名报错Column 'userid' not found. 本人小白java程序中访问mysql数据库去掉AS别名就可以正常访问,加上别名就报错Column 'userid' not found. 这个别名很重要..求大神帮助 解决方案 as这个关键字是可以省略的 解决方案二: AS别名指定的是返回的column的名称,要看你在JDBC中是怎么使用的了. 检查下所有使用了userid列名称的地方是否都正确设置了AS 别名了呢. 解决方案三: sp

sql server-如何在SQL Server 数据库中调用JAVA程序

问题描述 如何在SQL Server 数据库中调用JAVA程序 工作中 遇到一个实际的问题如下: 一个在线的SQL server数据库A,他的一个触发器在数据库有更新时把新的数据插入的到另一个SQL server 数据库B,已经写好的一个JAVA程序可以把B中的数据全部复制到一个Oracle 数据库C中,并且立即把数据库B中的数据清空.现在希望这个程序能够自动执行,就是JAVA程序能够在检测到B中有新数据后立即开始自动执行.我已经知道对于Oracle数据库可以通过触发器直接调用JAVA程序,可是

JAVA程序员必读:基础篇(8)

程序|程序员 JAVA程序员必读:基础篇时间:2001/09/13 13:31 作者:ZSC 太平洋网络学院 2.6什么是接口 接口是一个收集方法和常数表单的契约.当类执行一个接口,它就许诺声明在那个接口中执行所有的方法. 接口是一个设备或者一个系统,它是用于交互的无关的实体.根据这个定义,远程控制是一个在你和电视的接口:而英语是两个人之间的接口:强制在军事中的行为协议是不同等价人之间的接口.在JAVA语言中,接口是一个设备,它是用来与其它对象交互的设备.一个接口可能对一个协议是类似的.实际上,

JAVA程序员必读:基础篇(9)

程序|程序员 JAVA程序员必读:基础篇时间:2001/09/13 13:31作者:ZSC 太平洋网络学院 2.8 面向对象概念的问题和练习 本节教程测试一下你对对象.类.消息等等的理解,我们是通过做一些练习以及回答一些问题来进行的. 2.8.1 问题 你可以使用API文档来回答这些问题: ClickMe applet使用Color.red来设置画图颜色为红色.其它有什么颜色可以象这样来使用? 怎样设置颜色为紫色(purple)? 2.8.2 练习 现在,利用你从API文档中学到的知识来修改Cl

JAVA程序员必读:基础篇(7)

程序|程序员 JAVA程序员必读:基础篇时间:2001/09/13 13:31作者:ZSC 太平洋网络学院 2.5什么是继承 一个类可以从它的父类继承状态和行为.继承为组织和构造软件程序提供了一个强大的和自然的机理. 总得说来,对象是以类得形式来定义得.你可能现在已经可以从它类知道许多对象了.即使你如知道,如果我告诉你它是一辆自行车,你就会知道它有两个轮子和脚踏板等等.面向对象系统就更深入一些了,它允许类在其它类中定义.比如,山地自行车.赛车以及串座双人自行车都是各种各样的自行车.在面向对象技术