Nudge am 11.05.2007

Mysqldump

in Linux, MySQL | Tags: Backup, MySQL, mysqldump, Query

Was ich heute kurz festgestellt habe: Im Gegensatz zu früheren Versionen speichern relativ junge Ausgaben von mysqldump eine komplette Tabelle in einem Insert. Das Ergebnis sieht dann etwa so aus:

INSERT INTO tabelle (Feld1, Feld2, Feld3) VALUES ((val1-1, val1-2, val1-3),(val2-1, val2-2, val2-3));

Soweit so gut. Doch bei 500,000 Einträgen in einer vielleicht nicht ganz so schmalen Tabelle stellt sich mir natürlich die Frage: Wie spielt man dann ein paar Sätze gezielt zurück, falls mal jemand aus Versehen etwas gelöscht hat?

Die Fiddelei möchte ich dann doch nicht am Bein haben. Nach etwas Ausprobierei fand ich heraus, dass man mit der Option –extended-insert=FALSE den “alten” mysqldump wieder zurückbekommt. Dann wird pro Tabelleneintrag ein INSERT-Befehl erstellt:

1
2
INSERT INTO tabelle (Feld1, Feld2, Feld3) VALUES (val1-1, val1-2, val1-3);
INSERT INTO tabelle (Feld1, Feld2, Feld3) VALUES (val2-1, val2-2, val2-3);
INSERT INTO tabelle (Feld1, Feld2, Feld3) VALUES (val1-1, val1-2, val1-3);
INSERT INTO tabelle (Feld1, Feld2, Feld3) VALUES (val2-1, val2-2, val2-3);

Das zweite war der Zeichensatz. Da wir aufgrund der unumstößlichen Bindung an unser Warenwirtschaftssystem auf Windows-Basis keinen kompletten Datenumstieg auf UTF-8 machen können (zumindest nicht zur Zeit), wird bei uns alles in latin1 gespeichert. Sollten wir mal über die europäischen Grenzen hinausexpandieren, dann können wir uns das ja immer noch zur Brust nehmen (dann haben wir aber sicherlich auch nicht mehr diese Warenwirtschaft).

Seit ein paar Versionen speichert nun mysqldum alles per UTF-8. Für ein komplettes Dump ist das auch wieder OK, denn im erzeugten Script sind die CREATE TABLE-Befehle ja mit dem Zeichensatz versehen und mysql weiß dann (hoffentlich), was es mit den INSERT-Datensätzen zu tun hat (nämlich mal kurz konvertieren!). Um einzelne Sätze in eine laufende Datenbank schnell per Copy&Paste zurückzuspielen, ist das aber unpassend. Hier hilft die Option –default-charset=latin1 weiter.

Mit diesen zwei kleinen Anpassungen kann ich nun die nächsten Backups in besserer Verfassung erwarten und gezielte Rückspielungen einfacher angehen. Nachdem das Raidsystem unseres jetzigen Webserver-Providers gerade krachte und wir quasi 48h ohne Online-Shop waren, weiß ich, dass Backups ihre Mühe wert sind.


Das mark ich mir: Alltagz Mr Wong Yigg Del.icio.us Yahoo MyWeb Blinklist Google folkd
 

Leave a Reply

Your email address will not be published. Required fields are marked *