java备份mysql数据库

本文介绍了一种使用Java实现数据库备份和还原的方法。通过调用mysqldump和mysql命令来完成备份文件的生成和数据库内容的恢复。文章详细展示了如何处理中文字符集问题,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java代码 复制代码
  1. public boolean backup() {//备份   
  2.   
  3.     try {   
  4.         Runtime rt = Runtime.getRuntime();   
  5.   
  6.         String mysql = "mysqldump -uroot -p123456 db";   
  7.   
  8.         // 调用 mysql 的 cmd:   
  9.         Process child = rt   
  10.         .exec("cmd /c "+mysql);// 设置导出编码为utf8。这里必须是utf8   
  11.   
  12.         // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行   
  13.         InputStream in = child.getInputStream();// 控制台的输出信息作为输入流   
  14.   
  15.         InputStreamReader xx = new InputStreamReader(in, "utf8");// 设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码   
  16.   
  17.         String inStr;   
  18.         StringBuffer sb = new StringBuffer("");   
  19.         String outStr;   
  20.         // 组合控制台输出信息字符串   
  21.         BufferedReader br = new BufferedReader(xx);   
  22.         while ((inStr = br.readLine()) != null) {   
  23.             sb.append(inStr + "/r/n");   
  24.         }   
  25.         outStr = sb.toString();   
  26.   
  27.         // 要用来做导入用的sql目标文件:   
  28.         FileOutputStream fout = new FileOutputStream(   
  29.                 "c:/db.sql");   
  30.         OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");   
  31.         writer.write(outStr);   
  32.         // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免   
  33.         writer.flush();   
  34.   
  35.         // 别忘记关闭输入输出流   
  36.         in.close();   
  37.         xx.close();   
  38.         br.close();   
  39.         writer.close();   
  40.         fout.close();   
  41.   
  42.         System.out.println("/* Output OK! */");   
  43.                        
  44.         String error="备份成功!";   
  45.            
  46.         StrError = (new String(error.getBytes("ISO-8859-1"),"UTF-8"));     
  47.   
  48.     } catch (Exception e) {   
  49.         e.printStackTrace();   
  50.         StrError=StrError+"failure!<br>";   
  51.     }   
  52.   
  53.     return true;   
  54. }   
  55.   
  56. public boolean load() {//还原   
  57.   
  58.     try {   
  59.   
  60.         String fPath = "c:/db.sql";   
  61.         Runtime rt = Runtime.getRuntime();   
  62.   
  63.         // 调用 mysql 的 cmd:   
  64.         Process child = rt.exec("mysql -uroot -p123456 db ");   
  65.         OutputStream out = child.getOutputStream();//控制台的输入信息作为输出流   
  66.         String inStr;   
  67.         StringBuffer sb = new StringBuffer("");   
  68.         String outStr;   
  69.         BufferedReader br = new BufferedReader(new InputStreamReader(   
  70.                 new FileInputStream(fPath), "utf8"));   
  71.         while ((inStr = br.readLine()) != null) {   
  72.             sb.append(inStr + "/r/n");   
  73.         }   
  74.         outStr = sb.toString();   
  75.   
  76.         OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");   
  77.         writer.write(outStr);   
  78.         // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免   
  79.         writer.flush();   
  80.         // 别忘记关闭输入输出流   
  81.         out.close();   
  82.         br.close();   
  83.         writer.close();   
  84.            
  85.   
  86.         System.out.println("/* Load OK! */");   
  87.         StrError=StrError+"备份成功!<br>".getBytes("gb2312");   
  88.     } catch (Exception e) {   
  89.         e.printStackTrace();   
  90.         StrError=StrError+"failure!<br>";   
  91.     }   
  92.     return true;   
  93. }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值