【问题标题】:achieve mysql dump and restore in one command in golang [duplicate]在golang中通过一个命令实现mysql转储和恢复[重复]
【发布时间】:2021-10-02 09:33:03
【问题描述】:

我想使用 golang 运行这个命令,如何使用 exec.Command 来实现它

mysqldump -u root -p database_name | mysql -h remote_host -u root -p remote_database_name

请任何人帮助我

谢谢 迈克

【问题讨论】:

    标签: go


    【解决方案1】:

    您不能将作为 shell 构造的管道作为命令行参数传递。

    您可以使用-c string 选项执行bash 以执行string 中的命令。

    str := "mysqldump -u root -p database_name | mysql -h remote_host -u root -p remote_database_name"
    output, err := exec.Command("bash", "-c", str).Output()
    if err != nil {
        panic(err)
    }
    fmt.Println(string(output))
    

    或者您可以使用(*exec.Cmd).StdoutPipe 将一个命令的输出通过管道传输到另一个命令的输入。

    c1 := exec.Command("mysqldump", "-u", "root", "-p", "database_name")
    out, err := c1.StdoutPipe()
    if err != nil {
        panic(err)
    }
    
    c2 := exec.Command("mysql", "-h", "remote_host", "-u", "root", "-p", "remote_database_name")
    c2.Stdin = out
    
    if err := c2.Start(); err != nil {
        panic(err)
    }
    if err := c1.Run(); err != nil {
        panic(err)
    }
    if err := c2.Wait(); err != nil {
        panic(err)
    }
    

    【讨论】:

    • 感谢它的工作@mkopriva
    【解决方案2】:

    您在下面尝试了吗?参考here

    package main
    
    import (
        "log"
        "os/exec"
    )
    
    func main() {
        cmd := exec.Command("mysqldump", "-u", "root", "-p", "database_name", "|", "mysql", "-h", "remote_host", "-u", "root", "-p", "remote_database_name")
        err := cmd.Run()
        if err != nil { 
            log.Printf("Command finished with error: %v", err)
        }
    }
    

    【讨论】:

    • 实际上我尝试了上述方法,因为以下仍然出现错误命令完成错误:退出状态6
    猜你喜欢
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    相关资源
    最近更新 更多