Java 在Window及Linux下備份MySQL資料庫
轉自:http://www.linuxidc.com/Linux/2010-12/30652.htm
首先是Windows系統下:
給大家提個醒:
有人說用:"mysqldump --uroot --p123456 --opt"。但是我沒有成功,最後使用這種寫法成功了:"mysqldump --user=root --password=123456 --opt" (其實正確的為:mysqldump -uroot -p123456 dbname)
看來要寫完整的方式。
然後是Linux系統下:
這裡很多人遇到的問題是
程式不報錯,命令不執行,sql檔案沒有生成。我已開始用了以下幾種寫法:java.lang.Runtime.getRuntime().exec(new String[] { mysql });
java.lang.Runtime.getRuntime().exec(new String[] { "shell "+mysql });
java.lang.Runtime.getRuntime().exec(new String[] { "/bin/bash "+mysql });
java.lang.Runtime.getRuntime().exec(new String[] { "/bin/bash/shell "+mysql });
都沒有成功,最後試驗了這種寫法成功了:
java.lang.Runtime.getRuntime().exec(new String[] { "sh", "-c", mysql });
前提是環境變數中都把MySQL的bin目錄加上了www.linuxidc.com。
下面是完整程式碼:
-----------------------------------
import java.text.SimpleDateFormat;
import java.util.Date;
/**
*
* @author xxx
*
*
*/
public class BackUpMySQL {
private static final String BASE_PATH_LINUX = "/root/";
private static final String BASE_PATH_WINDEWS = "E:\\";
public void backwindows() {
try {
String sqlname = BASE_PATH_WINDEWS + "shequ."
+ new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date())
+ ".sql";
String mysql = "mysqldump --user=root --password=jwl --opt shequ> "
+ sqlname;
java.lang.Runtime.getRuntime().exec("cmd /c " + mysql);
} catch (Exception e) {
e.printStackTrace();
}
}
public void backlinux() {
try {
String sqlname = BASE_PATH_LINUX + "mqney."
+ new Date().toString() + ".sql";
String mysql = "mysqldump --user=root --password=123456 --opt mqney> "
+ sqlname;
java.lang.Runtime.getRuntime().exec(
new String[] { "sh", "-c", mysql });
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// new BackUpMySQL().backwindows();
System.out.println(System.getProperty("os.name"));
}
}
附另外一份備份原始碼參考:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Date;
public class BakMysql {
// main的方法,主要是我用於測試的,是想著取得CLASS的路徑,然後備份的檔案寫在伺服器的類路徑下
public static void main(String[] args) {
BakMysql bk = new BakMysql();
// System.out.println(Thread.currentThread().getContextClassLoader().
// getResource(""));
// System.out.println(BakMysql.class.getClassLoader().getResource(""));
// System.out.println(ClassLoader.getSystemResource(" "));
// System.out.println(BakMysql.class.getResource(""));
// System.out.println(BakMysql.class.getResource("/"));
// Class檔案所在路徑System.out.println(new File("/").getAbsolutePath());
System.out.println(System.getProperty("user.dir"));
// bk.backup();
// bk.load();
bk.backupMySqlToFile();
}
// backup方法是備份資料庫到伺服器地址
public void backup() {
try {
String filePath = System.getProperty("user.dir") + "\\"
+ new Date().getYear() + "-" + new Date().getMonth() + "-"
+ new Date().getDay() + ".sql";
System.out.println(BakMysql.class.getResource("").toString());
Runtime rt = Runtime.getRuntime();
// 呼叫 mysql 的 cmd:
// Process child = rt.exec("cmd /c mysqldump -uroot -pjwl shequ");
Process child = rt.exec("mysqldump -uroot -pjwl shequ");
// 設定匯出編碼為utf8,這裡必須是utf8。
// 注意這一句,是指執行mysqldump命令,後面跟的是登入名和登入的密碼,接著後面的是指備份的資料庫的名字,到此結束,
// 以此生成一個執行的程序,取得此程序的輸出流到我們要備份的檔案
// 把程序執行中的控制檯輸出資訊寫入.sql檔案,即生成了備份檔案。注:如果不對控制檯資訊進行讀出,則會導致程序堵塞無法執行
InputStream in = child.getInputStream();
// 控制檯的輸出資訊作為輸入流
InputStreamReader xx = new InputStreamReader(in, "utf8");
// 設定輸出流編碼為utf8。這裡必須是utf8,否則從流中讀入的是亂碼
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
// 組合控制檯輸出資訊字串
BufferedReader br = new BufferedReader(xx);
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
// 備份出來的內容是一個字條串
// 要用來做匯入用的sql目標檔案:
FileOutputStream fout = new FileOutputStream(filePath);
OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");
writer.write(outStr);// 寫檔案
// 注:這裡如果用緩衝方式寫入檔案的話,會導致中文亂碼,用flush()方法則可以避免
writer.flush();
// 別忘記關閉輸入輸出流
in.close();
xx.close();
br.close();
writer.close();
fout.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public String backupMySqlToFile() {
String outStr = "";
try {
Runtime rt = Runtime.getRuntime();
Process child = rt
.exec("D:\\Program Files\\Apache Software Foundation\\xampp\\mysql\\bin\\mysqldump -uroot -p1234 114la");
// 設定匯出編碼為utf8。 這裡必須是utf8在此要注意 ,
// 有時會發生一個mysqldump:
// Got error: 1045的錯誤,此時mysqldump必須加上你要備份的資料庫的IP地址,即
// mysqldump -h192.168.0.1 -uroot -pmysql dbname,今天我就遇到了這樣的問題,呵呵
// 把程序執行中的控制檯輸出資訊寫入.sql檔案,即生成了備份檔案。
// 注:如果不對控制檯資訊進行讀出,則會導致程序堵塞無法執行
InputStream in = child.getInputStream();
// 控制檯的輸出資訊作為輸入流
InputStreamReader xx = new InputStreamReader(in, "utf8");
// 設定輸出流編碼為utf8。這裡必須是utf8,否則從流中讀入的是亂碼
String inStr;
StringBuffer sb = new StringBuffer("");
// 組合控制檯輸出資訊字串
BufferedReader br = new BufferedReader(xx);
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
in.close();
xx.close();
br.close();
} catch (Exception e) {
e.printStackTrace();
}
return outStr;
}
public void load() {
try {
String fPath = "c:\\test.sql";
Runtime rt = Runtime.getRuntime();
Process child = rt.exec("mysql -uroot -pjwl shequ");
OutputStream out = child.getOutputStream();
// 控制檯的輸入資訊作為輸出流
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(fPath), "utf8"));
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");
writer.write(outStr);
// 注:這裡如果用緩衝方式寫入檔案的話,會導致中文亂碼,用flush()方法則可以避免
writer.flush();
out.close();
br.close();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 當用戶恢復資料的時候,直接傳一個上傳的檔案給這個方法,就可以對資料庫進行恢復了
public void restoreMysqlFromFile(File f) {
try {
FileInputStream fis = new FileInputStream(f);
Runtime rt = Runtime.getRuntime();
Process child = rt.exec("mysql -uroot -p1234 114la");
// 這裡執行的是mysql命令,使用者名稱,密碼以及要恢復的資料庫,命令執行完後會從我們上傳的檔案裡面讀取要執行的內容
OutputStream out = child.getOutputStream();
// 控制檯的輸入資訊作為輸出流
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
BufferedReader br = new BufferedReader(new InputStreamReader(fis,
"utf8"));
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");
writer.write(outStr);
// 注:這裡如果用緩衝方式寫入檔案的話,會導致中文亂碼,用flush()方法則可以避免
writer.flush();
out.close();
br.close();
writer.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
相關推薦
Java 在Window及Linux下備份MySQL資料庫
轉自:http://www.linuxidc.com/Linux/2010-12/30652.htm 首先是Windows系統下: 給大家提個醒: 有人說用:"mysqldump --uroot --p123456 --opt"。但是我沒有成功,最後使用
linux下備份mysql資料庫,並ftp到遠端linux伺服器上
一、檢查FTP服務是否安裝 1.架設mysql資料庫裝在172.22.1.77上,如何安裝mysql略,簡稱為77。 2.作為備份機IP為172.22.1.150上,簡稱為150; 3.為150按照ftp命令,首先XSHELL遠端連線到150上,確認ftp
window下的java程式連線linux系統的mysql資料庫
實現的功能:window下連線linux的mysql資料庫 準備的環境: windows:1.已經編寫好的連線資料庫的java測試程式: package com.jdbc; import java.sql.Connection; import java.sql.Dri
Linux 下實現 MySQL 資料庫定時自動備份
備份是什麼? 為什麼要備份? 容災方案建設 儲存介質 光碟 磁帶 硬碟&n
Linux下對MySql資料庫備份與恢復
MySQL命令列匯入資料庫: 1,將要匯入的.sql檔案移至bin檔案下,這樣的路徑比較方便 2,同上面匯出的第1步 3,進入MySQL:mysql -u 使用者名稱 -p 如我輸入的命令列:mysql -u root -p (輸入同樣後會讓你輸入MySQL的密碼) 4
linux定時備份mysql資料庫,及解決crontab執行時生成資料庫檔案為空的問題
一、用命令實現備份 進入mysql的bin目錄(mysql安裝目錄的下一級目錄) 1、備份資料 #mysqldump -uusername -ppassword discuz >discuz_2010-04-01.sql -uusernae:-u+mysql的使用者名
linux下進入mysql資料庫出現1045及2003錯誤,解決方法
樓主所用linux版本為redhat7.0,樓主在準備使用mysql資料庫,出現了以下error,1045及2003 通過網路上的查詢以及自己的實踐,終於把問題解決了,方法如下 [[email protected] ~]# mysql -uwhit
Linux下安裝MySQL資料庫mysql-5.7.11
Linux下安裝MySQL資料庫(壓縮包方式安裝) https://www.cnblogs.com/xiaotao726/p/6562265.html PS:9、建立In ln -s /usr/local/mysql/ /usr/bin/ 連線資料庫時會顯示:[[email protecte
linux定時備份mysql資料庫
1、檢視磁碟空間情況: [[email protected] backup]# df -h 檔案系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root 17G 2.7G 15G 16
Linux下操作MySQL資料庫常用命令
目錄 5.查詢表 9.退出 1.連線資料庫 mysql -u -root -p 輸入密碼 2.檢視資料庫 show databases; 3.開啟資料庫
linux下,mysql資料庫的忘記密碼,檢視使用者,以及修改使用者資訊
linux下,mysql資料庫的忘記密碼,檢視使用者,以及修改使用者資訊 剛好遇到的,也是自己不熟悉的部分,因此查了一些資料,大概把這幾個給總結一下。 一、資料庫忘記密碼 1、如果是root使用者忘記密碼的話,那就沒
linux下安裝mysql資料庫
linux下安裝mysql 下載安裝包 上傳安裝包到伺服器上 解壓安裝 1、解壓到user/local下 tar vxf mysql-5.7.14-1.el6.x86_64.rpm-bundle.tar -C /usr/local 2、依次執行一下命令: [
Linux下安裝Mysql資料庫且給使用者授權(安裝包安裝)
第一步:查詢原有的資料庫 #rpm -qa|grep -i mysql 第二步:刪除查詢出來的資料庫 #rpm -e packageName --nodeps
在Linux下安裝MySQL資料庫
這篇文章主要介紹如何在Linux下使用Yum安裝MySQL 一、環境 OS資訊: LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desk
如何在linux下安裝 mysql資料庫
材料 1.centos 7 linux伺服器一臺, 2.mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz安裝包一個 下載地址:https://dev.mysql.com/downloads/mysql/5
linux下更改MySQL資料庫編碼格式為utf-8
設定MySQL資料庫編碼為UTF-8 登陸後檢視資料庫當前編碼:SHOW VARIABLES LIKE 'char%'; 修改/etc/mysql/my.cnf (預設安裝路徑下) (標籤下沒有的新增,有的修改) [mysqld] character_
linux下更改mysql資料庫位置
引言: 由於MySQL的資料庫太大,預設安裝的/var盤已經再也無法容納新增加的資料,沒有辦法,只能想辦法轉移資料的目錄。 下面我整理一下把MySQL從/var/lib/mysql目錄下面轉移到/data/mysql目錄的具體操作: 1、首先我們需要關閉MySQL,命令如下
Linux下修改Mysql資料庫存放路徑
原路徑:/var/lib/mysql 目標路徑:/home/data/mysql 1、home目錄下建立data目錄cd /homemkdir data2、停止mysql程序service mysqld stop3、把/var/lib/mysql整個目錄保持許可權複
linux下部署mysql資料庫
部署mysql: 第一步: 可以到MySQL官網下載包也可以到r.aminglinux.com地址去下載第二步: #cd /usr/local/src建議放在這個目錄下面#wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql
Linux下備份oracle資料庫
轉自:https://blog.csdn.net/li951383937/article/details/52475982今天遇到需要備份oracle資料庫在Linux環境下,以前沒有弄過,今天嘗試了一次,特此記錄。 首先1:我們需要連結到安裝oracle的機器上,我是使用的