使用Java Runtime执行docker下的mysqldump

Runtime直接使用 docker exec mysql mysqldump -u%s -p%s cblog > %s(%s是需要填充的数据),命令无法执行并且不会报错,需要使用字符串数组加入"sh", "-c",具体代码示例:

java 复制代码
    /**
     * MySQL数据备份
     *
     * @param dataPath 备份文件的保存路径
     * @throws IOException
     */
    private void backupData(String dataPath) throws IOException {
        long start = System.currentTimeMillis();
        String cmd = String.format("docker exec mysql mysqldump -u%s -p%s cblog > %s", dataSourceProperties.getUsername(), dataSourceProperties.getPassword(), dataPath);
        String[] cmds = {"sh", "-c", cmd};
        log.debug("欲执行命令:{}", cmd);
        try (InputStream inputStream = Runtime.getRuntime().exec(cmds).getInputStream();
             InputStreamReader inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
             BufferedReader bufferedReader = new BufferedReader(inputStreamReader);) {
            String line = bufferedReader.readLine();
            while (line != null) {
                log.debug(line);
                line = bufferedReader.readLine();
            }
        }
        long end = System.currentTimeMillis();
        log.info("mysql备份命令执行成功,耗时:{}ms", end - start);
    }
相关推荐
回忆是昨天里的海18 分钟前
k8s集群-节点间通信之安装kube-flannel插件
java·docker·kubernetes
信仰_27399324330 分钟前
Mybatis-Spring重要组件介绍
java·spring·mybatis
盖世英雄酱5813630 分钟前
java深度调试【第二章通过堆栈分析性能瓶颈】
java·后端
没有bug.的程序员40 分钟前
AOP 原理深剖:动态代理与 CGLIB 字节码增强
java·spring·aop·动态代理·cglib
2401_8370885041 分钟前
ResponseEntity - Spring框架的“标准回复模板“
java·前端·spring
lang201509281 小时前
Spring Boot RSocket:高性能异步通信实战
java·spring boot·后端
阿维的博客日记1 小时前
从夯到拉的Redis和MySQL双写一致性解决方案排名
redis·分布式·mysql
21号 11 小时前
16.MySQL 服务器配置与管理
服务器·数据库·mysql
默默coding的程序猿2 小时前
1.北京三维天地公司-实施实习生
java·sql·技术支持·面经·实施·实施工程师·三维天地
SamDeepThinking2 小时前
为超过10亿条记录的订单表新增字段
mysql