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

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

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

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

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

     

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

    接調(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

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

          目標(biāo)文件--result-file,編碼--default-character-set=utf8,數(shù)據(jù)源oes

     

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

                         Runtime cmd = Runtime.getRuntime();

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

     

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

     

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

     

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

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

     

    軟件信息在注冊(cè)表中的位置:

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

     

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

            

            

     

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

    CheckSoftware,解析MySQL軟件安裝地址

     

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStreamReader;

     

    public class CheckSoftware {

       /*

        * 遍歷注冊(cè)表,查詢MySQL的注冊(cè)表關(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();// 去掉前兩行無(wú)用信息

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

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

             return pathString;

          }

          return pathString;

       }

    }

     

     

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

    JavaMysql備份還原數(shù)據(jù)庫(kù)

     

    import java.io.File;

    import java.io.IOException;

    import java.io.InputStream;

    import java.util.Properties;

     

    public class JavaMysql {

       /*

        * 備份數(shù)據(jù)庫(kù) 1、讀取配置文件 2、啟動(dòng)智能查詢Mysql安裝目錄 3、備份數(shù)據(jù)庫(kù)為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ù)庫(kù)

        */

       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ù)庫(kù)中");

          } catch (IOException e) {

             e.printStackTrace();

          }

     

       }

     

       /*

        * Test測(cè)試

        */

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

          backup("2221.sql");

       }

    }

     

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

    屬性文件: prop.properties,動(dòng)態(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) 評(píng)論(6)  編輯  收藏 所屬分類: ★開發(fā)經(jīng)驗(yàn)

    評(píng)論

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

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

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

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

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

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

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

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

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

    恢復(fù)數(shù)據(jù)時(shí)只有數(shù)據(jù)庫(kù)沒(méi)有響應(yīng)的表,也不報(bào)錯(cuò),求解釋,謝謝。  回復(fù)  更多評(píng)論   

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

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

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

    導(dǎo)航

    統(tǒng)計(jì)

    公告

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

    隨筆分類(19)

    文章檔案(1)

    博主鏈接

    最新評(píng)論

    閱讀排行榜

    主站蜘蛛池模板: 免费在线观看一区| 国产精品久久久久久亚洲影视| 亚洲成人福利在线| 亚洲五月综合缴情婷婷| 亚洲综合久久精品无码色欲| 亚洲av日韩av永久在线观看| 四虎影视在线看免费观看| 国产白丝无码免费视频| 久久WWW色情成人免费观看| 国产成人免费a在线资源| 亚洲精品国产字幕久久不卡| 亚洲国产夜色在线观看| WWW国产亚洲精品久久麻豆| 国产一区二区三区免费观在线| 中文字幕亚洲免费无线观看日本 | 亚洲av无码专区在线电影 | 亚洲欧美日韩国产成人| 免费一级毛片在线播放放视频| 免费毛片在线看不用播放器| 免费可以看黄的视频s色| 免费久久精品国产片香蕉| 久久亚洲高清观看| 在线亚洲高清揄拍自拍一品区| 又粗又长又爽又长黄免费视频 | 两个人日本WWW免费版| 114一级毛片免费| 亚洲第一页综合图片自拍| 图图资源网亚洲综合网站| 亚洲精品宾馆在线精品酒店| 两个人看的www免费视频| 2021免费日韩视频网| 亚洲欧洲中文日韩久久AV乱码| 亚洲经典在线中文字幕| 国产精品成人亚洲| 最近免费中文字幕大全免费版视频| 尤物永久免费AV无码网站| 亚洲天天做日日做天天看| 高潮内射免费看片| 亚洲性线免费观看视频成熟| 最新亚洲成av人免费看| 亚洲GV天堂无码男同在线观看|