java操作数据库定时备份与还原

mysql每天23:00自动备份

public class DatabaseBackup {  

    /** 

     *  

     * @param dbdir mysql数据库安装路径 

     * @param dbname  数据库的名称 

     * @param backdir 备份的目录 

     */  

    public static void backup(String dbdir, String dbname, String backdir) {  

        Calendar calendar = Calendar.getInstance();  

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HHmmss");  

        String currentTime = dateFormat.format(calendar.getTime());  

        try {  

            long startTime = System.currentTimeMillis();  

            Runtime rt = Runtime.getRuntime();  

            Process child = rt  

                    .exec(dbdir + "/bin/mysqldump --default-character-set=utf8 -uroot -p123456 " + dbname);  

            InputStream in = child.getInputStream();  

            InputStreamReader xx = new InputStreamReader(in, "utf8");  

  

            FileOutputStream fout = new FileOutputStream(new File(backdir, dbname + "_" + currentTime + ".bak"));  

            OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");  

  

            dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  

  

            writer.write("-- Dump by Microsoul at " + dateFormat.format(calendar.getTime()) + "\r\n");  

  

            String inStr;  

            BufferedReader br = new BufferedReader(xx);  

            // 这样实时写入文件很重要,网上有很多是将读取的存入字符串中,最后再写成文件,这样会导致Java的堆栈内存溢出。  

            while ((inStr = br.readLine()) != null) {  

                writer.write(inStr);  

                writer.write("\r\n");  

            }  

  

            writer.write("\r\n-- Use " + (System.currentTimeMillis() - startTime) + "ms\r\n");  

  

            writer.flush();  

            in.close();  

            xx.close();  

            br.close();  

            writer.close();  

            fout.close();  

        } catch (Exception e) {  

            PrintStream print = null;  

            try {  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzsgwj.html