Andreas Cloos: mySQL: Größe der Datensicherung, die sich noch einspielen läßt

Hallo Zusammen,

ich habe gerade eine Datenbanksicherung gemacht und auf einem anderem Rechner eingespielt (via PHPmyAdmin). Es werden 32 Tabellen angelegt und befüllt, insgesamt werden 3.857 Befehle ausgeführt. Die sql-Datei ist knapp 650 kb groß. Ich rechne damit, daß sie zum Jahresende bis zu 12 MB haben wird, was für ein Flatfile ja schon eine ganze Menge ist.

Auf Localhost dauert das Einlesen der Sicherung über PHPmyAdmin ziemlich genau 75 Sekunden, während es die Kommandozeile in 57 Sekunden schafft (sowas in der Art hatte ich auch vermutet).

Jetzt mal eine Frage, wie groß kann so ein File denn werden, ohne das es beim Einlesen zu Problemem kommt? Klar, wenn ich direkt an dem betroffenen Rechner sitze, werde ich die Konsole nehmen, nur wenn ich ihn fernwarte, werde ich wohl auf PHPmyAdmin zurückgreifen müssen. Spielt da sowas wie die maximale Upload-Größe eine Rolle? Oder kann es da andere Probleme geben, die da auf mich zukommen können. Ich würde das gerne mal simulieren und nicht im Ernstfall deppert ausschauen... und da frage ich mich halt, an was ich da denken muß.

Ach ja: Kann man irgendwo aus dem Netz große sql-Dateien runterladen, um sowas auszuprobieren? Für Benchmarktests oder so? Ist ja wurscht, was da drin steht, Hauptsache sie verschaffen dem Rechner Arbeit :-)

