2016-07-10 5 views
1

こんにちは、ここロンドンの3AMがこんにちは、私はこの戦いを失っています。私はsqlファイルにmysqlデータベースをダンプしようとしています。コマンドラインからはうまく動作しますが、golangから同じことをしようとすると(os/execライブラリを使用して)動作しません。私は愚かな頭が出てくる可能性があるほとんどすべてを試しました...それはエコーコマンドでうまく動作しますが、mysqldumpを完全に無視します。あなたは正しい方向に私を指差してくれますか?Golang os/execがmysqlデータをファイルにダンプする

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) 
} 

答えて

1

使用この(別の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) 
    } 

} 
+0

wのテーブル名を追加このコマンドを使用exceution –

+0

どのようにgzipするには? –

0

cmd := exec.Command("mysqldump", "-P3306", "-hhost", "-uuser", "-ppassword", "database_name" "table_name") ただ、一つだけのMySQLのテーブルをダンプする方法

+0

こんにちは、答えが不完全であるようです - 完了して修正してください。 – Chaithanya

関連する問題