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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 承接备份篇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

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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
12天前
|
SQL Java 关系型数据库
使用 JDBC 实现 Java 数据库操作
JDBC(Java Database Connectivity)是 Java 提供的数据库访问技术,允许通过 SQL 语句与数据库交互。本文详细介绍了 JDBC 的使用方法,包括环境准备、编程步骤和完整示例。
67 7
|
12天前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
62 6
|
12天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
27 2
|
12天前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
116 0
|
2月前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
65 3
|
2月前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
97 2
|
SQL MySQL 关系型数据库
Java实现获得MySQL数据库中所有表的记录总数可行方法
可以通过SELECT COUNT(*) FROM table_name查询某个表中有多少条记录。本文给出两种可行的Java程序查询所有别的记录方法,感兴趣朋友可以了解下 在MySQL中,可以通过SELECT COUNT(*) FROM table_name查询某个表中有多少条记录。如果想知道某个数据库中所有别的记录总数应该怎么做呢?本文给出两种可行的Java程序,解决该问题。 1. 首
1833 0
|
27天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
85 17
|
2月前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者