Java实现数据库备份与还原

由于 我的 linux 直接执行 mysqldump -h -u -p databases > /home/xxx.sql 脚本直接输出文件一直失败;
这里linux 采用 mysqldump -h" + ip + " -u" + root + " -p" + pwd + " --set-charset=UTF8 " + dbName 先获取 再写入的方式

#1.首先需要本地安装mysql
#2.其次配置好mysql 环境变量

#3.Copy代码测试

package com.ccit.svs.controller.infoSystem;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;import lombok.extern.slf4j.Slf4j;/*** 数据库备份与还原* @author ccit**/
@Slf4j
public class DbOperate {/*** 用户名*/private static String root = "root";/*** 密码*/private static String pwd = "root";/*** 数据库名字*/private static String dbName = "sss";/*** 备份路径*/private static String backPath = "D:\\";
//  private static String backPath = "/home/";/*** 恢复路径*/private static String filePath = "D:\\back.sql";
//  private static String filePath = "/home/back.sql";/*** ip* @param args*/private static String ip = "127.0.0.1";public static void main(String[] args) throws Exception {//1.本地需安装mysql//2.配置mysql 环境变量
//          dbBackUp();  备份方法dbRestore();//还原方法   还原时  需要提前创建了数据库}/*** 备份数据库db*/public static void dbBackUp() throws Exception {Date date = new Date();SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd-HH-mm-sss");String backName = dateFormat.format(date)+".sql";String pathSql = "";//输出流文件File fileSql = new File(pathSql);try {//判断系统String osName = System.getProperties().getProperty("os.name");if (osName.equals("Linux")) {pathSql = LbackPath+backName;} else {pathSql = WbackPath+backName;}//输出流文件fileSql = new File(pathSql);//创建备份sql文件if (!fileSql.exists()){fileSql.createNewFile();}//mysqldump -hlocalhost -uroot -p123456 db > /home/back.sql  整个库进行备份sql文件//mysqldump -hlocalhost -uroot -p123456 数据库名  数据表名 > /home/back.sql  单张表备份sql文件StringBuffer sb = new StringBuffer();sb.append("mysqldump");sb.append(" -h"+ip);sb.append(" -u"+root);sb.append(" -p"+pwd);sb.append(" "+dbName+" ");sb.append("-r");//java中必须使用"-r"替代">"sb.append(pathSql);Process process = null;//判断系统if (osName.equals("Linux")) {BufferedReader bufferedReader = null;PrintWriter  printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(fileSql), "utf8"));process = Runtime.getRuntime().exec(" mysqldump -h" + ip + " -u" + root + " -p" + pwd + " --set-charset=UTF8 " + dbName+ " -r /home/back.sql");InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream(), "utf8");bufferedReader = new BufferedReader(inputStreamReader);String line;while((line = bufferedReader.readLine())!= null){printWriter.println(line);}printWriter.flush();log.info("-==[ 备份结束! ]==-");} else {System.out.println("cmd命令为:"+"cmd /c "+sb.toString());process = Runtime.getRuntime().exec("cmd /c "+sb.toString());//执行语句}process.waitFor();//等待上述命令执行完毕后打印下面log//输出错误信息InputStream is = process.getErrorStream();InputStreamReader isr = new InputStreamReader(is,"gbk");//读取System.out.println(isr.getEncoding());BufferedReader bufr = new BufferedReader(isr);//缓冲String line = null;while((line =bufr.readLine())!=null) {System.out.println("error:"+line);}isr.close();log.info("数据库备份结束,备份结果:{}",process.exitValue() == 0 ? "success" : "fail");}/*** 恢复数据库* mysql -hlocalhost -uroot -proot dbname < /home/back.sql*/public static void dbRestore(){StringBuilder sb = new StringBuilder();sb.append("mysql");sb.append(" -h"+ip);sb.append(" -u"+root);sb.append(" -p"+pwd);sb.append(" "+dbName+" <");sb.append(filePath);System.out.println("cmd命令为:"+sb.toString());Runtime runtime = Runtime.getRuntime();System.out.println("开始还原数据");try {Process process = runtime.exec("cmd /c"+sb.toString());//输出错误信息FileInputStream errorStream = (FileInputStream)process.getErrorStream();InputStreamReader isr = new InputStreamReader(errorStream,"gbk");//读取System.out.println(isr.getEncoding());BufferedReader bufr = new BufferedReader(isr);//缓冲String line = null;while((line =bufr.readLine())!=null) {System.out.println("error:"+line);}isr.close();InputStream is = process.getInputStream();BufferedReader bf = new BufferedReader(new InputStreamReader(is,"utf8"));line = null;while ((line=bf.readLine())!=null){System.out.println(line);}is.close();bf.close();} catch (IOException e) {e.printStackTrace();}System.out.println("还原成功!");}}

Java实现Mysql数据库备份与还原(Linux 和Windows 包含单张表备份)相关推荐

