MySql komprimieren und reparieren wie bei Access?

Hallo Leute,

muß man eine MySql-Datenbank (InnoDB) eigentlich auch pflegen, oder kümmert sich MySql da selber drum? Bei Access muß man ab und zu mal „komprimieren und reparieren“ starten. Schon allein, damit sich die .mdb nicht unnütz aufbläht und/oder es Datenfehler gibt. Falls so eine Pflege nötig ist, wie geht das und wie oft sollte man soetwas machen?

Danke und Gruß

Moin, cozuhazu,

Reorganisieren ist angesagt, dazu gehst Du auf die MySQL-Seite und suchst nach REORG. Reparieren nicht, das ist bei Access nämlich kein Beheben von Datenfehlern, sondern das Putzen von Resten, die beim Erstellen von Formularen und ähnlichem übrigbleiben.

Gruß Ralf

Hallo drambeldier,

danke für die Antwort. Ist reorg ein Befehl oder ein Programm?

Gruß

cozuhazu

Hallo,

ergänzend zur Aussage von Drambeldier:

Es gibt auch ein nettes Adminstrationswerkzeug für MySQL: phpMyAdmin

http://www.heise.de/download/phpmyadmin.html

Grüße

godam

Hallo cozuhazu,

muß man eine MySql-Datenbank (InnoDB) eigentlich auch pflegen

Unter bestimmten Umständen empfiehlt sich

OPTIMIZE TABLE

Welche Umstände das sind, wird hier und in den nachfolgenden Kapiteln erklärt:
http://dev.mysql.com/doc/refman/5.6/en/optimizing-in…
Kommt allerdings viel weniger vor, als man glaubt.
Viel öfter dagegen sollte ein Backup (nicht nur von deinen Datenbanken) stattfinden:
http://dev.mysql.com/doc/refman/5.6/en/backup-and-re…
Nicht etwa, weil MySQL so unstabil wäre (das ist es auf keinen Fall), aber man weiss ja nie, Server crasht, Feuer bricht aus und was dergleichen Unannehmlichkeiten mehr sein können.
Aber da erzähle ich dir sicher nichts neues…

Viele Grüße
Marvin

Hallo Marvin,

danke, dass Du mir schon zum 2. mal geholfen hast. Zwecks Backup habe ich das jetzt mit ner Batch-Datei gelöst, die jede Nacht per mysqldump ein komprimiertes Datenbankbackup macht und mir diese Datei, zur Sicherheit, per ftp noch auf Strato-Hidrive kopiert. Das sollte hoffentlich reichen.

Für das Optimieren und Reorganieren habe ich im Netz folgenden Code gefunden. Kannst Du da mal drüber schauen, ob das wirklich das Richtige macht? Bin in PHP noch blutiger Anfänger und verstehe den Code nicht komplett. Danke schonmal für Deine Mühe!

<?php define('DB_USER', 'root'); // Ersetze usernamehere mit deinem MySQL-Datenbank-Benutzernamen.
define('DB\_PASSWORD', ''); // Ersetze yourpasswordhere mit deinem MySQL-Passwort. define('DB\_HOST', 'localhost'); // In 99% der Fälle musst du hier nichts ändern. Falls doch ersetze localhost mit der MySQL-Serveradresse. define('CheckForCorrupts',true); define('Optimize',true); // ab Hier nichts mehr ändern. $db = mysql\_connect(DB\_HOST,DB\_USER,DB\_PASSWORD) or die("Please check the Settings of the Database (User/Password/Host)"); $abfrage = mysql\_query("SHOW databases",$db); while ($databases = mysql\_fetch\_array($abfrage)) { $tot\_data = 0; $tot\_idx = 0; $tot\_all = 0; $result = mysql\_query("SHOW TABLE STATUS FROM `".$databases[0]."`",$db); if (mysql\_num\_rows($result) \>= '1'){ while ($row = mysql\_fetch\_array($result)) { $tot\_data = $row['Data\_length']; $tot\_idx = $row['Index\_length']; $total = $tot\_data + $tot\_idx; $total = $total / 1024 ; $total = round ($total,3); $total\_total += $total; $gain= $row['Data\_free']; $gain = $gain / 1024 ; $total\_gain += $gain; $gain = round ($gain,3); if (CheckForCorrupts == true) { mysql\_query("CHECK TABLE `".$row[0]."`",$db); mysql\_query("FLUSH TABLE `".$row[0]."`",$db); } if (Optimize == true) { mysql\_query("OPTIMIZE TABLE `".$row[0]."`",$db); } } } } echo "Size of all Databases: ".floor($total\_total/1024)." MB (Optimize "; if (Optimize == true) { echo "has saved "; } else { echo "could save "; } echo floor($total\_gain/1024)." MB)"; ?\> Gruß cozuhazu

