Java實現mysql數據庫的自動備份和自動還原
在介紹前我要說一下,網上的例子不少,但是坑很多,有些代碼看起來是對的,但是小問題不少,原因在于樓主沒有測試過,或者沒有交代使用時的特殊環(huán)境。以下代碼都是親身測試過的。
1.項目背景:使用java實現遠程備份mysql數據庫到本地電腦,并可以將本地數據庫的備份還原到遠程mysql數據庫。本機環(huán)境windows。
2.注意:本機必須已經裝了mysql數據庫,并且將mysql 的bin加在了系統(tǒng)環(huán)境變量中。我的mysql在c盤,以下代碼也是以C盤的mysql的bin下運行的。具體要以你實際安裝MYSQL的位置而定,不然就會自己坑自己了。
3.代碼邏輯:很重要?。?!
4.我們首先(在遠程數據庫)創(chuàng)建一個有測試數據的庫:robot,一個空的數據庫(沒表,沒數據)robot-test。
5.我們第一步將robot數據庫備份到本地電腦d:\test,名字命名:robot-test.sql。
6.查看本地電腦的d:\test\robot-test.sql是否存在,并確定是否備份成功。
7.第二步,將robot-test.sql還原到之前創(chuàng)建的空數據庫:robot-test。
8.查看robot-test數據庫的表和數據是否還原成功。
備份和還原方法寫到一個類中:
package com.company; import java.io.File; import java.io.IOException; public class DataBaseDumpOrBackrout { /** * @param hostIP ip地址,可以是本機也可以是遠程 * @param userName 數據庫的用戶名 * @param password 數據庫的密碼 * @param savePath 備份的路徑 * @param fileName 備份的文件名 * @param databaseName 需要備份的數據庫的名稱 * @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 數據庫備份的腳本路徑 * @param ip IP地址 * @param database 數據庫名稱 * @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("數據已從 " + filepath + " 導入到數據庫中"); } catch (IOException e) { e.printStackTrace(); return false; } return true; } }
備份的main方法
package com.company; /** * * @author zndume * 數據庫備份主方法測試 * */ 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實現mysql數據庫的自動備份和自動還原的詳細內容,更多關于Java mysql自動備份和自動還原的資料請關注腳本之家其它相關文章!
相關文章
java lambda循環(huán)_使用Java 8 Lambda簡化嵌套循環(huán)操作
這篇文章主要介紹了java lambda循環(huán)_使用Java 8 Lambda簡化嵌套循環(huán)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09mybatis攔截器無法注入spring bean的問題解決
本文主要介紹了mybatis攔截器無法注入spring bean的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-02-02解析SpringBoot?搭建基于?MinIO?的高性能存儲服務的問題
Minio是Apache?License?v2.0下發(fā)布的對象存儲服務器,使用MinIO構建用于機器學習,分析和應用程序數據工作負載的高性能基礎架構。這篇文章主要介紹了SpringBoot?搭建基于?MinIO?的高性能存儲服務,需要的朋友可以參考下2022-03-03