天天看點

java springboot 備份資料

一、思路

1. 我們可以通過mysql的mysqldump指令來備份資料庫

2. win 的指令 , 将mysql/bin下面的mysqldump拷貝到c盤的更目錄下

C:\\mysqldump -h 127.0.0.1 -u root -proot home >E:\\test\\"+date.getTime()+".sql
           

3. linux 的指令

/usr/local/mysql-5.7.26-linux-glibc2.12-x86_64/bin/mysqldump -h 127.0.0.1 -u root -proot home > /usr/logmysql/home.sql
           

問題:

不知道什麼原因無法執行這個指令,java中執行了也不報錯,也不成功,我們換一個方式自己寫一個sh檔案,通過java來條用就ok了

注意:win寫的sh檔案,需要執行下面的指令才能執行

chmod 777 backup.sh

sed -i 's/\r$//'  backup.sh  
           

二、代碼

1. back.sh 内容

rm -rf /usr/logmysql/home.sql /bin/sh -c /usr/local/mysql-5.7.26-linux-glibc2.12-x86_64/bin/mysqldump -h 127.0.0.1 -u root -proot home > /usr/logmysql/home.sql
           

2. java代碼

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.io.File;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;


@Component
public class DatabaseBackUp {

    @Scheduled(cron = "*/60 * * * * ?")
    public void dump() throws Exception {
        System.out.println("備份資料庫");
        String backName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date());
         String os = System.getProperty("os.name");
        if(os.toLowerCase().startsWith("win")){
            dataBaseDump("127.0.0.1", "3306", "root", "root", "home", backName);
        }else{
            dataBaseDump("47.92.67.98", "3306", "root", "Zhuguoping!@#123", "home", backName);
        }

    }

    //mysqldump -hlocalhost -P3306 -uroot -p123456 db > E:/back.sql
    //備份
    public  void dataBaseDump(String host, String port, String username, String password, String databasename, String sqlname) throws Exception {

        // 注意:mysqldump.exe路徑中不能含有空格,我将這個檔案拷貝到了項目中
        try {
            //删除
            String rmrf = "";
            Date date = new Date();

            String os = System.getProperty("os.name");

            if(os.toLowerCase().startsWith("win")){
                File file = new File("E:\\test");
                if (!file.exists()) {
                    file.mkdir();
                }

                String cmd = "";
                System.out.println("windows");
                rmrf = "cmd /c  del E:\\test\\*.sql";
                Runtime process = Runtime.getRuntime();
                process.exec(rmrf);
                cmd = "cmd /c C:\\mysqldump -h "+host+" -u "+username+" -p"+password+" "+databasename+" > E:\\test\\"+date.getTime()+".sql";
                System.out.println(cmd);
                Runtime process1 = Runtime.getRuntime();
                Process  res= process1.exec(cmd);
                if (res.waitFor() == 0) {
                    System.out.println("資料庫備份成功,備份路徑為:");
                }
            }else{
                System.out.println("linux");

                String cmd= "/home/project/database/backup_mysql.sh ";
                System.out.println(cmd);
                Runtime process1 = Runtime.getRuntime();
                Process  res= process1.exec(cmd);
                if (res.waitFor() == 0) {
                    System.out.println("資料庫備份成功,備份路徑為:");
                }
            }


        } catch (Exception e) {
            System.out.println(LocalDateTime.now() + " 備份資料庫失敗...");
            e.printStackTrace();
        }

    }

}
           

繼續閱讀