使用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);
    }
相关推荐
勤奋的小王同学~3 分钟前
(javaEE初阶)计算机是如何组成的:CPU基本工作流程 CPU介绍 CPU执行指令的流程 寄存器 程序 进程 进程控制块 线程 线程的执行
java·java-ee
TT哇5 分钟前
JavaEE==网站开发
java·redis·java-ee
2401_826097629 分钟前
JavaEE-Linux环境部署
java·linux·java-ee
缘来是庄44 分钟前
设计模式之访问者模式
java·设计模式·访问者模式
Bug退退退1231 小时前
RabbitMQ 高级特性之死信队列
java·分布式·spring·rabbitmq
梵高的代码色盘1 小时前
后端树形结构
java
cui_hao_nan2 小时前
Docker后端部署
运维·docker·容器
代码的奴隶(艾伦·耶格尔)2 小时前
后端快捷代码
java·开发语言
虾条_花吹雪2 小时前
Chat Model API
java
双力臂4042 小时前
MyBatis动态SQL进阶:复杂查询与性能优化实战
java·sql·性能优化·mybatis