mySQL einen dump erzeugen, wie?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

mySQL einen dump erzeugen, wie?

Beitragvon jens » Samstag 23. Juli 2005, 05:57

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 :?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Samstag 23. Juli 2005, 07:11

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?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 23. Juli 2005, 12:55

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 Modvoice

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder