數據庫備份 java jar_Java實現數據庫備份并利用ant導入SQL腳本

d2a39c252f60f009d9d3bf945f6580f7.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==?

數據備份對于經常在運維部署方面的工作者來說,是一件相對簡單的事情,都可以通過某一個SQL工具進行備份,但是如果在項目運行當中,我們需要對數據進行實時,或者是每隔一星期,一個月,等等進行數據的備份,這樣就需要java工具來操作備份SQL文件,目前可以通過調用mysql安裝的命令進行數據備份,另外通過Job任務調度器進行配合使用,這里技術選型為Quartz。

在下面代碼當中address為SQL腳本文件存放的地址。

其中path為mysql的安裝位置:

D:\mysql\mysql-5.6.35-winx64\bin

public MapexportDatabase(String address) {

Map resultMap = newHashedMap();try{

String path= PropertiesFileUtil.getInstance("sql").get("path");

String root= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.username");

String dataBase= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.dataBase");

String table= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.table");

String password= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.password");

String sqlName= System.currentTimeMillis() + ".sql";

Runtime rt=Runtime.getRuntime();

Process child= rt.exec(path + "mysqldump -u" + root + " -p" + password + " -R -c --set-charset=utf8 " + dataBase + " " + table + "");

InputStream in=child.getInputStream();

InputStreamReader xx= new InputStreamReader(in, "utf8");

String inStr;

StringBuffer sb= new StringBuffer("");

String outStr;

BufferedReader br= newBufferedReader(xx);while ((inStr = br.readLine()) != null) {

sb.append(inStr+ "\r\n");

}

outStr=sb.toString();

FileOutputStream fout= new FileOutputStream(address + "/" +sqlName);

OutputStreamWriter writer= new OutputStreamWriter(fout, "utf8");

writer.write(outStr);

writer.flush();

in.close();

xx.close();

br.close();

writer.close();

fout.close();

resultMap.put("result", "success");

resultMap.put("data", address + "/" +sqlName);returnresultMap;

}catch(Exception e) {

e.printStackTrace();

}

resultMap.put("result", "fail");

resultMap.put("data", "地址選擇有可能出現問題");returnresultMap;

}

上述代碼當中主要的是用到了Runtime,Runtime封裝了運行環境,每一個java運行實例都有一個Runtime類為實例,使程序能夠與其環境相接。

一般不能實例化一個Runtime對象,應用程序不能創建自己的Runtime實例,但是可以通過getRuntime的方法獲取當前Runtime運行時對象的引用。

一旦得到當前的Runtime對象的引用,就可以調用Runtime對象的方法去控制java虛擬機的狀態和行為。

執行SQL腳本,我們可以通過ant來實現,首先我們引入ant的jar包

org.apache.ant

ant

1.7.1

public MapimportDatabase(String filepath) {

Map resultMap = newHashedMap();try{

String username= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.username");

String password= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.password");

String url= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.url");

String driverClassName=PropertiesFileUtil.getInstance("sql").get("sql.jdbc.driver");

String filepathName= filepath.substring(0, filepath.lastIndexOf("."));

String outputPath= filepathName + ".out";

SQLExec sqlExec= newSQLExec();//設置數據庫參數

sqlExec.setDriver(driverClassName);

sqlExec.setUrl(url);

sqlExec.setUserid(username);

sqlExec.setPassword(password);//設置字符編碼

sqlExec.setEncoding("UTF-8");//要執行的腳本

sqlExec.setSrc(newFile(filepath));//有出錯的語句該如何處理

sqlExec.setOnerror((SQLExec.OnError) (EnumeratedAttribute.getInstance(

SQLExec.OnError.class, "abort")));

sqlExec.setPrint(true); //設置是否輸出//輸出到文件 sql.out 中;不設置該屬性,默認輸出到控制臺

sqlExec.setOutput(newFile(outputPath));

sqlExec.setProject(new Project()); //要指定這個屬性,不然會出錯

sqlExec.execute();

logger.info("執行sql腳本文件成功");

resultMap.put("result", "success");

}catch(Exception e) {

logger.info("執行sql腳本文件失敗");

e.printStackTrace();

resultMap.put("result", "fail");returnresultMap;

}returnresultMap;

}

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

歡迎關注微信公眾號:摘星族,我們在等待您的加入。

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371704.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371704.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371704.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JSF簡單Ajax示例

今天,我們將看到一些使用JSF的Ajax簡單樣本。 如果要查看有關JSF / Web應用程序的其他文章,請單擊以下鏈接: 重定向后的JSF持久化對象和消息 , 使用JAAS和JSF進行用戶登錄驗證 , JSF:Converter and Bean Au…

常用的好用的window工具

1. FastStone Capture截圖錄屏軟件 百度軟件中心:http://rj.baidu.com/soft/detail/13504.html?ald 注冊企業版: 用戶名:c1ikm 注冊碼:AXMQX-RMMMJ-DBHHF-WIHTV 中文輸入亂碼解決方法: 2. Notepad文本編輯器&#xff…

表分區

http://www.cnblogs.com/leestar54/p/6225821.html轉載于:https://www.cnblogs.com/jouny/p/6262850.html

java飛鴿傳書_feige 飛鴿傳書源代碼java 實現不錯的聯系網絡編程的資料飛鴿傳書的GUI(java實現) - 下載 - 搜珍網...

我的飛鴿傳書/FileFilter.java我的飛鴿傳書/FileNameExtensionFilter.java我的飛鴿傳書/飛鴿傳書/classes/feige/About.class我的飛鴿傳書/飛鴿傳書/classes/feige/ConnectOthers$ReadMessageThread.class我的飛鴿傳書/飛鴿傳書/classes/feige/ConnectOthers.class我的飛鴿傳書…

