数据库备份还原

来源:互联网 发布:异次元的软件世界 编辑:程序博客网 时间:2024/06/10 00:00
Java对MySql数据库进行备份与还原

数据库的备份与还原对项目而言是无疑是对安全考虑的好方法,MySQL 数据库备份原理: Navicat等数据库界面软件通用的数据库备份原理就是直接调用MYSQL本身的系统命令。
那么Java是如何来实现备份与还原mysql的呢:这里JavaApi里面给出了Runtime.getRuntime().exe("")方法,它可以执行系统目录下bin下的cmd命令比如windows下的
mysql.exe或者linux下的mysql/bin/mysql命令
MySql数据库备份

复制代码事例1
 1     public static String comman="C:/Program Files/MySQL/MySQL Server 5.5/bin/mysql.exe -uroot -proot test"; 2     public static void back(String mySqlBackupName,String mysqlBackupPath, String command){ 3          4         String fPath=mysqlBackupPath+"/"+new Date().getTime()+".sql"; 5          6         Runtime rt = Runtime.getRuntime(); 7         try { 8             Process child = rt.exec(command); 9             InputStream in = child.getInputStream();10             InputStreamReader input = new InputStreamReader(in,"utf8");11             12             String inStr;13             StringBuffer sb = new StringBuffer("");14             String outStr;15             16             BufferedReader br = new BufferedReader(input);17             while ((inStr = br.readLine()) != null) {     18                 sb.append(inStr + "\r\n");     19             }     20             outStr = sb.toString(); 21             22             FileOutputStream fout = new FileOutputStream(fPath);23             OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");    24             writer.write(outStr);25             writer.flush();   26             27             in.close();     28             input.close();     29             br.close();     30             writer.close();     31             fout.close();     32             33             logger.info("MYSQL备份成功");34         } catch (IOException e) {35             e.printStackTrace();36         }37     }
复制代码

MySql数据库备份(这里用Servlet实现)

复制代码
 1     private static final Logger logger = Logger.getLogger(CBSDAddServlet.class); 2     public static String fPath="D:/apache-tomcat-6.0.30/webapps/test/databaseSql/2014-04-15.sql"; 3     public static String comman=" C:/Program Files/MySQL/MySQL Server 5.5/bin/mysql -uroot -proot --default-character-set=utf8 test "; 4         5     private static final long serialVersionUID = -3323607254010948405L; 6  7     public void doGet(HttpServletRequest request, HttpServletResponse response) 8             throws ServletException, IOException { 9 10         doPost(request, response);11     }12 13     public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {14 15         boolean flag=false;16         try {17             /***18              * 关闭当前项目与数据库的连接19              * 这里很重要,如果是hibernate等连接池的session与数据库保持连接的话,因为还原会直接覆盖当前的数据库20              * 而覆盖之前当前的session与数据库保持了一份连接,所以点击备份时会直至卡在那里...这里得 关闭closeSession();操作21              * ***/22             BaseDao.closeSession(new BaseDao().getSession());23             hy(request, response);24             flag = true;25             logger.info("还原成功");26         } catch (Exception e) {27             e.printStackTrace();28             logger.info("开始失败...");29         }30         31         response.setCharacterEncoding("UTF-8");32         response.getWriter().print(flag);33     }34 35 36     public void hy(HttpServletRequest request, HttpServletResponse response) throws IOException{37         Runtime rt = Runtime.getRuntime(); 38         Process child = rt.exec(comman);39 40         InputStreamReader in =new InputStreamReader(new FileInputStream(fPath),"UTF-8");41         BufferedReader br =new BufferedReader(in);42       43         String inStr =null;44         StringBuffer sb = new StringBuffer("");45         String outStr;46         while((inStr=br.readLine())!=null){47              sb.append(inStr + "\r\n"); 48         }49         outStr = sb.toString();50         51         logger.info(outStr);52 53         OutputStream out = child.getOutputStream();54         OutputStreamWriter writer =new OutputStreamWriter(out,"UTF-8");55         writer.write(outStr);56         writer.flush();57         58         out.flush();59         out.close();     60         br.close();     61         writer.close();  62         logger.info("数据回复成功!");63     }
实例2

java实现mysql数据库的备份及还原

备份:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public static void backup() {
        try {
            Runtime rt = Runtime.getRuntime();
 
            // 调用 调用mysql的安装目录的命令
            Process child = rt
                    .exec("e:\\MySQL\\bin\\mysqldump -h localhost -uroot -p123 db_name");
            // 设置导出编码为utf-8。这里必须是utf-8
            // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
            InputStream in = child.getInputStream();// 控制台的输出信息作为输入流
 
            InputStreamReader xx = new InputStreamReader(in, "utf-8");
            // 设置输出流编码为utf-8。这里必须是utf-8,否则从流中读入的是乱码
 
            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("c:\\test.sql");
            OutputStreamWriter writer = new OutputStreamWriter(fout, "utf-8");
            writer.write(outStr);
            writer.flush();
            in.close();
            xx.close();
            br.close();
            writer.close();
            fout.close();
 
            System.out.println("");
 
        catch (Exception e) {
            e.printStackTrace();
        }
 
    }

 

还原:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public static void restore(String databaseName) {
        try {
            Runtime runtime = Runtime.getRuntime();
            Process process = runtime
                    .exec("e:\\MySQL\\bin\\mysql.exe -hlocalhost -uroot -p123 --default-character-set=utf8 "
                            + databaseName);
            OutputStream outputStream = process.getOutputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    new FileInputStream("C:\\test.sql"), "utf-8"));
            String str = null;
            StringBuffer sb = new StringBuffer();
            while ((str = br.readLine()) != null) {
                sb.append(str + "\r\n");
            }
            str = sb.toString();
            // System.out.println(str);
            OutputStreamWriter writer = new OutputStreamWriter(outputStream,
                    "utf-8");
            writer.write(str);
            writer.flush();
            outputStream.close();
            br.close();
            writer.close();
        catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        catch (FileNotFoundException e) {
            e.printStackTrace();
        catch (IOException e) {
            e.printStackTrace();
        }
    }
原创粉丝点击