【mysql】备份篇2:使用java程序定期备份mysql数据库
承接备份篇1,
在备份篇1中,使用dat文件加+系统计划任务程序完成mysql定期备份任务
在这一篇,备份使用java程序定期备份mysql数据库。
下面代码和程序思想给出:
package com.agen.util; import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.sql.Time;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; /**
* java程序实现mysql定期备份功能
* 主体思想:
* 1.runtime.exec(DOS命令)执行DOS命令,得到mysql备份文件
* 2.OutputStreamWriter将读取到的备份文件,写出到本地磁盘
* 3.设置定时任务TimerTask
* 4.timer.schedule(task, nowTime,1000*3);设置定时器相关参数并执行定时任务
* @author sxd
*
*/
public class MysqlBak { private static String sqlUrl = "\"C://Program Files//MySQL//MySQL Server 5.5//bin//mysqldump\" -u root --password=root performance";
private static String targetUrl = "D:\\db_backup\\performance_"; public MysqlBak() throws IOException{
backUp();
} public static void main(String[] args) {
Date nowTime = new Date();
TimerTask task = new TimerTask() { @Override
public void run() {
try {
System.out.println("mysql备份开始时间:"+nowTime.toLocaleString());
MysqlBak bak = new MysqlBak();
} catch (IOException e) {
System.out.println("异常如下:"+e);
} }
}; //java自带 定时器
Timer timer = new Timer();
//参数1 要干的事情
//参数2 任务开始执行的时间【这里将时间定为 任务启动的时间】
//参数3 隔多长时间执行一次任务【毫秒为单位】
timer.schedule(task, nowTime,1000*3);
} /**
* mysql数据库的备份
* @throws IOException
*/
public static void backUp() throws IOException{
//每个java程序都有自己的一个Runtime类实例,使应用程序与其运行的环境相连接,
//应用程序不能自己创建自己的Runtime实例,只能通过getRuntime()获得
Runtime runtime = Runtime.getRuntime();
//调用mysql安装目录的命令
Process child = runtime.exec(sqlUrl);
//读取到此子进程的输出流
InputStream in = child.getInputStream();
//把进程执行中的控制台输出信息写入.sql文件,这就是完成了备份文件
//如果不对控制台信息进行读出,会导致进程堵塞无法运行
//设置编码为UTF-8,否则会乱码
InputStreamReader inputStreamReader = new InputStreamReader(in,"utf-8");
//用来存储 从子进程读取到程序的每一行的数据
String inStr;
//将每一行的数据追加至stringBuffer
StringBuffer sb = new StringBuffer(""); BufferedReader br = new BufferedReader(inputStreamReader);
System.out.println("操作命令执行首行:"+(inStr = br.readLine()));
while((inStr = br.readLine()) != null){
sb.append(inStr+"\r\n");
}
//获取当前时间,用于拼接备份文件的文件名
String nowTime = new Time(System.currentTimeMillis()).toLocaleString();
//备份文件的输出流
FileOutputStream out = new FileOutputStream(new File(targetUrl+nowTime.replace(" ", "_").replace(":", "_")+".sql"));
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(out,"utf-8");
outputStreamWriter.write(sb.toString());
outputStreamWriter.flush(); in.close();
inputStreamReader.close();
br.close();
out.close();
outputStreamWriter.close();
System.out.println("备份成功");
System.out.println("mysql备份完成的时间:"+new Date().toLocaleString()); }
}
这样,将此类放置在你的项目中运行起来即可,只要项目不被停止,它会一直工作下去的。
【mysql】备份篇2:使用java程序定期备份mysql数据库的更多相关文章
- mysql自身报错、java、reids连接mysql数据库报错汇总
1.Can't connect to local MySQL server through socket 'tmpmysql.sock' (2) 原因是mysql根本没有启动 2.Access den ...
- Java程序中实现 MySQL数据库的备份与还原
案例代码: 数据库备份 //mysqldump -h端口号 -u用户 -p密码 数据库 > d:/test.sql --备份D盘 //备份 public static void dataBase ...
- 项目mysql数据导入数据的Java程序
最近写的一个数据库导入数据的程序,有兴趣的同学可以参考一下: 这个程序是针对mysql数据库的,在本地或服务器上运行,主要的需求还是,针对项目的某些bug修复 后,客户的数据要搬到新表上来,避免新版本 ...
- MySQL入门篇(六)之mysqldump备份和恢复
一.备份单个数据库 1.备份命令:mysqldump MySQL数据库自带的一个很好用的备份命令.是逻辑备份,导出 的是SQL语句.也就是把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备 ...
- mysql创建 存储过程 并通过java程序调用该存储过程
create table users_ning(id primary key auto_increment,pwd int); insert into users_ning values(id,123 ...
- Java程序在向mysql中插入数据的时候出现乱码
今天在往数据库中插入数据的时候中文字符在数据库中就出现了乱码?网上有各种说法,但是适合我的,最终解决我的问题的只有下面一种! 在创建数据库的时候,注意设置编码方式. CREATE DATABASE ` ...
- MySQL 总结篇 [在Oracle基础上学习的MySQL]
一.学习环境 MySQL 5.7社区版 Navicat for MySQL 百度网盘下载链接:https://pan.baidu.com/s/1yGnznwoZ8CaMgrCsDBhKAQ 二.MyS ...
- 在java程序中使用JDBC连接mysql数据库
在java程序中我们时常会用到数据库中的数据或操作数据库中的数据,如果java程序没有和我们得数据库连接,就不能实现在java程序中直接操作数据库.使用jdbc就能将java程序和数据库连起来,此时我 ...
- 【Java】JDBC连接MySQL
JDBC连接MySQL 虽然在项目中通常用ORM的框架实现持久化.但经常因测试某些技术的需要,要写一个完整的JDBC查询数据库.写一个在这儿备份. 首先引入驱动包: <dependencies& ...
随机推荐
- 006 Java并发编程wait、notify、notifyAll和Condition
原文https://www.cnblogs.com/dolphin0520/p/3920385.html#4182690 Java并发编程:线程间协作的两种方式:wait.notify.notifyA ...
- HTML5 audio标签自制音乐播放器
相关技能 HTML5+CSS3(实现页面布局和动态效果) Iconfont(使用矢量图标库添加播放器相关图标) LESS (动态CSS编写) jQuery(快速编写js脚本) gulp+webpack ...
- Mac下 Docker部署SpringBoot应用
一.安装Docker环境 使用 Homebrew 安装 macOS 我们可以使用 Homebrew 来安装 Docker. Homebrew 的 Cask 已经支持 Docker for Mac,因此 ...
- 数据库之各种键(Key)
超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键候选键(candidate key):不含有多余属性的超键称为候选键主键(primary key):用户选作元组标识的一个候 ...
- PHP给图片加水印具体实现
给图片加水印实现方法如下: class Mark { public function __construct() { } /** * 加水印 * @param file $srcImg 要加水印的图片 ...
- Mysql用户管理(远程连接、授权)
1.新建用户 登录MYSQL: @>mysql -u root -p @>密码 创建用户: mysql> insert into mysql.user(Host,User,Passw ...
- Appscan的第一个测试请求就是提交MAC地址
GET /AppScan_fingerprint/MAC_ADDRESS_真实的MAC地址.html HTTP/1.0 还好都是合法测试,否则情何以堪...
- oracle导入DMP步骤
oracle导入DMP步骤如下:1.已经存在的数据库需要进行以下的操作,如果不存在,可略过: 删除用户 drop user SUDMDB cascade; 删除表空间和数据文件 ...
- 【转】Python 列表生成式
原文:https://blog.csdn.net/heartyhu/article/details/50988007 1. 生成列表 要生成list [1, 2, 3, 4, 5, 6, 7, 8, ...
- 初始pip
关于pip包括下面的东西还不是很懂,慢慢的了解,我的pip是从https://bootstrap.pypa.io/get-pip.py 粘贴并命名为 get-pip.py 后,执行 python ge ...