【发布时间】:2017-09-22 04:42:20
【问题描述】:
我正在尝试从主机系统调用 docker 的 mysqldump 以从 golang 中保存 mysql 转储。它适用于主机 mysqldump,但不适用于 docker 的 mysqldump。
func writeDb(dbName string)
{
var mysqldumpPath string = "/usr/bin/mysqldump"
//var mysqldumpPath string = "/Applications/MAMP/Library/bin/mysqldump"
//cmd := exec.Command(mysqldumpPath, fmt.Sprintf("-u%s", USER), fmt.Sprintf("-p%s", PASSWORD) , dbName)
cmd := exec.Command("docker", "exec", "some-mysql", mysqldumpPath, fmt.Sprintf("%s", USER), fmt.Sprintf("-p%s", PASSWORD) , dbName, ">", fmt.Sprintf("%s.sql", dbName))
stdout, err := cmd.StdoutPipe()
if err != nil
{
log.Fatal(err)
}
if err := cmd.Start(); err != nil
{
log.Fatal(err)
}
bytes, err := ioutil.ReadAll(stdout)
if err != nil
{
log.Fatal(err)
}
err = ioutil.WriteFile("./backup/" + dbName +".sql", bytes, 0644)
if err != nil
{
panic(err)
}
}
我只得到了非空数据库的那个 empty mysql dump
【问题讨论】:
-
您正在执行 exec 并将输出重定向到文件,然后期望数据也在标准输出上,这是行不通的。您应该使用一个标准输出或重定向
-
您的问题解决了吗?因为你确实选择了我的答案...
-
是的,我解决了这个问题,但是用另一种方式,我会在我的答案中发布解决方案