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 it.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**/@Slf4jpublic 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 包含单张表备份)》对你有帮助,请点赞、收藏,并留下你的观点哦!