Seite 1 von 1

Importieren von phpMyAdmin Dumps

Verfasst: Donnerstag 12. November 2020, 21:20
von raabe
Hallo zusammen,

Ich möchte gerne generierte Dumps aus phpMyAdmin mit Python3 in eine andere MySQL Datenbank importieren.

Könnt ihr mir sagen, was die beste und kompatible Weg ist?

Vielen Dank.

Re: Importieren von phpMyAdmin Dumps

Verfasst: Mittwoch 18. November 2020, 13:13
von noisefloor
Hallo,

warum willst du den Weg via Python gehen? Du kannst den Dump doch direkt über die Kommandozeile machen, siehe Link.

Wenn dir danach ist kannst du das aus Python heraus auch über eine Aufruf `subprocess` Moduls verpacken, macht aber eher wenig Sinn.

Gruß, noisefloor

Re: Importieren von phpMyAdmin Dumps

Verfasst: Mittwoch 18. November 2020, 16:03
von DeaD_EyE
Das kann man eigentlich außerhalb von Python machen. Du brauchst nur mysqldump zum Sichern und mysql um den Dump zurück zu spielen.
Könnte man mit subprocess aufrufen:

Code: Alles auswählen

import subprocess


def dump(database, username, password, outputfile):
    cmd = ["mysqldump", f"-user={username}", f"-password={password}", "-q", database]
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
    with open(outputfile, "wb") as file:
        while chunk := proc.stdout.read(1024):
            file.write(chunk)


def restore(database, username, password, dump):
    cmd = ["mysql", f"-user={username}", f"-password={password}", database]
    proc = subprocess.Popen(cmd, stdin=subprocess.PIPE)
    with open(dump, "rb") as file:
        for line in file:
            proc.stdin.write(line)

Die Konstruktionen mit Popen sind aber ziemlich wackelig. Wenn man nicht genau weiß was man macht und wo es überall knallt, hat man ziemlich schnell Datenmüll in der Datenbank oder im Dump.

Re: Importieren von phpMyAdmin Dumps

Verfasst: Mittwoch 18. November 2020, 18:55
von Sirius3
@DeaD_EyE: Warum willst Du unbedingt die Daten über PIPEs schaufeln?

Code: Alles auswählen

import subprocess

def dump(database, username, password, outputfile):
    cmd = ["mysqldump", f"-user={username}", f"-password={password}", "-q", database]
    with open(outputfile, "wb") as file:
        subprocess.run(cmd, stdout=file)

def restore(database, username, password, dumpfile):
    cmd = ["mysql", f"-user={username}", f"-password={password}", database]
    with open(dump, "rb") as file:
        subprocess.run(cmd, stdin=file)