java實現web應用(備份還原數據庫)

          ----------------------------------------------------->>>>>>>>

           

          原理:MySQL 數據庫備份原理: Navicat等數據庫界面軟件通用的數據庫備份原理就是直

          接調用MYSQL本身的系統命令。

           

          MySQL本身的系統命令:

          --opt –h localhost --user=root  --password=admin --lock-all-tables=true --result-file=E://oes//2221.sql --default-character-set=utf8 oes

          解析:主機–h,用戶名--user,密碼—password,鎖定所有表--lock-all-tables=true

                目標文件--result-file,編碼--default-character-set=utf8,數據源oes

           

          Java中執行系統命令方法:

                               Runtime cmd = Runtime.getRuntime();

                               Process p = cmd.exec(“”);   //執行CMD指令(String)

           

          由于無法確定主機是否配置了MySQL環境變量,所以需要最保險的確定MySQLmysqldump的位置,它存在于MySQL安裝文件夾得Bin目錄下,問題就是如何獲取MySQL的安裝目錄?

           

          ----------------------------------------------------->>>>>>>>

           

          針對于獲取MySQL的安裝目錄,我用的是比較笨的方法:解析注冊表。

          找到注冊表中MySQL的軟件信息,里面包含有軟件的安裝地址,卸載地址,版本號等等基本信息,直接取用它的安裝信息就行。

           

          軟件信息在注冊表中的位置:

          HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\

           

          軟件關聯注冊表中軟件信息:

                  

                  

           

          ----------------------------------------------------->>>>>>>>

          CheckSoftware,解析MySQL軟件安裝地址

           

          import java.io.BufferedReader;

          import java.io.IOException;

          import java.io.InputStreamReader;

           

          public class CheckSoftware {

             /*

              * 遍歷注冊表,查詢MySQL的注冊表關聯

              */

             public static String check() throws Exception {

                Runtime runtime = Runtime.getRuntime();

                Process process = null;

                process = runtime

                      .exec("cmd /c reg query HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\");

                BufferedReader in = new BufferedReader(new InputStreamReader(

                      process.getInputStream()));

                String string = null;

                while ((string = in.readLine()) != null) {

                   process = runtime.exec("cmd /c reg query " + string

                          + " /v DisplayName");

                   BufferedReader name = new BufferedReader(new InputStreamReader(

                          process.getInputStream()));

                   String message = queryValue(string, "DisplayName");

                   if (message != null && message.contains("MySQL")) {

                      String message2 = queryValue(string, "InstallLocation");

                      return message2;

                   }

           

                }

                in.close();

                process.destroy();

                return null;

             }

           

             /*

              * 查詢出需要的MySQL服務的安裝路徑

              */

             private static String queryValue(String string, String method)

                   throws IOException {

                String pathString = "";

           

                Runtime runtime = Runtime.getRuntime();

                Process process = null;

                BufferedReader br = null;

                process = runtime.exec("cmd /c reg query " + string + " /v " + method);

                br = new BufferedReader(new InputStreamReader(process.getInputStream()));

                br.readLine();

                br.readLine();// 去掉前兩行無用信息

                if ((pathString = br.readLine()) != null) {

                   pathString = pathString.replaceAll(method + "    REG_SZ    ", ""); // 去掉無用信息

                   return pathString;

                }

                return pathString;

             }

          }

           

           

          ----------------------------------------------------->>>>>>>>

          JavaMysql備份還原數據庫

           

          import java.io.File;

          import java.io.IOException;

          import java.io.InputStream;

          import java.util.Properties;

           

          public class JavaMysql {

             /*

              * 備份數據庫 1、讀取配置文件 2、啟動智能查詢Mysql安裝目錄 3、備份數據庫為sql文件

              */

             public static void backup(String sql) {

           

                Properties pros = getPprVue("prop.properties");

                String username = pros.getProperty("username");

                String password = pros.getProperty("password");

           

                CheckSoftware c = null;

                try {

                   System.out.println("MySQL服務安裝地址 "+c.check().toString());

                } catch (Exception e2) {

                   e2.printStackTrace();

                }

                String mysqlpaths;

                try {

                   mysqlpaths = c.check().toString() + "bin" + "\\";

           

                   String databaseName = pros.getProperty("databaseName");

                   String address = pros.getProperty("address");

                   String sqlpath = pros.getProperty("sql");

                   File backupath = new File(sqlpath);

                   if (!backupath.exists()) {

                      backupath.mkdir();

                   }

           

                   StringBuffer sb = new StringBuffer();

           

                   sb.append(mysqlpaths);

                   sb.append("mysqldump ");

                   sb.append("--opt ");

                   sb.append("-h ");

                   sb.append(address);

                   sb.append(" ");

                   sb.append("--user=");

                   sb.append(username);

                   sb.append(" ");

                   sb.append("--password=");

                   sb.append(password);

                   sb.append(" ");

                   sb.append("--lock-all-tables=true ");

                   sb.append("--result-file=");

                   sb.append(sqlpath);

                   sb.append(sql);

                   sb.append(" ");

                   sb.append("--default-character-set=utf8 ");

                   sb.append(databaseName);

                   System.out.println("cmd指令 "+sb.toString());

                   Runtime cmd = Runtime.getRuntime();

                   try {

                      Process p = cmd.exec(sb.toString());

                   } catch (IOException e) {

                      e.printStackTrace();

                   }

                } catch (Exception e1) {

                   e1.printStackTrace();

                }

             }

           

             /*

              * 讀取屬性文件

              */

             public static Properties getPprVue(String properName) {

           

                InputStream inputStream = JavaMysql.class.getClassLoader()

                      .getResourceAsStream(properName);

                Properties p = new Properties();

           

                try {

                   p.load(inputStream);

                   inputStream.close();

                } catch (IOException e) {

                   e.printStackTrace();

                }

           

                return p;

           

             }

           

             /*

              * 根據備份文件恢復數據庫

              */

             public static void load(String filename) {

                Properties pros = getPprVue("prop.properties");

                String root = pros.getProperty("jdbc.username");

                String pass = pros.getProperty("jdbc.password");

                String mysqlpaths = c.check().toString() + "bin" + "\\";

                String sqlpath = pros.getProperty("sql");

                String filepath = mysqlpaths + sqlpath + filename; // 備份的路徑地址

           

                String stmt1 = mysqlpaths + "mysqladmin -u " + root + " -p" + pass

                      + " create finacing"; // -p后面加的是你的密碼

                String stmt2 = mysqlpaths + "mysql -u " + root + " -p" + pass

                      + " finacing < " + filepath;

                String[] cmd = { "cmd", "/c", stmt2 };

                try {

                   Runtime.getRuntime().exec(stmt1);

                   Runtime.getRuntime().exec(cmd);

                   System.out.println("數據已從 " + filepath + " 導入到數據庫中");

                } catch (IOException e) {

                   e.printStackTrace();

                }

           

             }

           

             /*

              * Test測試

              */

             public static void main(String[] args) throws IOException {

                backup("2221.sql");

             }

          }

           

          ----------------------------------------------------->>>>>>>>

          屬性文件: prop.properties,動態配置用戶名及密碼等基本屬性

           

          username = root

          password = admin

          sql = E://oes//

          address=localhost

          databaseName=oes
          http://cobaya.cn/

           

          posted on 2012-09-07 10:08 Nirvana reborn 閱讀(5859) 評論(6)  編輯  收藏 所屬分類: ★開發經驗

          評論

          # re: java實現web應用(備份還原數據庫) 2012-09-10 15:41 Nirvana reborn

          攢!  回復  更多評論   

          # re: java實現web應用(備份還原數據庫) 2012-09-11 10:05 Milo的海域

          現在不是mysql部署到linux服務器上的應用居多么,在linux里我知道mysql的bin目錄一般是在PATH環境變量里的,可以直接用里面的命令比如mysqldump  回復  更多評論   

          # re: java實現web應用(備份還原數據庫) 2012-09-11 15:29 Nirvana reborn

          @Milo的海域
          windows和Linux都可以配置環境變量,當配置之后就不需要擔心路徑問題了!
          這里做的應用主要是針對于任何的服務器,嘻嘻!考慮到任何特殊情況的解決!  回復  更多評論   

          # re: java實現web應用(備份還原數據庫) 2012-10-18 22:42 daf

          為什么不能恢復數據呢?
            回復  更多評論   

          # re: java實現web應用(備份還原數據庫) 2012-10-18 22:43 daf

          恢復數據時只有數據庫沒有響應的表,也不報錯,求解釋,謝謝。  回復  更多評論   

          # re: java實現web應用(備份還原數據庫) 2013-06-18 14:45 有點生澀

          為什么我的無法執行啊,不能遍歷mysql注冊信息  回復  更多評論   

          <2012年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導航

          統計

          公告

          我好喜歡它,
          我的 QQ 66013804
          我想做技術流,可是我很懶,
          博客新地址:<a href="

          隨筆分類(19)

          文章檔案(1)

          博主鏈接

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 莱西市| 五原县| 天峨县| 灵宝市| 鲁山县| 盘锦市| 红安县| 临漳县| 凯里市| 滨海县| 景德镇市| 会东县| 民乐县| 溧水县| 鄂州市| 平昌县| 韶关市| 垫江县| 修武县| 定陶县| 阜新市| 河津市| 卓尼县| 兴业县| 武城县| 辉南县| 鲜城| 文昌市| 红桥区| 乳山市| 库车县| 崇阳县| 旬邑县| 浦东新区| 祥云县| 静海县| 高阳县| 云和县| 沂南县| 晋江市| 瑞昌市|