Hallo godam,

danke für die Antwort. Was muß man in phpmyadmin zum Reorganisieren machen?

Gruß

cozuhazu

Hallo,

MySQL unterscheidet sich in wesentlichen Punkten von Access. EINEN Menuepunkt „Reorganisieren“ gibt es m.E. nicht.

Die Tabellen einer Datenbank können überprüft, analysiert, optimiert und repariert (wenn denn nötig) werden.

Mit Ausnahme der Möglichkeit, Daten mittels SQL

http://de.wikipedia.org/wiki/SQL

abzufragen, gibt es wenig Gemeinsamkeiten zwischen einer „echten“ relationalen Datenbank wie MySQL und Access.

Grüße

godam

Hallo cozuhazu,

Zwecks
Backup habe ich das jetzt mit ner Batch-Datei gelöst, die jede
Nacht per mysqldump ein komprimiertes Datenbankbackup macht
und mir diese Datei, zur Sicherheit, per ftp noch auf
Strato-Hidrive kopiert. Das sollte hoffentlich reichen.

Das klingt doch gut. Vor allem, weil sich InnoDB nicht mit dem sonst üblichen

REPAIR TABLE tablename

reparieren lassen und auch MySQL für den hoffentlich nie eintretenden worst case mysqldump empfiehlt:
„For storage engines such as InnoDB that REPAIR TABLE does not support, use mysqldump to create a dump file and mysql to reload the file“
http://dev.mysql.com/doc/refman/5.6/en/rebuilding-ta…
Höchstens noch der - sicherlich überflüssige - Hinweis, daß man mindestens einmal auch den Ernstfall proben sollte, sprich, das Zurückspielen eines Backups.

Kannst Du da mal drüber schauen, ob das
wirklich das Richtige macht? Bin in PHP noch blutiger Anfänger
und verstehe den Code nicht komplett.

Ich muss dich enttäuschen, ich benutze PHP nicht, verstehe also gewiss noch weniger als Du davon. Da hilft es dir also wenig, wenn ich dir sage, daß für mich der Code gut aussieht.
Probiere ihn doch einfach mal aus und/oder lass ihn von den Experten weiter oben im PHP-Brett kontrollieren bzw. erklären.

Aber wie Du sicher schon gemerkt hast, ich bevorzuge für sowas die MySQL-eigenen Werkzeuge, in dem Fall mysqlcheck
http://dev.mysql.com/doc/refman/5.6/en/mysqlcheck.html
Allerdings weiss ich nicht, wie es damit unter Windows aussieht.

Viele Grüße
Marvin

Hallo Marvin,

habe den „worst-case“ jetzt mal auf nem neuen virtuellen Rechner getestet. Über mysqldump alle DB’s sichern lassen und auf dem frisch aufgesetzten Virtuellen per Befehl „mysql …“ wieder eingelesen. So macht das Spaß! Nur einlesen lassen und Alles läuft wie gehabt. Benutzer, Rechte, Daten - alles da.

Den PHP-Code poste ich gleich mal im Forum. Mal sehen, was dabei rauskommt.

Gruß

cozuhazu

1 Like