天天看點

Java調用資料庫備份指令mysqldump

在沒有正規DBA,伺服器單一,小型項目的時候,總會有些的備份資料庫的需求;

資料庫一般備份指令:

//        1.導出結構不導出資料

//        mysqldump --opt -d 資料庫名 -u root -p > xxx.sql

//        2.導出資料不導出結構

//        mysqldump -t 資料庫名 -uroot -p > xxx.sql 

//        3.導出資料和表結構

//        mysqldump 資料庫名 -uroot -p > xxx.sql 

//        sql4.導出特定表的結構

//        mysqldump -uroot -p -B 資料庫名 --table 表名 > xxx.sql 

基本代碼:

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Value;

import java.io.File;

import java.io.IOException;

public class DbbackupTask {

    Log loger = LogFactory.getLog(this.getClass());

    @Value("${host_ip}")

    private String HOSTIP;//資料庫伺服器IP

    @Value("${user_name}")

    private String USERNAME;//資料庫使用者

    @Value("${password}")

    private String PASSWORD;//資料庫密碼

    @Value("${save_path}")

    private String SAVEPATH;//備份檔案路徑

    public void dbbackup() {

        loger.debug("資料庫備份開始");

        String[] databaseName = {"common_db", "logistic_db", "operate_db", "order_db"};

        String dates = new java.text.SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date());

        String dated = new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date());

        System.out.println(dates);

        System.out.println(dated);

        for (Object o : databaseName) {

            String savePath=SAVEPATH + "/" + dated;

            String fileName =  o.toString() + dates+".sql";

            System.out.println(SAVEPATH + "/" + dated + "/" + o.toString() + dates+".sql");

            exportDatabaseTool(HOSTIP, USERNAME, PASSWORD, savePath,fileName, o.toString());

        }

    }

    public void exportDatabaseTool(String hostIP, String userName, String password, String savePath,String fileName, String databaseName) {

        File saveFile = new File(savePath);

        if (!saveFile.exists()) {// 如果目錄不存在

            saveFile.mkdirs();// 建立檔案夾

        }

        if (!savePath.endsWith(File.separator)) {

            savePath = savePath + File.separator;

        }

        StringBuilder stringBuilder = new StringBuilder();

        stringBuilder.append("mysqldump").append(" -h").append(hostIP);

        stringBuilder.append(" --user=").append(userName).append(" --password=").append(password).append(" --lock-all-tables=true");

        stringBuilder.append(" --result-file=").append(savePath+fileName).append(" --default-character-set=utf8 ").append(databaseName);

        try {

            Process process = Runtime.getRuntime().exec(stringBuilder.toString());

            if (process.waitFor() == 0) {// 0 表示線程正常終止。

                loger.info("資料庫備份成功");

            }

        } catch (IOException e) {

            loger.info("資料庫備份異常");

            e.printStackTrace();

        } catch (InterruptedException e) {

            loger.info("資料庫備份異常");

            e.printStackTrace();

        }

    }

}

再加一個定時任務quartz;