数据备份对于经常在运维部署方面的工作者来说,是一件相对简单的事情,都可以通过某一个SQL工具进行备份,但是如果在项目运行当中,我们需要对数据进行实时,或者是每隔一星期,一个月,等等进行数据的备份,这样就需要java工具来操作备份SQL文件,目前可以通过调用mysql安装的命令进行数据备份,另外通过Job任务调度器进行配合使用,这里技术选型为Quartz。

在下面代码当中address为SQL脚本文件存放的地址。

其中path为mysql的安装位置:

D:\mysql\mysql-5.6.35-winx64\bin

public Map<String, Object> exportDatabase(String address) {
Map<String, Object> resultMap = new HashedMap();
try {
String path = PropertiesFileUtil.getInstance("sql").get("path");
String root = PropertiesFileUtil.getInstance("sql").get("sql.jdbc.username");
String dataBase = PropertiesFileUtil.getInstance("sql").get("sql.jdbc.dataBase");
String table = PropertiesFileUtil.getInstance("sql").get("sql.jdbc.table");
String password = PropertiesFileUtil.getInstance("sql").get("sql.jdbc.password");
String sqlName = System.currentTimeMillis() + ".sql";
Runtime rt = Runtime.getRuntime();
Process child = rt.exec(path + "mysqldump -u" + root + " -p" + password + " -R -c --set-charset=utf8 " + dataBase + " " + table + "");
InputStream in = child.getInputStream();
InputStreamReader xx = new InputStreamReader(in, "utf8");
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
BufferedReader br = new BufferedReader(xx);
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString(); FileOutputStream fout = new FileOutputStream(address + "/" + sqlName);
OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");
writer.write(outStr);
writer.flush();
in.close();
xx.close();
br.close();
writer.close();
fout.close();
resultMap.put("result", "success");
resultMap.put("data", address + "/" + sqlName);
return resultMap;
} catch (Exception e) {
e.printStackTrace();
}
resultMap.put("result", "fail");
resultMap.put("data", "地址选择有可能出现问题");
return resultMap;
} 上述代码当中主要的是用到了Runtime,Runtime封装了运行环境,每一个java运行实例都有一个Runtime类为实例,使程序能够与其环境相接。 一般不能实例化一个Runtime对象,应用程序不能创建自己的Runtime实例,但是可以通过getRuntime的方法获取当前Runtime运行时对象的引用。 一旦得到当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制java虚拟机的状态和行为。 执行SQL脚本,我们可以通过ant来实现,首先我们引入ant的jar包 <!-- https://mvnrepository.com/artifact/org.apache.ant/ant --> <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.7.1</version> </dependency> 具体代码实现逻辑: public Map<String, Object> importDatabase(String filepath) { Map<String, Object> resultMap = new HashedMap(); try { try { String username = PropertiesFileUtil.getInstance("sql").get("sql.jdbc.username"); String password = PropertiesFileUtil.getInstance("sql").get("sql.jdbc.password"); String url = PropertiesFileUtil.getInstance("sql").get("sql.jdbc.url"); String driverClassName =PropertiesFileUtil.getInstance("sql").get("sql.jdbc.driver"); String filepathName = filepath.substring(0, filepath.lastIndexOf(".")); String outputPath = filepathName + ".out"; SQLExec sqlExec = new SQLExec(); //设置数据库参数 sqlExec.setDriver(driverClassName); sqlExec.setUrl(url); sqlExec.setUserid(username); sqlExec.setPassword(password); //设置字符编码 sqlExec.setEncoding("UTF-8"); //要执行的脚本 sqlExec.setSrc(new File(filepath)); //有出错的语句该如何处理 sqlExec.setOnerror((SQLExec.OnError) (EnumeratedAttribute.getInstance( SQLExec.OnError.class, "abort"))); sqlExec.setPrint(true); //设置是否输出 //输出到文件 sql.out 中;不设置该属性,默认输出到控制台 sqlExec.setOutput(new File(outputPath)); sqlExec.setProject(new Project()); // 要指定这个属性,不然会出错 sqlExec.execute(); logger.info("执行sql脚本文件成功"); resultMap.put("result", "success"); } catch (Exception e) { logger.info("执行sql脚本文件失败"); e.printStackTrace(); resultMap.put("result", "fail"); return resultMap; } } catch (Exception e) { e.printStackTrace(); } return resultMap; }

欢迎关注微信公众号“摘星族”,我们不仅仅是代码的搬运工,同时也是代码的分享者

