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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 承接备份篇1,在备份篇1中,使用dat文件加+系统计划任务程序完成mysql定期备份任务在这一篇,备份使用java程序定期备份mysql数据库。下面代码和程序思想给出: 1 package com.

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

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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
|
10天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
10天前
|
关系型数据库 MySQL 数据库
轻松入门MySQL:精准查询,巧用WHERE与HAVING,数据库查询如虎添翼(7)
轻松入门MySQL:精准查询,巧用WHERE与HAVING,数据库查询如虎添翼(7)
|
12天前
|
存储 关系型数据库 MySQL
数据库字符编码MySQL中使用UTF-8还是UTFB4
数据库字符编码MySQL中使用UTF-8还是UTFB4
18 0
|
12天前
|
存储 Java 关系型数据库
个人成绩信息管理系统【GUI/Swing+MySQL】(Java课设)
个人成绩信息管理系统【GUI/Swing+MySQL】(Java课设)
18 0
|
12天前
|
存储 Java 关系型数据库
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
22 1
|
12天前
|
存储 Java 关系型数据库
实验室设备管理系统【GUI/Swing+MySQL】(Java课设)
实验室设备管理系统【GUI/Swing+MySQL】(Java课设)
15 0
|
11天前
|
存储 NoSQL Java
Java数据库编程指南:实现高效数据存储与访问
【4月更文挑战第2天】Java开发者必须掌握数据库编程,尤其是JDBC,它是连接数据库的标准接口。使用Spring JDBC或JPA能简化操作。选择合适的JDBC驱动,如MySQL Connector/J,对性能至关重要。最佳实践包括事务管理、防SQL注入、优化索引和数据库设计。NoSQL数据库如MongoDB也日益重要,Java有对应的驱动支持。理解这些概念和技术是构建高效数据库应用的基础。
Java数据库编程指南:实现高效数据存储与访问
|
6天前
|
存储 关系型数据库 MySQL
MySQL基础入门:数据库操作全攻略
MySQL基础入门:数据库操作全攻略
42 0
|
2天前
|
Java Maven
【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“
【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“
12 3