使用java控制mysql數(shù)據(jù)庫(kù)的備份以及還原

原理:本方法主要是使用cmd執(zhí)行mysqldump這個(gè)轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫(kù)程序,當(dāng)然有很多工具可以利用,這個(gè)只是最基礎(chǔ)的方法

備份

備份所使用的主要是

eg:mysqldump -hhostname -uusername -ppassword databasename >db.sql 

這個(gè)mysql語(yǔ)句,就能完全實(shí)現(xiàn)文件的備份.
具體在代碼中體現(xiàn):

/**
     * 備份mysql數(shù)據(jù)庫(kù)
     * 
     * @param root
     *            mysql登錄名
     * @param rootPass
     *            登錄密碼
     * @param dbName
     *            要備份的數(shù)據(jù)庫(kù)名稱
     * @param backupsPath
     *            備份的路徑
     * @param backupsSqlFileName
     *            備份文件的名字
     * @return 
         * @param tableName   這里實(shí)現(xiàn)了只備份某一張表或多張表
         *這里使用了不確定參數(shù)
*備份mysql數(shù)據(jù)庫(kù)的命令 mysqldump -hhostname -uusername -ppassword
     *         databasename > backupfile.sql
     */
public static String dbBackUp(String root, String rootPass, String dbName, String backupsPath,
            String backupsSqlFileName, String... tableName) {
        // 生成備份文件
        String pathSql = backupsPath + backupsSqlFileName;
        try {
            File fileSql = new File(pathSql);
            if (!fileSql.exists()) {
                fileSql.createNewFile();
            }
            String mysql = "mysqldump -u" + root + " -p" + rootPass + " " + dbName + " ";
            for (String string : tableName) {
                mysql = mysql + string + " ";
            }
            mysql = mysql + " --default-character-set=utf8 ";
            System.out.println(mysql);
            System.out.println("cmd命令為:——>>>" + mysql);
            Runtime runtime = Runtime.getRuntime();
            Process child = runtime.exec(mysql);
            // 讀取備份數(shù)據(jù)并生成文件
            InputStream in = child.getInputStream();
            OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(pathSql), "utf8");
            BufferedReader reader = new BufferedReader(new InputStreamReader(in, "utf8"));
            String line = reader.readLine();
            while (line != null) {
                writer.write(line + "\n");
                line = reader.readLine();
            }
            writer.flush();
            System.out.println("數(shù)據(jù)庫(kù)已備份到——>>" + pathSql);
        } catch (Exception e) {
            System.out.println("生成m=mysql文件失敗");
        }
        return pathSql;
    }

還原

還原所使用的主要是:

//具體的含義就是執(zhí)行db.sql這個(gè)文件
eg:mysql -hhostname -uusername -ppassword databasename < db.sql

具體代碼體現(xiàn):

public static boolean load(String root, String rootPass, String dbName, String fPath) {
        try {
            Runtime rt = Runtime.getRuntime();
            System.out.println("還原");
            // 調(diào)用 mysql 的 cmd:
            String mysql = "mysql -u" + root + " -p" + rootPass + " " + dbName;
            Process child = rt.exec("cmd /c " + mysql);
            OutputStream out = child.getOutputStream();// 控制臺(tái)的輸入信息作為輸出流
            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);
            // 注:這里如果用緩沖方式寫入文件的話,會(huì)導(dǎo)致中文亂碼,用flush()方法則可以避免
            writer.flush();
            // 別忘記關(guān)閉輸入輸出流
            out.close();
            br.close();
            writer.close();
            System.out.println("還原成功");
        } catch (Exception e) {
            System.out.println("還原失敗");
            e.printStackTrace();
        }
        return true;
    }

經(jīng)測(cè)試,可用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容