<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java實現(xiàn)web應(yīng)用(備份還原數(shù)據(jù)庫)

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

     

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

    接調(diào)用MYSQL本身的系統(tǒng)命令。

     

    MySQL本身的系統(tǒng)命令:

    --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,數(shù)據(jù)源oes

     

    Java中執(zhí)行系統(tǒng)命令方法:

                         Runtime cmd = Runtime.getRuntime();

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

     

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

     

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

     

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

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

     

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

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

     

    軟件關(guān)聯(lián)注冊表中軟件信息:

            

            

     

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

    CheckSoftware,解析MySQL軟件安裝地址

     

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStreamReader;

     

    public class CheckSoftware {

       /*

        * 遍歷注冊表,查詢MySQL的注冊表關(guān)聯(lián)

        */

       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服務(wù)的安裝路徑

        */

       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備份還原數(shù)據(jù)庫

     

    import java.io.File;

    import java.io.IOException;

    import java.io.InputStream;

    import java.util.Properties;

     

    public class JavaMysql {

       /*

        * 備份數(shù)據(jù)庫 1、讀取配置文件 2、啟動智能查詢Mysql安裝目錄 3、備份數(shù)據(jù)庫為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服務(wù)安裝地址 "+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;

     

       }

     

       /*

        * 根據(jù)備份文件恢復(fù)數(shù)據(jù)庫

        */

       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("數(shù)據(jù)已從 " + filepath + " 導(dǎo)入到數(shù)據(jù)庫中");

          } catch (IOException e) {

             e.printStackTrace();

          }

     

       }

     

       /*

        * Test測試

        */

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

          backup("2221.sql");

       }

    }

     

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

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

     

    username = root

    password = admin

    sql = E://oes//

    address=localhost

    databaseName=oes
    http://cobaya.cn/

     

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

    評論

    # re: java實現(xiàn)web應(yīng)用(備份還原數(shù)據(jù)庫) 2012-09-10 15:41 Nirvana reborn

    攢!  回復(fù)  更多評論   

    # re: java實現(xiàn)web應(yīng)用(備份還原數(shù)據(jù)庫) 2012-09-11 10:05 Milo的海域

    現(xiàn)在不是mysql部署到linux服務(wù)器上的應(yīng)用居多么,在linux里我知道m(xù)ysql的bin目錄一般是在PATH環(huán)境變量里的,可以直接用里面的命令比如mysqldump  回復(fù)  更多評論   

    # re: java實現(xiàn)web應(yīng)用(備份還原數(shù)據(jù)庫) 2012-09-11 15:29 Nirvana reborn

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

    # re: java實現(xiàn)web應(yīng)用(備份還原數(shù)據(jù)庫) 2012-10-18 22:42 daf

    為什么不能恢復(fù)數(shù)據(jù)呢?
      回復(fù)  更多評論   

    # re: java實現(xiàn)web應(yīng)用(備份還原數(shù)據(jù)庫) 2012-10-18 22:43 daf

    恢復(fù)數(shù)據(jù)時只有數(shù)據(jù)庫沒有響應(yīng)的表,也不報錯,求解釋,謝謝。  回復(fù)  更多評論   

    # re: java實現(xiàn)web應(yīng)用(備份還原數(shù)據(jù)庫) 2013-06-18 14:45 有點生澀

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

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

    導(dǎo)航

    統(tǒng)計

    公告

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

    隨筆分類(19)

    文章檔案(1)

    博主鏈接

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 看亚洲a级一级毛片| 国产极品美女高潮抽搐免费网站| 偷自拍亚洲视频在线观看| 国产亚洲A∨片在线观看| 日本免费网站观看| 精品免费久久久久久久| 两个人看的www免费高清| 亚洲AV第一成肉网| 亚洲高清一区二区三区| 麻豆亚洲AV永久无码精品久久 | 内射无码专区久久亚洲| 99视频全部免费精品全部四虎 | 久久精品国产亚洲综合色| 好爽好紧好大的免费视频国产| 亚洲一级免费毛片| 日韩精品久久久久久免费| 成人免费一区二区三区| 成人午夜免费视频| 色噜噜的亚洲男人的天堂| 亚洲欧美日韩综合久久久久| 亚洲制服丝袜精品久久| 亚洲福利视频一区| 国产亚洲福利精品一区| 亚洲一区无码中文字幕| 亚洲精品视频免费| 亚洲阿v天堂在线2017免费| 国产免费黄色大片| 日本黄色免费观看| 日韩精品视频免费观看| 午夜毛片不卡高清免费| 真实乱视频国产免费观看 | 亚洲人成电影网站色| 国产亚洲精品影视在线| 亚洲色最新高清av网站| 亚洲精品理论电影在线观看| 亚洲综合久久精品无码色欲| 亚洲色无码专区一区| 亚洲成a人无码亚洲成av无码 | 最近高清中文字幕免费| 19禁啪啪无遮挡免费网站| 亚洲国产精品免费在线观看|