使用 mysqldump 从 Java 备份 mysql 数据库失败

Posted

技术标签:

【中文标题】使用 mysqldump 从 Java 备份 mysql 数据库失败【英文标题】:Backup mysql database from Java using mysqldump failed 【发布时间】:2021-09-12 16:36:45 【问题描述】:

我正在使用这样的mysqldump:

Runtime.getRuntime().exec("mysqldump -u USERNAME -pPASSWORD DBNAME > /path/to/location/backup.sql");

为了将它转储到我的本地文件中,我的 java 程序是使用 kubernetes 部署的。 这是我的代码:

 @RequestMapping(value = "/testDumping", method = RequestMethod.POST, RequestMethod.GET)
public Object test(@RequestBody Map<String,Object> params) throws IOException 
    String runStatement = (String)params.get("runStatement");
    Runtime runtime = Runtime.getRuntime();
    Process exec = runtime.exec(runStatement);
    return exec;

我终于得到了这个异常“java.io.IOException:无法运行程序“mysqldump”:错误= 2,没有这样的文件或目录”。这里有什么问题?

【问题讨论】:

您好,能否请您也发布错误日志? 您好,我刚刚完成了帖子。 【参考方案1】:

错误消息准确地告诉您问题所在:

java.io.IOException:无法运行程序“mysqldump”:错误=2,没有这样的文件或目录

这意味着 shell 无法找到“mysqldump”的可执行文件。尝试在你的命令中给出 mysqldump 的整个绝对路径,例如(假设类 linux 系统):

Runtime.getRuntime().exec("/usr/bin/mysqldump -u USERNAME -p PASSWORD DBNAME > /path/to/location/backup.sql");

Linux 上的确切路径通常可以使用命令which mysqldump 找到

您也可以将此路径添加到您的 PATH 环境变量中,并保持您的命令不变(不是 100% 确定这一点,因为我通常在 Windows 上工作并且远非 Linux 专家)。

【讨论】:

您好,我尝试将绝对路径添加到命令中,但随后出现此错误“mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock ' (2) 尝试连接时"。 这意味着你前进了一步。现在是使用正确的命令行配置 mysqldump 的问题,在其中我大多不合格......对不起(您现在实际上正在调用 mysqldump,但连接详细信息错误。检查套接字/主机/端口/用户/密码)

以上是关于使用 mysqldump 从 Java 备份 mysql 数据库失败的主要内容,如果未能解决你的问题,请参考以下文章

mysqldump备份不输入密码直接备份

Java备份MySQL

使用mysqldump进行全量+增量备份方案操作记录

mysqldump备份的问题

mysql逻辑备份(mysql dump的使用)

mysqldump 逻辑备份搭建备库