1. 程式人生 > >Java 在Window及Linux下備份MySQL資料庫

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();
        }
    }

}


相關推薦

JavaWindowLinux備份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

windowjava程式連線linux系統的mysql資料庫

實現的功能:window下連線linux的mysql資料庫 準備的環境: windows:1.已經編寫好的連線資料庫的java測試程式: package com.jdbc; import java.sql.Connection; import java.sql.Dri

Linux 實現 MySQL 資料庫定時自動備份

備份是什麼?           為什麼要備份?   容災方案建設   儲存介質   光碟  磁帶  硬碟&n

LinuxMySql資料庫備份與恢復

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資料庫出現10452003錯誤,解決方法

樓主所用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.開啟資料庫

linuxmysql資料庫的忘記密碼,檢視使用者,以及修改使用者資訊

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的機器上,我是使用的