最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)mysql數(shù)據(jù)庫的自動備份和自動還原

 更新時間:2024年11月04日 11:35:20   作者:小七蒙恩  
這篇文章主要為大家詳細介紹了如何通過Java實現(xiàn)mysql數(shù)據(jù)庫的自動備份和自動還原,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下

在介紹前我要說一下,網上的例子不少,但是坑很多,有些代碼看起來是對的,但是小問題不少,原因在于樓主沒有測試過,或者沒有交代使用時的特殊環(huán)境。以下代碼都是親身測試過的。

1.項目背景:使用java實現(xiàn)遠程備份mysql數(shù)據(jù)庫到本地電腦,并可以將本地數(shù)據(jù)庫的備份還原到遠程mysql數(shù)據(jù)庫。本機環(huán)境windows。

2.注意:本機必須已經裝了mysql數(shù)據(jù)庫,并且將mysql 的bin加在了系統(tǒng)環(huán)境變量中。我的mysql在c盤,以下代碼也是以C盤的mysql的bin下運行的。具體要以你實際安裝MYSQL的位置而定,不然就會自己坑自己了。

3.代碼邏輯:很重要!?。?/p>

4.我們首先(在遠程數(shù)據(jù)庫)創(chuàng)建一個有測試數(shù)據(jù)的庫:robot,一個空的數(shù)據(jù)庫(沒表,沒數(shù)據(jù))robot-test。

5.我們第一步將robot數(shù)據(jù)庫備份到本地電腦d:\test,名字命名:robot-test.sql。

6.查看本地電腦的d:\test\robot-test.sql是否存在,并確定是否備份成功。

7.第二步,將robot-test.sql還原到之前創(chuàng)建的空數(shù)據(jù)庫:robot-test。

8.查看robot-test數(shù)據(jù)庫的表和數(shù)據(jù)是否還原成功。

備份和還原方法寫到一個類中:

package com.company;
import java.io.File;
import java.io.IOException;

