大家好,伦敦时间凌晨3点,我在这场战斗中输了。我正在尝试将mysql数据库转储到sql文件中。它可以从命令行正常运行,但是当我尝试从Go(使用os/exec
库)执行相同操作时却无法正常运行。我已经尝试了几乎所有愚蠢的头想出的一切方法……它在echo命令下可以正常工作,但是它完全忽略了mysqldump。您能指出我正确的方向吗?
package main
import (
"os/exec"
"log"
"bufio"
"os"
"io"
)
func main() {
// This Doesn't
// cmd := exec.Command("mysqldump", "-P3306 -hhost -uuser -ppassword database_name")
// This Works
cmd := exec.Command("echo", "Hello World bla bla")
stdout, err := cmd.StdoutPipe()
if err != nil {
log.Fatal(err)
}
outfile, err := os.Create("./out.sql")
if err != nil {
log.Fatal(err)
}
defer outfile.Close()
// start the command after having set up the pipe
if err := cmd.Start(); err != nil {
log.Fatal(err)
}
// read command's stdout line by line
in := bufio.NewWriter(outfile)
defer in.Flush()
io.Copy(outfile, stdout)
}
使用这个(单独的Args):
cmd := exec.Command("mysqldump", "-P3306", "-hhost", "-uuser", "-ppassword", "database_name")
我的测试示例代码:
package main
import (
"io/ioutil"
"log"
"os/exec"
)
func main() {
cmd := exec.Command("mysqldump", "-P3306", "-hhost", "-uuser", "-ppassword", "database_name")
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("./out.sql", bytes, 0644)
if err != nil {
panic(err)
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句