  1. Java连接MySQL数据库的超级详细步骤(Windows)

    1. 数据准备 1. 下载JDK 下载Java开发工具包JDK,下载地址:https://www.oracle.com/java/technologies/javase-jdk14-downloads ...

  2. java linux mysql数据库_Linux Java连接MySQL数据库

    Linux(Ubuntu平台)Java通过JDBC连接MySQL数据库,与Windows平台类似,步骤如下: 解压 jdbc: tar -zxvf mysql-connector-java-5.1.1 ...

  3. Java达到MySQL数据库备份(两)

    博客<Java实现MySQL数据库备份(一)>使用I/O流的方式实现了MySQL数据库的备份,这样的方法比較繁杂.以下介绍还有一种备份MySQL数据库的方法: import java.io ...

  4. Java实现MySQL数据库备份(二)

    权声明:本文为博主原创文章,未经博主允许不得转载. 博客<Java实现MySQL数据库备份(一)>使用I/O流的方式实现了MySQL数据库的备份,这种方法比较繁杂,下面介绍另一种备份MyS ...

  5. MySQL——Java 访问 MySQL 数据库

    一.   下载与安装 MySQL   Connector/J MySOL  驱动  MySQL Connector/J  下载网站 https://dev.mysql.com/downloads/co ...

  6. Java学习-MySQL数据库

    Java学习-MySQL数据库 1.基础 1.1MySQL数据库在MAC电脑上的安装 1.2 数据基本概念 1.3 MySQL的一些基本操作 2.数据库的基本操作 2.1 DDL:操作数据库.表 (C ...

  7. 用ghost备份和还原Linux系统

    备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程.传统的数据备份主要是采用内置或外置的磁带机进行冷备份.但是这 ...

  8. 用ghost备份和还原Linux系统(一)

              备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程.传统的数据备份主要是采用内置或外置的磁带 ...

  9. 【Java】Java连接Mysql数据库的demo示例

    [Java]Java连接Mysql数据库的demo示例 1.安装mysql数据库 2.下载java-mysql-connector.jar包 3.完成java配置 4.写java代码运行测试 1.安装 ...

最新文章

  1. java万年历计算法定节假日,java获取中国节假日
  2. 怎么在Ubuntu Scope中获取location地址信息
  3. Zulip 2.0.1 发布,功能强大的群组聊天软件
  4. 英特尔裁员1.2万 CEO还在涨薪?
  5. Delphi 数据类型列表
  6. one-to-many relationships in Grails forms
  7. Oracle中备份用户对象的两种方法
  8. asp.net调试技巧
  9. 彻底搞懂阻塞、非阻塞、同步、异步
  10. JavaSE入门学习10:Java修饰符
  11. Gateway配合sentinel自定义限流_使用Sentinel实现gateway网关及服务接口限流
  12. java 命令行运行 打包 IDEA
  13. 按键消抖的原理与解决方案浅论
  14. pic单片机 c语言开发环境,《PIC单片机开发环境入门》.pdf
  15. 用gambit学博弈论--完全信息动态博弈(一)
  16. 已经被废弃的 tcp_tw_recycle
  17. SetTimer函数用法
  18. android使用h5框架,轻量级Android  H5 Native Hybrid 框架
  19. ubuntu wifi变成问号 网速很慢
  20. Elasticsearch:在 Java 客户端中使用 scroll 来遍历搜索结果 - Elastic Stack 8.x

热门文章

  1. 个人简历自我介绍PPT模板-优页文档
  2. dota 英雄使用 曙光酒馆《2》
  3. 计算机网络基础第5版教案,计算机网络基础 第5章教案
  4. Django打造大型企业官网-项目实战(三)
  5. greenplum时区避坑
  6. android matix滤镜,使用MAT (Memory Analyzer Tool)分析Andriod项目内存泄漏
  7. c语言感叹号放最后用法,感叹号的用法和注意事项
  8. APP移动端自动化测试工具选型“兵器谱”一览(主流开源工具)
  9. 华为手机相册怎么镜像翻转_屏幕镜像怎么用?搭配这款软件,苹果手机投屏一点也不难...
  10. java公社博客_Java