You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java代码将含数据库备份的.sql文件导入服务器另一数据库?

如何通过Java代码导入SQL备份文件到目标数据库?

要实现将.sql格式的数据库备份文件导入服务器上的目标数据库,可以通过Java调用系统原生的mysql命令行工具来完成,这种方式直接利用数据库自带的导入能力,处理大备份文件也更高效。

实现代码

import java.io.IOException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DumpFileClass {
    // 初始化日志实例(需引入SLF4J等日志框架依赖)
    private static final Logger logger = LoggerFactory.getLogger(DumpFileClass.class);

    public static boolean importDump(String host, String username, String password, String database, String dumpFilePath) {
        // 拼接mysql导入命令:-p后直接跟密码,不要加空格
        String mysqlCommand = "mysql -h " + host + " -u " + username + " -p" + password + " " + database + " < " + dumpFilePath;
        System.out.println("执行的命令:" + mysqlCommand);
        
        try {
            // 执行系统命令
            Process process = Runtime.getRuntime().exec(mysqlCommand);
            logger.trace("进程实例:{}", process);
            
            // 等待命令执行完成,获取退出码
            int exitCode = process.waitFor();
            logger.trace("命令退出码:{}", exitCode);
            System.out.println("命令执行退出码:" + exitCode);
            
            // 退出码为0表示执行成功
            return exitCode == 0;
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
            return false;
        }
    }
}

关键说明

  • 命令拼接规则:mysql命令中-p和密码之间不能有空格,否则会被识别为交互式输入密码;<符号用于将.sql文件内容作为命令输入流。
  • 进程执行与结果判断:通过Runtime.getRuntime().exec()启动系统进程,waitFor()会阻塞当前线程直到命令执行完成,退出码0代表执行成功,非0则表示出错。
  • 异常处理:捕获命令执行时的IO异常(如命令不存在、文件无法读取)和线程中断异常,出现异常时返回false表示导入失败。

注意事项

  • 安全风险:命令行直接传递密码会被系统进程列表(如ps命令)捕获,生产环境建议改用--defaults-extra-file=/path/to/my.cnf指定包含用户名密码的配置文件,避免明文暴露。
  • 路径与权限:确保dumpFilePath是Java进程可访问的绝对路径,且运行Java进程的用户拥有读取该文件、执行mysql命令以及目标数据库的写入权限。
  • 日志依赖:代码中使用SLF4J日志框架,需在项目中引入对应依赖(如slf4j-api和具体实现如logback-classic),若不需要日志可删除相关logger代码。

内容的提问来源于stack exchange,提问作者Mayur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:06:08