--
Greetz,
Andreas
sh:( fo:) ch:| rl:| br:> n4:# ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:<
  1. Halihallo Andreas

    Auf Localhost dauert das Einlesen der Sicherung über PHPmyAdmin ziemlich genau 75 Sekunden, während es die Kommandozeile in 57 Sekunden schafft (sowas in der Art hatte ich auch vermutet).

    Die Übertragung zu phpMyAdmin erfolgt kodiert => muss etwas mehr übertragen werden.
    Das einlesen ist natürlich auch etwas langsamer => C <=> PHP.

    Jetzt mal eine Frage, wie groß kann so ein File denn werden, ohne das es beim Einlesen zu Problemem kommt? Klar, wenn ich direkt an dem betroffenen Rechner sitze, werde ich die Konsole nehmen, nur wenn ich ihn fernwarte, werde ich wohl auf PHPmyAdmin zurückgreifen müssen. Spielt da sowas wie die maximale Upload-Größe eine Rolle?

    Ja. Da musst du deinen Anbieter fragen, wo er die Grenze angesetzt hat, aber meistens
    ist der Upload begrenzt. Ansonsten sehe ich eigentlich kein Problem, ausser, dass
    z. B. der Browser irgendwann abbrechen könnte, wegen Timeout oder ähnlichem...

    Oder kann es da andere Probleme geben, die da auf mich zukommen können. Ich würde das gerne mal simulieren und nicht im Ernstfall deppert ausschauen... und da frage ich mich halt, an was ich da denken muß.

    Ich würde in jedem Fall empfehlen, die Datei zu splitten, sodass die einzelnen Teile
    daraus, nicht über 1MB kommen. Dann sind Timeouts und Upload-Grenzen umgangen.
    Besser wäre noch, wenn die Datei über FTP hochgeladen werden würde und du dann ein
    PHP/Perl Script lädst, welches diese Datei über das lokale Dateisystem einliest. Dann
    hast du die Upload-Probleme nicht und FTP ist nicht ein ein Timeout gebunden, falls etwas
    geschieht. Problem hier: du musst etwas programmieren.

    Ach ja: Kann man irgendwo aus dem Netz große sql-Dateien runterladen, um sowas auszuprobieren? Für Benchmarktests oder so? Ist ja wurscht, was da drin steht, Hauptsache sie verschaffen dem Rechner Arbeit :-)

    ? - Wäre es so schwierig ein Programm herzustellen, dass irgendwas generiert?

    Viele Grüsse

    Philipp

  2. Hi!

    ich habe gerade eine Datenbanksicherung gemacht und auf einem anderem Rechner eingespielt (via PHPmyAdmin). Es werden 32 Tabellen angelegt und befüllt, insgesamt werden 3.857 Befehle ausgeführt. Die sql-Datei ist knapp 650 kb groß. Ich rechne damit, daß sie zum Jahresende bis zu 12 MB haben wird, was für ein Flatfile ja schon eine ganze Menge ist.

    wieso?

    Auf Localhost dauert das Einlesen der Sicherung über PHPmyAdmin ziemlich genau 75 Sekunden, während es die Kommandozeile in 57 Sekunden schafft (sowas in der Art hatte ich auch vermutet).

    Den Unterschied hätte ich noch größer geschätzt, da phpmyadmin die Querys alle selber parst(mit PHP) und an die DB schickt. Ich denke schneller ist nur noch so eine binäre backup-File, aber das habe ich noch nie probiert. Eine CSV-Datei wird vermutlich langsamer sein, aber ich würde es trotzdem mal testen.

    Jetzt mal eine Frage, wie groß kann so ein File denn werden, ohne das es beim Einlesen zu Problemem kommt?

    Das hängt vollkommen von Deinen Rechten auf dem System und dem System an sich ab. Wenn Du kein telnet/SSH zur Verfügung hast und das ganze via phpmyadmin machen musst, dann mußt Du Dich halt an die in der php.ini festgelegten Beschränkungen halten, wenn Du die nicht verändern kannst. Das wären IMHO das Upload-Limit, die max Laufzeit(bei langsamer Internetanbindung des eigenen Rechners ein Problem!). Dazu gibt es noch Beschränkungsmöglichkeiten auf Systemebene was den Recourcenverbrauch von PHP-Scripten angeht. Vielleicht kannst Du ja auch das Kommandozeilentool über einen System-Aufruf starten

    system("mysql tabelle < flatfile.sql");

    So würdest Du vermutlich schneller und würdest Dir vor allem die Upload-Zeit sparen!

    Klar, wenn ich direkt an dem betroffenen Rechner sitze, werde ich die Konsole nehmen, nur wenn ich ihn fernwarte, werde ich wohl auf PHPmyAdmin zurückgreifen müssen.

    Nicht unbedinggt, wenn Du SSH, telnet oder die Möglichkeit über PHPs system() das Kommandozeilentool zu bedienen.

    Spielt da sowas wie die maximale Upload-Größe eine Rolle?

    Ja, wenn Du einen 12 MB Dump einspielen willstz aber ein 8 MB Limit hast siehts schlecht aus. Genauso wenn Du eine Laufzeibegrenzung auf 90 Sekunden hast und willst mit einem Modem mehr als 500KB hochladen - Ende! Das könntest Du wie geasgt mit einem vorherigen Upload per ftp und Nutzung des Kommadozeilentools umgehen.

    Oder kann es da andere Probleme geben, die da auf mich zukommen können. Ich würde das gerne mal simulieren und nicht im Ernstfall deppert ausschauen... und da frage ich mich halt, an was ich da denken muß.

    Ja, mach das!

    Ach ja: Kann man irgendwo aus dem Netz große sql-Dateien runterladen, um sowas auszuprobieren? Für Benchmarktests oder so? Ist ja wurscht, was da drin steht, Hauptsache sie verschaffen dem Rechner Arbeit :-)

    Ich glaube nicht das es sowas gibt, denn sowas ist doch nun wirklich mit php in 10 Sekunden erledigt:

    <?

    while(strlen($dump)<12000000)) {
       $dump .= "INSERT INTO tabelle (spalte1, spalte2, spalte3) VALUES('".$i++."', 'asdkjasdakölaöklödasd', 'asldkiasdködölasls')\n";
    }

    $fp = fopen("flatfile.sql","w");
    fputs($fp,$dump);
    fclose($fp);
    ?>

    sowas, kannst Du noch etwas ausschmücken, vielleicht die Zellen etwas zufälliger mit anderem Inhalt füllen, dann vielleicht noch ein CREATE Statement davor und fertig ist Dein Dump!

    Bedenke nur dases einen _sehr_ großen Unterschied machst ob und was Du für Indices in der Tabelle hast. Ohne indices ist das alles superschnell, mit vielen Indices kann das schonmal ne ganze Weile dauern, damals als ich versucht habe das selfarchiv mit mysql zu durchsuchen, wenn ich 10 MB per Script in die Datenbank geschrieben habe, hat das mit allen Indices manchmal 15 Minuten und mehr gedauert.
    Wenn Du die kompletten Daten einspielst würde ich die Indices nachträglich nach den Inserts setzen.

    Viele Grüße
    Andreas

  3. Hallo Zusammen,

    »»nur wenn ich ihn fernwarte, werde ich wohl auf PHPmyAdmin zurückgreifen müssen. Spielt da sowas wie die maximale Upload-Größe eine Rolle? Oder kann es da andere Probleme geben, die da auf mich zukommen können.

    Ja.
    (1) Erstens die maximale Uploadgröße.
    (2) PHP-Scripte sind Laufzeitbeschränkt.
    (3) Der PHPmyAdmin ist nicht gerade so geproggt, daß er mit dem Arbeitsspeicher fürsorglich umgeht. Er macht also auch dort wegen der Beschränkungen denen PHP auf den Servern unterliegt Probleme.
    (4) Das gilt natürlich alles nur, wenn Du an die Konfiguration von PHP nicht rankommst.

    Tip: Nach Änderungen an der Konfiguration von PHP den Apache neu starten... (Zumindest wenn es als Modul geladen wird.)

    fastix

  4. Hallo Andreas,

    kommst Du denn nicht per ssh oder ftp an die Datanbasis von MySQL heran? Wenn Du dafür MyISAM-Tabellen benutzt hast, kann man die ganzen DB-Files einfach runterziehen und hinterher als Packet auch wieder hochladen. Ich habe damit bisher noch keine Probleme gehabt. Musst nur daran denken, dass das Passwort für root dann auch aus dem Backup kommt. Und wenn Du nicht nach jedem Backup erst mit self_mysqld herumhantieren willst, solltest Du es Dir merken. Die User ihre natürlich auch...

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.