Wenn man temporäre Logdaten in eine Datenbank schreibt, muss man sich früher oder später damit beschäftigen, wie man die auch wieder effizient herausbekommt. Im Normalfall will man die Daten auch nicht einfach löschen, sondern verschieben um später wieder darauf zugreifen zu können.
Mit mk-archiver bietet Maatkit dafür genau das richtige Werkzeug. Damit kann man Daten aus einer MySQL-Tabelle in eine Datei oder eine andere Tabelle exportieren. Die Zieltabelle muss dabei weder in der gleichen Datenbank noch auf dem gleichen Server sein. Die Exportdatei wird in LOAD-DATA-INFILE-kompatiblen Format erstellt, kann also auch problemlos später wieder in die Datenbank eingelesen werden.
Nachdem ich meine Daten zuerst mal ohne die Angabe eines Charsets exportiert hatte, waren meine Umlaute beim Testimport natürlich kaputt. Nochmal so als Hinweis am Rande: immer prüfen, ob sich ein Backup auch wiederherstellen lässt und nicht zufrieden sein, wenn es erstellt wurde ;). ALs ich danach den Charset angegeben habe, stellte ich fest, dass es in Maatkit 7202 (ich weiß nicht wie lange davor und danach) leider einen Bug gab, der den Export von UTF-8-Daten in eine Datei verhinderte:
flagbit@testing ~ $ mk-archiver --source h=localhost,D=db_testing,t=log_email --file 'log_email-201102' --where "MONTH(creation_date) = 2 AND YEAR(creation_date) = 2011" --limit 100 --commit-each --ask-pass --charset utf8 -u db_testing_user
Enter password:
Wide character in print at /usr/bin/mk-archiver line 4081, line 1.
Der Export in eine andere Tabelle funktionierte. Nachdem ich den oben bereits verlinkten Thread von Ende Januar gefunden hatte (und 7202 von Mitte Januar ist), habe ich mir mal lokal die neuste Version (7540) heruntergeladen und siehe da: es funktioniert. Für solche Tests ist das --no-delete
Flag immer ganz nützlich, weil dann die Daten bei einem fehlgeschlagenen Test nicht weg sind 😉
Wenn man das ganze jetzt noch mit gzip verbindet und in einen monatlichen Cronjob packt, hat man eine schöne, feine, automatische Datenbankbereinigung.
0 Kommentare