Java使用命令导入mysql的sql文件恢复数据库

发布时间:2020-03-15 20:45:12 作者:Mos 阅读量:18037

之前写过一篇关于java mysql数据库备份与恢复的文章,但是在恢复数据库的时候有bug。在数据稍微多一点的时候,会出现恢复导入的数据不完整的情况。


不完整的原因线程过早的结束了,没有完全导入数据。其根本原因是什么呢?在网上收集了很多资料,都没有解释清楚,所以这里不讨论,知道的朋友可以留言告知,谢谢!


现在给出一种解决方案,就是建一个脚本或者批处理文件,用Java程序执行这个文件,通过读取程序输入流来判断数据是否导入结束,及脚本是否执行完成,拿window批处理文件举例:


命名为:import.bat,内容如下,其中%?%为参数。

set host=%1%
set username=%2%
set password=%3%
set port=%4%
set database=%5%
set file=%6%
mysql -h%host% -u%username% -p%password% -P%port% %database% < %file%

Java程序直接执行这个批处理文件,其中参数不要传错了,以批处理文件中的参数对齐

public boolean recovery(Map<String, String> params) throws Exception {
        String filePath = "需要恢复导入的sql文件全路径";
        Process process = null;
        try {
            Runtime runtime = Runtime.getRuntime();
            process = runtime.exec("批处理文件.bat全路径"
                    + " " + host
                    + " " + username
                    + " " + password
                    + " " + port
                    + " " + database
                    + " " + filePath
            );
            StringBuilder sb = new StringBuilder();
            InputStream in = process.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                sb.append(line + "\n");
            }
            in.close();
            try {
                process.waitFor();
            } catch (InterruptedException e) {
                System.out.println(e);
            }
            System.out.println(sb.toString());
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            if (process != null) {
                process.destroy();
            }
        }
    }

有兴趣的朋友可以研究一下,给出更好的解决方案。

支付宝打赏 微信打赏
©2021 i847.cn
部分内容转自网络,如有损害您的权益,致邮联系:jiang2008wen#126.com,一经证实,立即删除!     我要留言
备案号:蜀ICP备18020563号-1