public class DataBaseDumpOrBackrout {
    /**
     * @param hostIP ip地址,可以是本機也可以是遠程
     * @param userName 數(shù)據(jù)庫的用戶名
     * @param password 數(shù)據(jù)庫的密碼
     * @param savePath 備份的路徑
     * @param fileName 備份的文件名
     * @param databaseName 需要備份的數(shù)據(jù)庫的名稱
     * @return
     */
    public static boolean backup(String hostIP, String userName, String password, String savePath, String fileName,
                                 String databaseName) {
        fileName +=".sql";
        File saveFile = new File(savePath);

        if (!saveFile.exists()) {// 如果目錄不存在
            saveFile.mkdirs();// 創(chuàng)建文件夾
        }
        if (!savePath.endsWith(File.separator)) {
            savePath = savePath + File.separator;
        }

        
        //拼接命令行的命令
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin\\mysqldump --opt -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);
        System.out.println(stringBuilder.toString());
        try {
            //調用外部執(zhí)行exe文件的javaAPI
            Process process = Runtime.getRuntime().exec(stringBuilder.toString());
            
            if (process.waitFor() == 0) {// 0 表示線程正常終止。
                return true;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return false;
    }


    /**
     * @param filepath 數(shù)據(jù)庫備份的腳本路徑
     * @param ip IP地址
     * @param database 數(shù)據(jù)庫名稱
     * @param userName 用戶名
     * @param password 密碼
     * @return
     */
    public static boolean recover(String filepath,String ip,String database, String userName,String password) {


        String stmt1 = "C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin\\mysqladmin -h "+ip+" -u"+userName+" -p"+password+" create DATABASE if not EXISTS "+database;

        String stmt2 = "mysql -h "+ip+" -u"+userName+" -p"+password+" "+database+" < " + filepath;

        String[] cmd = { "cmd", "/c", stmt2 };

        try {
         System.out.println(stmt1);
            Runtime.getRuntime().exec(stmt1);
            System.out.println(cmd);
            Runtime.getRuntime().exec(cmd);
            System.out.println("數(shù)據(jù)已從 " + filepath + " 導入到數(shù)據(jù)庫中");
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

}

備份的main方法

package com.company;
/**
 * 
 * @author zndume
 * 數(shù)據(jù)庫備份主方法測試
 *
 */
public class BuckupMain {

    public static void main(String[] args) {
        String hostip = "172.17.7.60";
        String username = "root";
        String password = "zndume";
        String savepath = "D:\\test";
        String filename = "robot-test";
        String databaseName = "robot";
        boolean backup = DataBaseDumpOrBackrout.backup(hostip, username, password, savepath, filename, databaseName);
        System.out.println(backup);
        
    }
}

還原的main方法

package com.company;

public class RecoverMain {
 
 public static void main(String[] args) {
   String ip = "172.17.7.60";
      String userName = "root";
      String password = "zndume";
      String savepath = "D:\\test\\robot-test.sql";
      String databaseName = "robot-test";
      boolean recover = DataBaseDumpOrBackrout.recover(savepath, ip, databaseName, userName, password);
      System.out.println(recover);
 }
 
}

以上就是Java實現(xiàn)mysql數(shù)據(jù)庫的自動備份和自動還原的詳細內容,更多關于Java mysql自動備份和自動還原的資料請關注腳本之家其它相關文章!

相關文章

  • 基于SpringBoot+MySQL+Vue實現(xiàn)文件共享系統(tǒng)

    基于SpringBoot+MySQL+Vue實現(xiàn)文件共享系統(tǒng)

    我們每天要傳海報、視頻、文案,以前靠微信群、U盤、郵箱來回傳,問題一大堆, 于是,我用SpringBoot+MySQL+Vue搞了個文件共享系統(tǒng),同時加了用戶空間限額,本文通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2025-08-08
  • jpa使用uuid策略后無法手動設置id的問題及解決

    jpa使用uuid策略后無法手動設置id的問題及解決

    這篇文章主要介紹了jpa使用uuid策略后無法手動設置id的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • androidQ sd卡權限使用詳解

    androidQ sd卡權限使用詳解

    這篇文章主要介紹了androidQ sd卡權限使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • java開發(fā)ExecutorService監(jiān)控實現(xiàn)示例詳解

    java開發(fā)ExecutorService監(jiān)控實現(xiàn)示例詳解

    這篇文章主要為大家介紹了java開發(fā)ExecutorService監(jiān)控實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • java中Ajax與Axios的使用小結

    java中Ajax與Axios的使用小結

    在項目中我們經常會遇到需要向請求頭中添加消息的場景,本文主要介紹了java中Ajax與Axios的使用小結,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • Java并發(fā)編程數(shù)據(jù)庫與緩存數(shù)據(jù)一致性方案解析

    Java并發(fā)編程數(shù)據(jù)庫與緩存數(shù)據(jù)一致性方案解析

    這篇文章主要為大家介紹了Java并發(fā)編程中數(shù)據(jù)庫與緩存數(shù)據(jù)一致性解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • SpringBoot基礎教程之集成郵件服務

    SpringBoot基礎教程之集成郵件服務

    這篇文章主要給大家介紹了關于SpringBoot基礎教程之集成郵件服務的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用SpringBoot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-07-07
  • 詳解spring security 配置多個AuthenticationProvider

    詳解spring security 配置多個AuthenticationProvider

    這篇文章主要介紹了詳解spring security 配置多個AuthenticationProvider ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Spring?Prototype?Bean的四種正確使用方式

    Spring?Prototype?Bean的四種正確使用方式

    文章主要講解了在Spring框架中正確使用PrototypeBean的方法,列舉了四種有效方式,并詳細分析了每種方式的優(yōu)缺點與適用場景,特別針對同一類型存在多個PrototypeBean的情況,給出了相應的解決方案,需要的朋友可以參考下
    2026-04-04
  • SpringCloud?服務注冊中的nacos實現(xiàn)過程

    SpringCloud?服務注冊中的nacos實現(xiàn)過程

    這篇文章主要介紹了SpringCloud?服務注冊之nacos實現(xiàn)過程,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03

最新評論

台中市| 宿松县| 霍邱县| 阜新| 开原市| 灌阳县| 库车县| 长武县| 自贡市| 延川县| 葵青区| 新巴尔虎右旗| 横峰县| 高青县| 新田县| 柳林县| 泽库县| 闽侯县| 当涂县| 红桥区| 平利县| 罗城| 印江| 安阳县| 宁陕县| 乌拉特中旗| 寿阳县| 犍为县| 安龙县| 昆山市| 清远市| 九龙县| 阳江市| 十堰市| 衡山县| 集贤县| 德令哈市| 武宁县| 安国市| 申扎县| 讷河市|