数据库数据备份处理

1、达梦数据库

数据库安装在linux系统上,我们如何通过程序去手动处理备份呢。
我们可以通过脚本的方式处理。

time2=$(date "+%Y%m%d%H%M%S")
cd /usr/local/tzb/file/backupdb
mkdir "$time2"
cd /dm/bin
/dm/bin/dexp USERID=TZB/123456789@192.168.10.166:5236 FILE=db_str.dmp OWNER=TZB DIRECTORY=/usr/local/tzb/file/backupdb/$time2

chmod 777 /usr/local/tzb/file/backupdb/$time2/db_str.dmp

在这里插入图片描述
大致流程就是先在你的目的文件夹创建一个时间戳的文件夹,然后去到达梦数据库的bin目录下执行这个命令,最后再把生成的SQL文件授权一下,否则还原的时候会无权限。
脚本大概就这样了,那么如何驱动运行呢。重点的就是:Runtime.getRuntime().exec();

@Override
	@Async
	public void backupDb() {
		String shPath = RuoYiConfig.getProfile();//     /usr/local/tzb/file/
		String backupDir = RuoYiConfig.getProfile()+"backupdb";//数据备份总路径,该路径下是时间戳组成的文件夹,时间戳文件夹下面是数据库备份的数据
		String shName = "backupDm.sh";
		File file = new File(backupDir);
		if (!file.exists()) {
			file.mkdirs();
		}
		try {
			Runtime.getRuntime().exec(shPath+shName);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

最后看一下实战效果,这是服务器上存的SQL文件
在这里插入图片描述
我的页面上面显示的列表
在这里插入图片描述

数据库还原的命令脚本

cd /dm/bin
/dm/bin/dimp USERID=TZB/123456789@192.168.10.166:5236 FILE=db_str.dmp DIRECTORY=/usr/local/tzb/file/backupdb/20210715081505 owner=TZB table_exists_action=TRUNCATE NOLOGFILE=Y

2、MySQL数据库

前几天遇见了一个bug,系统里面的备份数据库不能使用了,刚好抽空把这块弄了一下,网上有很多帖子,说实话没有几个真正能使用的,然后我结合自己的实际情况,把这个给整出来了

public static void main(String[] args) throws Exception {
    	
    	/*String realPath = ResourceUtils.getURL("classpath:").getPath() + "static";
    	System.out.println(realPath);*/
    	DataBaseUtils.exportDatabaseTool("127.0.0.1", "root", "root", "ljw","3306");
    	DataBaseUtils.restore("127.0.0.1","root","root","3306","ljw");
	}

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;


public class DataBaseUtils {
	
	//参考文章:https://blog.csdn.net/duli3554197/article/details/89468758
	/**
	 * 
	 * @param hostIP  ip地址
	 * @param userName 用户名
	 * @param password 密码
	 * @param savePath 备份文件保存路径
	 * @param fileName 文件名称
	 * @param databaseName 数据库名称
	 * @param port 数据库端口号
	 * @return
	 * @throws InterruptedException
	 * @throws IOException 
	 */
    public static boolean exportDatabaseTool(String hostIP, String userName, String password, String databaseName,String port) throws InterruptedException, IOException {  
        System.out.println("数据库备份开始*************");
   
        String saveFile="C:/backupDatabase/2021-04-13.sql";
        File f = new File(saveFile);
        if(!f.exists()) {
        	f.createNewFile();
        }else {
        	f.delete();
        	f.createNewFile();
        }
        PrintWriter pw = null;  
        BufferedReader bufferedReader = null;  
        try {  
            pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(saveFile), "utf8"));  
            Process process = Runtime.getRuntime().exec("cmd /c \"F:/tools/workspace/project/target/classes/static/mysqldump.exe\" -h" + hostIP + " -u" + userName + " -p" + password +" -P"+port+ " --set-charset=UTF8 " + databaseName);  
            InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream(), "utf8");  
            bufferedReader = new BufferedReader(inputStreamReader);  
            String line;  
            while((line = bufferedReader.readLine())!= null){  
                pw.println(line);  
            }  
            pw.flush();  
            if(process.waitFor() == 0){//0 表示线程正常终止。  
            	 System.out.println("数据库备份成功*************");
                return true;  
            }  
        }catch (IOException e) {  
            e.printStackTrace();  
            System.out.println("数据库备份失败*************");
        } finally {  
            try {  
                if (bufferedReader != null) {  
                    bufferedReader.close();  
                }  
                if (pw != null) {  
                    pw.close();  
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
        return false;  
    }  
    
    //参考文章:https://www.cnblogs.com/jiduoduo/p/5807743.html
    /**
     * 
     * @param hostIp ip地址
     * @param username 用户名
     * @param pwd 用户密码
     * @param port 端口号
     * @param dataBaseName 数据库名称
     * @throws Exception
     */
    public static void restore (String hostIp,String username,String pwd,String port,String dataBaseName) throws Exception {
    	System.err.println("开始还原");
    	OutputStream outputStream=null;
    	BufferedReader bufferedReader = null;
    	 try {
             Runtime runtime = Runtime.getRuntime();
             Process process = runtime.exec("cmd /c \"F:/tools/workspace/project/target/classes/static/mysql.exe\" -h"+hostIp+" -u"+username+" -p"+pwd+" -P"+port+" --default-character-set=utf8 "+ dataBaseName);
             outputStream = process.getOutputStream();
             bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("C:/backupDatabase/2021-04-13.sql"), "utf-8"));
             String str = null;
             StringBuffer sb = new StringBuffer();
             while ((str = bufferedReader.readLine()) != null) {
                 sb.append(str + "\r\n");
             }
             str = sb.toString();
             OutputStreamWriter writer = new OutputStreamWriter(outputStream,"utf-8");
             writer.write(str);
             writer.flush();
             outputStream.close();
             bufferedReader.close();
             writer.close();
             System.out.println("还原成功");
         } catch (Exception e) {
        	 System.out.println("还原失败");
             e.printStackTrace();
         } finally {
        	 try {  
                 if (bufferedReader != null) {  
                	 bufferedReader.close();  
                 }  
                 if (outputStream != null) {  
                	 outputStream.close();  
                 }  
             } catch (IOException e) {  
                 e.printStackTrace();  
             } 
		}
    }
  
}

注意事项:备份数据为空或者还原数据为空现象这个位置要找正确
在这里插入图片描述
如果一般安装MySQL默认在C盘的话,这两个东西都会在这里面
在这里插入图片描述
但是如果,你直接使用这个路径的话,会存在文件夹有空格问题,也不会成功
在这里插入图片描述
所以就像我一样,把这俩东西放在自己项目里面最保险。
在这里插入图片描述
我这为了方便演示,直接在代码中写死的位置,实际部署起来用这段代码获取ResourceUtils.getURL("classpath:").getPath() + "static";

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值