2016-07-10 4 views
1

Hallo Leute, es ist fast 3 Uhr hier in London und ich verliere diesen Kampf. Ich versuche, eine MySQL-Datenbank in eine SQL-Datei zu dumpen. Es funktioniert gut von der Befehlszeile, aber nicht, wenn ich versuche, das gleiche von Golang zu tun (unter Verwendung der os/exec Bibliothek). Ich habe fast alles ausprobiert, was mein blöder Kopf mir einfallen lassen könnte ... Es funktioniert gut mit dem echo-Befehl, aber es ignoriert mysqldump völlig. Könnten Sie mir bitte in die richtige Richtung zeigen?Golang os/exec dump mysql Daten in Datei

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

Antwort

1

Verwendung dieser (getrennte Args):

cmd := exec.Command("mysqldump", "-P3306", "-hhost", "-uuser", "-ppassword", "database_name") 

mein Test Beispielcode:

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

Wie Dump nur eine MySQL-Tabelle mit diesem Befehl exceution –

+0

wie gzip es? –

0

cmd := exec.Command("mysqldump", "-P3306", "-hhost", "-uuser", "-ppassword", "database_name" "table_name") Fügen Sie einfach den Tabellennamen w

+0

Hallo, sieht so aus als ob die Antwort unvollständig ist - bitte korrigieren Sie durch Ausfüllen. – Chaithanya