• 【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

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

  • 相关阅读:
    jvm 更多链接
    JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )
    python 排序
    python 第K个语法符号
    python conf.ini 文件的使用
    python 表示数字
    window 下安装redis
    python redis相关操作
    python 矩阵乘法
    python 查找两个字符串a,b中的最长公共子串
  • 原文地址:https://www.cnblogs.com/sxdcgaq8080/p/6646000.html
Copyright © 2020-2023  润新知