java 调用命令 备份mysql数据库

来源:互联网 发布:网络电视频道大表 编辑:程序博客网 时间:2024/04/30 06:13

 代码如下:

  1  String command  =   " cmd /c C:/Program Files/MySQL/MySQL Server 5.0/bin>mysqldump -h localhost -u root -p aijia > E:/aijia.dmp " ;
  2      try    {
  3     Process process  =  Runtime.getRuntime().exec(command);
  4     InputStreamReader ir  =   new  InputStreamReader(process
  5       .getInputStream());
  6     LineNumberReader input  =   new  LineNumberReader(ir);
  7     String line;
  8      while  ((line  =  input.readLine())  !=   null )
  9      System.out.println(line);
 10     input.close();
 11     }   catch  (IOException e)   {
 12     e.printStackTrace();
 13    }
 14 
 15 
 16 
 17 
 18  另外
 19 
 20  首先,设置mysql的环境变量(在path中添加 % MYSQL_HOME % /bin),重启电脑。
 21  完整代码:
 22        /** */ /**
 23       *  @param  args
 24        */
 25        public   static   void  main(String[] args)   {
 26            /**/ /*
 27           * 备份和导入是一个互逆的过程。
 28           * 备份:程序调用mysql的备份命令,读出控制台输入流信息,写入.sql文件;
 29           * 导入:程序调用mysql的导入命令,把从.sql文件中读出的信息写入控制台的输出流
 30           * 注意:此时定向符">"和"<"是不能用的
 31            */
 32          backup();
 33          load();
 34      }
 35 
 36        /** */ /**
 37       * 备份检验一个sql文件是否可以做导入文件用的一个判断方法:把该sql文件分别用记事本和ultra
 38       * edit打开,如果看到的中文均正常没有乱码,则可以用来做导入的源文件(不管sql文件的编码格式如何,也不管db的编码格式如何)
 39        */
 40        public   static   void  backup()   {
 41            try    {
 42              Runtime rt  =  Runtime.getRuntime();
 43 
 44               //  调用 mysql 的 cmd:
 45              Process child  =  rt
 46                      .exec( " mysqldump -u root --set-charset=utf8 bjse act_obj " ); //  设置导出编码为utf8。这里必须是utf8
 47            
 48               //  把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
 49              InputStream in  =  child.getInputStream(); //  控制台的输出信息作为输入流
 50                        
 51              InputStreamReader xx  =   new  InputStreamReader(in,  " utf8 " ); //  设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码
 52            
 53              String inStr;
 54              StringBuffer sb  =   new  StringBuffer( "" );
 55              String outStr;
 56               //  组合控制台输出信息字符串
 57              BufferedReader br  =   new  BufferedReader(xx);
 58                while  ((inStr  =  br.readLine())  !=   null )   {
 59                  sb.append(inStr  +   " /r/n " );
 60              }
 61              outStr  =  sb.toString();
 62            
 63               //  要用来做导入用的sql目标文件:
 64              FileOutputStream fout  =   new  FileOutputStream(
 65                       " e:/mysql-5.0.27-win32/bin/bjse22.sql " );
 66              OutputStreamWriter writer  =   new  OutputStreamWriter(fout,  " utf8 " );
 67              writer.write(outStr);
 68               //  注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
 69              writer.flush();
 70 
 71               //  别忘记关闭输入输出流
 72              in.close();
 73              xx.close();
 74              br.close();
 75              writer.close();
 76              fout.close();
 77 
 78              System.out.println( " /* Output OK! */ " );
 79 
 80           }   catch  (Exception e)   {
 81              e.printStackTrace();
 82          }
 83 
 84      }
 85 
 86        /** */ /**
 87       * 导入
 88       *
 89        */
 90        public   static   void  load()   {
 91            try    {
 92              String fPath  =   " e:/mysql-5.0.27-win32/bin/bjse22.sql " ;
 93              Runtime rt  =  Runtime.getRuntime();
 94 
 95               //  调用 mysql 的 cmd:
 96              Process child  =  rt.exec( " mysql -u root bjse  " );
 97              OutputStream out  =  child.getOutputStream(); // 控制台的输入信息作为输出流
 98              String inStr;
 99              StringBuffer sb  =   new  StringBuffer( "" );
100              String outStr;
101              BufferedReader br  =   new  BufferedReader( new  InputStreamReader(
102                       new  FileInputStream(fPath),  " utf8 " ));
103                while  ((inStr  =  br.readLine())  !=   null )   {
104                  sb.append(inStr  +   " /r/n " );
105              }
106              outStr  =  sb.toString();
107 
108              OutputStreamWriter writer  =   new  OutputStreamWriter(out,  " utf8 " );
109              writer.write(outStr);
110               //  注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
111              writer.flush();
112               //  别忘记关闭输入输出流
113              out.close();
114              br.close();
115              writer.close();
116 
117              System.out.println( " /* Load OK! */ " );
118 
119           }   catch  (Exception e)   {
120              e.printStackTrace();
121          }
122 
123      }

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/doney_dongxiang/archive/2009/09/19/4569935.aspx