MySQL windows中的存储备份的更多相关文章

  1. MySQL数据库中的存储引擎

    1.认识存储引擎 存储引擎指定了表的类型,即如何存储和索引数据.是否支持事务等,同时存储引擎也决定了表在计算中的存储方式. 存储引擎是以插件的形式被MySQL软件引入的,所以可以根据应用.实际的领域来 ...

  2. mysql数据库中的存储引擎是什么意思呢

    需求描述: 在看mysql的内容,经常提到存储引擎,那么到底什么是存储引擎呢 在这里对于概念进行理解,记录下. 概念解释: 存储引擎(storage engine):存储引擎就是mysql中的一个组件 ...

  3. Emoji表情符号在MySQL数据库中的存储

    文章转自https://www.jianshu.com/p/20740071d854 在Android手机或者iPhone的各种输入法键盘中,会自带一些Emoji表情符号,如IPhone手机系统键盘包 ...

  4. 个人总结-7- 实现图片在MySQL数据库中的存储,取出以及显示在jsp页面上

    昨天主要是进行对数据库的内容提取出来并进行动态显示,这个只需要设置一个servlet从数据库中获取数据即可,只是图片比较特殊,不能显示. 今天准备继续找方法来实现图片得录入和显示到jsp中,准备从网上 ...

  5. 优化MD5和IP在(MySQL)数据库中的存储

    1.MD5在MySQL数据库中的存储 用CHAR(32)来存储MD5值是一个常见的技巧.如果你的应用程序使用VARCHAR(32),则对每个值得字符串长度都需要花费额外的不 必要的开销.这个十六进制的 ...

  6. (转)Mysql技术内幕InnoDB存储引擎-事务&备份&性能调优

    事务 原文:http://yingminxing.com/mysql%E6%8A%80%E6%9C%AF%E5%86%85%E5%B9%95innodb%E5%AD%98%E5%82%A8%E5%BC ...

  7. Python爬取招聘信息,并且存储到MySQL数据库中

    前面一篇文章主要讲述,如何通过Python爬取招聘信息,且爬取的日期为前一天的,同时将爬取的内容保存到数据库中:这篇文章主要讲述如何将python文件压缩成exe可执行文件,供后面的操作. 这系列文章 ...

  8. MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述

    MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...

  9. Qt中使用QProcess备份和恢复Mysql数据库

    分类: Qt2011-02-18 21:35 1395人阅读 评论(3) 收藏 举报 qtmysql数据库windowspathcmd . 使用Qt做MySQL数据库开发,遇到需要备份.还原数据库的问 ...

随机推荐

  1. netty源码分析(十八)Netty底层架构系统总结与应用实践

    一个EventLoopGroup当中会包含一个或多个EventLoop. 一个EventLoop在它的整个生命周期当中都只会与唯一一个Thread进行绑定. 所有由EventLoop所处理的各种I/O ...

  2. Python---12函数式编程------12.2返回函数

    返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): ...

  3. python 通过socket实现ssh功能

    功能:实现从客户端向服务端发送cmd指令,服务端将结果返回给客户端的功能. #coding:utf-8 '''服务端''' import socket,os server=socket.socket( ...

  4. 安装python3.5

    安装python3.5可能使用的依赖 [root@heweiwei heweiwei]# yum install openssl-devel bzip2-devel expat-devel gdbm- ...

  5. Mysql(或者sqlite), Mongo中update Column + 1

    Mysql(或者sqlite), Mongo中update Column + 1 有类似以下需求,在数据库表里有一个字段,记录了一个count,然后又时候需要在count的基础上加上某个数字,比如1. ...

  6. WordPress 安装主题、插件时问题解决办法

    --当能够在外网访问到自己的博客时,很多人都会很兴奋吧!如果环境是自己配置的,而不是用的集成环境肯定也会有点小小的成就感. --但是在我兴奋的时候遇到了个小麻烦,下载插件提示我输入FTP信任凭据,输了 ...

  7. DroidVim:在安卓手机上使用vim

    背景 有时候在邮件,钉钉,微信上收到一份文件,急需打开看一下,但有些文件用普通编辑器打开体验实在不佳,例如 patch,log 甚至 bin 文件.由于日常在电脑上使用的是 vim ,一个朴素的想法就 ...

  8. SpringBoot图文教程8 — SpringBoot集成MBG「代码生成器」

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...

  9. CentOS7 部署K8S集群,最新版1.17.3-0

    小白在网上找了很多关于k8s集群部署的文档,但是版本老旧,到处踩坑,终于部署成功,记录下过程. 一.准备工作 虚拟机:VMware® Workstation 15 Pro Xhell 6:Xshell ...

  10. win10 pycharm调试技巧 Debug

    1.设置断点 2.调试方法对比 step into:单步执行,遇到子函数就进入并且继续单步执行(简而言之,进入子函数): step over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行 ...