使用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);
    }
相关推荐
朝新_2 分钟前
【LangChain】少样本提示(few-shorting) 掌握 Few-Shot 提示,让大模型按你的规则输出
java·人工智能·langchain
七七powerful4 分钟前
mac电脑安装cmca根证书
java·前端·macos
曹牧4 分钟前
Java:数据载体
java·开发语言
东北甜妹11 分钟前
K8s Ingress
java·运维·前端
杨凯凡12 分钟前
【033】Maven 生命周期与坐标:多模块结构
java·maven
lihongli00014 分钟前
关于c++中锁的种类与使用
java·开发语言·c++
凤凰院凶涛QAQ15 分钟前
《C++转Java快速入手系列》继承与多态篇
java·c++
倒霉蛋小马16 分钟前
Idea--如何同一个SpringBoot项目复制多次,模拟集群环境
java·ide·intellij-idea
IT 行者17 分钟前
Spring Boot 4.1.0-RC1 发布:核心新特性解析
java·spring boot·后端
Cat_Rocky18 分钟前
Ingress-Nginx 全局超时配置及生效方式
java·服务器·nginx