JAXB和根元素

XmlRootElement是人們習慣于與JAXB(JSR-222)一起使用的注釋。 目的是將根元素與類唯一關聯。 由于JAXB類映射到復雜類型,因此一個類有可能對應于多個根元素。 在這種情況下,無法使用XmlRootElement ,人們開始感到有些困…

python socket模塊實現udp通信_Python基于socket模塊實現UDP通信功能示例

Python基于socket模塊實現UDP通信功能示例本文實例講述了Python基于socket模塊實現UDP通信功能。分享給大家供大家參考,具體如下:一 代碼1、接收端import socket#使用IPV4協議,使用UDP協議傳輸數據ssocket.socket(socket.AF_INET, socket.SOC…

Hibernate緩存基礎知識

最近,我嘗試了休眠緩存。 在這篇文章中,我想分享我的經驗,并指出Hibernate Second Level Cache的一些細節。 在此過程中,我將指導您閱讀一些有助于實現緩存的文章。 讓我們從地面開始。 在休眠狀態下緩存 緩存功能旨在減少必要的…

TP3.2之WHERE組合條件處理

1、條件都是int類型: $User->where(type1 AND status1)->select(); 2、條件包含字符串類型: 使用3.1以上版本的話,使用字符串條件的時候,建議配合預處理機制,確保更加安全, $Model->where("i…

linux-ssh遠程后臺執行腳本-放置后臺執行問題(轉)

寫了一個監控負載的小腳本(死循環,測試結束后再kill對應進程),因需要監控多臺服務器,所以在一臺服務器上使用ssh統一執行腳本遇到問題:使用ssh root172.16.146.20 /usr/local/luly/loadavg.sh 2 2 &執行…

python2.7輸入函數_Python2.7的用戶輸入函數有問題,無法讓這些輸入與程序一起工作...

我對python世界還是個新手,雖然我已經用php做了很多工作。。。這是我的案子。。。在我正在用python2.7為我的小程序編寫一些代碼。在在那個程序中,我需要2個用戶輸入,它們都是數字。在第一個數字不得大于11,也不得小于0。在第二個…

創建Java動態代理

Java動態代理機制提供了一種有趣的方式來創建代理實例。 不過&#xff0c;創建動態代理的步驟有些繁瑣&#xff0c;請考慮將代理用于審核服務實例的方法調用所花費的時間– public interface InventoryService {public Inventory create(Inventory inventory);public List<I…

html5有哪些新特性、移除了那些元素?如何處理HTML5新標簽的瀏覽器兼容問題?如何區分 HTML 和 HTML5?...

新特性&#xff1a; 1. 拖拽釋放(Drag and drop) API 2. 語義化更好的內容標簽&#xff08;header,nav,footer,aside,article,section&#xff09; 3. 音頻、視頻API(audio,video) 4. 畫布(Canvas) API 5. 地理(Geolocation) API 6. 本地離線存儲 localStorage 長期存儲數據&am…

Substring with Concatenation of All Words 題解

題意 You are given a string, s, and a list of words, words, that are all of the same length. Find all starting indices of substring(s) in s that is a concatenation of each word in words exactly once and without any intervening characters. For example, give…

java udp丟包_linux 系統 UDP 丟包問題分析思路

最近工作中遇到某個服務器應用程序 UDP 丟包&#xff0c;在排查過程中查閱了很多資料&#xff0c;總結出來這篇文章&#xff0c;供更多人參考。在開始之前&#xff0c;我們先用一張圖解釋 linux 系統接收網絡報文的過程。● 首先網絡報文通過物理網線發送到網卡● 網絡驅動程…

【SQL】分組數據,過濾分組-group by , having

學習筆記&#xff0c;原文來自http://blog.csdn.net/robinjwong/article/details/24845125 創建分組 - GROUP BY 分組是在SELECT語句的GROUP BY子句中建立的。它的作用是通過一定的規則將一個數據集劃分成若干個小的區域&#xff0c;然后針對若干個小區域進行數據處理。SELECT子…

使用EasyMock或Mockito

我大部分時間都在使用EasyMock &#xff0c;但是最近我和一些非常愿意使用Mockito的人一起工作。 我不打算在同一項目中使用兩個框架來實現相同的目的&#xff0c;因此我采用了Mockito 。 因此&#xff0c;在過去的幾個月中&#xff0c;我一直在使用Mockito &#xff0c;這是我…

CentOS下iptables 配置詳解

如果你的IPTABLES基礎知識還不了解,建議先去看看. 開始配置 我們來配置一個filter表的防火墻. (1)查看本機關于IPTABLES的設置情況 [roottp ~]# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destination Chain FORWARD (policy…

java lambda 多個參數_Java Lambda行為參數化

Java Lambda行為參數化我們可以將lambda表達式作為參數傳遞給方法。例子以下代碼創建了一個名為Calculator的函數接口。在Calculator中有一個稱為calculate的方法&#xff0c;它接受兩個int參數并返回一個int值。在Main類中有一個引擎方法&#xff0c;它接受函數接口Calculator…

具有關聯映射的Hibernate Composite ID

最近&#xff0c;我們面臨著帶有復合id字段的休眠關聯映射的棘手情況。 我們需要與一對一和多對一建立雙向關聯。我們的拖曳表是“ REPORT”和“ REPORT_SUMMARY”&#xff0c;它們之間具有從REPORT到REPORT_SUMMARY的一對多關系&#xff0c;而從REPORT_SUMMARY到REPORT表。 RE…