mySQL einen dump erzeugen, wie?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Kann man überhaupt mit mySQLdb einen dump aller Daten erzeugen? Ich meine natürlich per CGI...

In PHP gibt's eine Lösung: http://www.hosteurope.de/faq/index.php?cpid=11019 :?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ha! 8)

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import cgitb;cgitb.enable()
import os,sys,cgi

try:
    import subprocess
except:
    from PyLucid_python_backports import subprocess




class sql_dump:
    def __init__( self, dbconf ):
        self.dbconf = dbconf

        # Daten zum Downloaden?
        self.download = True
        #~ self.download = False

        command = "/usr/bin/mysqldump -u%(u)s -p%(p)s -h%(h)s %(n)s | /bin/gzip" % {
        #~ command = "/usr/bin/mysqldump -u%(u)s -p%(p)s -h%(h)s %(n)s" % {
            "u" : dbconf["dbUserName"],
            "p" : dbconf["dbPassword"],
            "h" : dbconf["dbHost"],
            "n" : dbconf["dbDatabaseName"],
        }
        self.dump( command )

    def error( self, *txt ):
        print "Content-type: text/html; charset=utf-8\r\n\r\n"
        print "<h1>SQL dump Fehler:</h1>"
        print "<br/>".join( [cgi.escape(str(i)) for i in txt] )
        sys.exit()

    def dump( self, command ):
        try:
            process = subprocess.Popen( command,
                shell=True,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE
            )
        except Exception,e:
            self.error( "subprocess Fehler:", e )

        #~ stderr = process.stderr.read()
        #~ if stderr != "":
            #~ self.error( "command error:", stderr )

        if self.download == False:
            print "Content-type: text/html; charset=utf-8\r\n\r\n"
            print "<h1>TEST:</h1>"
            print process.stdout.read(1024)
            sys.exit()

        print 'Content-Disposition: attachment; filename=%s.gz' % self.dbconf["dbDatabaseName"]
        print 'Content-Transfer-Encoding: binary'
        print 'Content-Type: application/octet-stream; charset=utf-8\n'
        sys.stdout.write( process.stdout.read() )




if __name__ == "__main__":
    dbconf = {
        "dbUserName"        : "SQL-DB-Username",
        "dbPassword"        : "SQL-DB-Password",
        "dbHost"            : "localhost",
        "dbDatabaseName"    : "SQL-DB-Name"
    }

    sql_dump( dbconf )
Komischerweise geht die "stderr" Abfrage nicht auf Hosteurope. Lokal bei mit geht's, obwohl da auch eine Fehler kommt... Kann man stderr nur abfragen, wenn auch ein Fehler passiert ist?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wie wärs wenn du in der MySQLdb Mailingliste nachfragst? Dort gibt es sicher wesentlich mehr Leute die sich damit beschäftigen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten