howto backup huge MySQL servers?

How to backup huge mysql myisam databases with a massive load of tables?
I encountered the backup of database servers that hold on to some hundreds of database schemas with each about one hundred tables while having some hundred gigabytes of data in them as a big problem in mysql servers.

There are some issues with that:
* shutting down mysql may take up to an hour until all opened file handles have been closed
* mysqldump’ing all the databases and tables takes several hours
* uptime is mission critical

Tonight I stumbled upon two approaches:

Filesystem Snapshots

I thought of that option before, though never followed that thought till the very end. While searching for other approaches that might seem fit for at least testing them out, I found this small line:
echo "FLUSH TABLES WITH READ LOCK; SYSTEM /path/to/helper/backupscript.sh; UNLOCK TABLES;" | mysql -u <user> -p <password>
(http://dev.mysql.com/doc/refman/5.1/en/backup-methods.html at the third comment at the time of writing of this article)

In our case we could use this line as part of our backup script and instead of „/path/to/helper/backupscript.sh“ we would run a wrapper script to create a snapshot of the underlying LVM.

Maatkit’s mk-parallel-dump

The former maatkit was incorporated into the percona toolkit and the mk-parallel-dump and mk-parallel-restore were dropped. But luckily there are some backups on github. For example: https://github.com/ets/maatkit
There you can find a slightly enhanced version of the latest maatkit.

mk-parallel-dump might be an option for those older database servers, that lack a snapshot-able filesystem.

Disclaimer

Though I did not yet test any of these options myself. As soon as I tested them, I will do a new article on them.

HowTo: build the jenkins vagrant-plugin

At present I am preparing some of the tools helpfull/necessary for continuous integration: jenkins, vagrant, gitlab, jira and puppet.
To make the first two of those work nicely together there exists a jenkins plugin called vagrant-plugin at https://github.com/rtyler/vagrant-plugin , https://github.com/smartlogic/vagrant-plugin and https://github.com/aberrios85/vagrant-plugin
I decided to use the last version, as the original supports only very aged versions of jenkins and vagrant.

This is how the plugin can be build into a hpi file: (validated by hours of trial and error)


# install rvm and jruby in one command
curl -sSL https://get.rvm.io | bash -s stable --ruby=jruby
# activate rvm
source ~/.rvm/scripts/rvm
# get the vagrant-plugin sources
git clone https://github.com/aberrios85/vagrant-plugin.git
cd vagrant-plugin
# install needed gems
bundle install
# build the whole bunch
jpi build

Now you can install the plugin pkg/vagrant.hpi into your jenkins. But pay attention – depending on your webserver configuration you might need to increase settings … for example „client_max_body_size“ in nginx, if you want to use the upload feature of the jenkins web interface.

Continuous Log: Oracle VS Community, Teil 2

Oracle gibt OpenOffice auf.

Zur Pressemitteilung

Dies bestätigt in meinen Augen die hier skizzierte Entwicklung der von Oracle mit SUN aufgekauften OpenSource-Projekte. Viel mehr noch … Oracle scheint sogar bewußt in der Richtung zu agieren, die Projekte von sich weg zu treiben. Über die Hintergründe kann ich aber auch nur spekulieren … Geld spielt aber wahrscheinlich auch eine Rolle.

PyRoom Test (Updated)

Ich schreibe heute mit einem anderen Modell von Text-Editor – er arbeitet im Vollbild und hat fast keine sichtbaren Features. Ziel dahinter ist, dass er so wenig wie möglich ablenkt und man sich dadurch voll aufs schreiben konzentrieren kann.
Die Idee an sich ist sicherlich nichts Neues und es gibt bestimmt eine große Menge an verschiedenen Implementationen. Die von mir gerade getestete Implementation begnügt sich damit, den gesamten Bildschirm ab zu dunkeln und mit grüner Schrift auf schwarzem Hintergrund zu schreiben. Formatierungsoptionen sind bei solchen Programmen in der Regel gar nicht vorhanden.
Ich kenne noch eine andere Implementierung, welche derzeit leider nur für das iPad verfügbar ist. Dort werden auf hellem Hintergrund nur die aktuellen 3-4 Zeilen angezeigt, während ein paar Zeilen darüber und darunter ausgegraut werden. Alles was darüber hinaus geht, wird gar nicht mehr angezeigt. PyRoom Test (Updated) weiterlesen

wieso CNAMEs als MX-Record böse sind

Gestern wurde ich von einem Admin angesprochen, der Probleme hatte, Emails an einen Kunden zu verschicken. Besagter Kunde hat seine Email-Postfächer bei 1&1 – der Admin betreibt einen eigenen Mailserver und Emails an seinen Kunden wurden mit der folgenden Meldung abgelehnt:

421 invalid sender domain 'example.com' (misconfigured dns?)

Nach einigem Suchen fand er im Internet eine Seite auf der dieses Problem diskutiert wird. In vielen Fällen konnte der 1&1-Support den Leuten weiterhelfen: SPF korrekt(!) konfigurieren und / oder den MX record der Absender-Domain auf einen A record zeigen lassen – niemals auf einen CNAME.

Mein Interesse war geweckt und so versprach ich denn, diese Frage an die Entwickler weiter zu reichen. Auf meine Anfrage in der Entwicklungsabteilung des 1&1-Mailsystems bekam ich auch recht zügig antwort:

[…] die Verwendung von Aliases in MX-Einträgen ist seit Ewigkeiten verboten.
Siehe beispielsweise RFC-5321, RFC-2181, RFC-1034.

Der Umstand, dass dieser Fehler nur bei 1&1 auftritt, ist also der strikten RFC-Konformität der 1&1-Mailserver zu verdanken. Mailserver die CNAMEs als MX records akzeptieren verhalten sich nicht RFC-konform und sollten korrigiert oder korrekt konfiguriert werden.

Ich hoffe, ich kann mit diesem Artikel dem Einen oder Anderen bei der Suche nach einer Lösung zu diesem Problem helfen.

Bug #95 in mod_gnutls

Seit einigen Tagen suche ich nach dem Anlass dafür, dass ich längere Posts in meinem WordPress nicht mehr updaten und erstellen kann.
Ich hatte nun wirklich alles durch: diverse PHP-Funktionen und Module de-/aktiviert, diverse Apache2-Funktionen de-/aktiviert, Debug an/aus, Suhosin an-/abgeschaltet und nach jeder Änderung alles neu kompiliert.

Was auch immer ich tat – das Ergebnis war das Selbe: überschritt ein POST-Befehl vom Firefox3 an den Webserver eine bestimmte Anzahl an Zeichen, dann bekam ich nur eine weiße, komplett leere Seite zurück.

Nachdem ich dann alles so weit durch gekaut hatte, musste ich fest stellen, dass es wohl irgendwas an der Datenübertragung selber ist. Also: Firebug, tcpdump und wireshark ausgepackt und das Protokoll analysiert (übrigens nicht so einfach wie es aussieht, wenn es sich um HTTPS handelt). Trotz der Unmöglichkeit die tatsächlichen Daten auf der Leitung lesen zu können (wg HTTPS), habe ich bald bemerkt, dass das unter dem HTTPS-Protokoll liegende TCP Fehler meldete.

Schlussendlich bin ich auf den Gedanken gestoßen, dass es mod_gnutls sein könnte. Also: deaktivieren, mod_ssl reaktivieren und noch mal probieren – siehe da, es geht.

1 Stunde später war mir dann auch klar, dass es kein Config-Fehler von mod_gnutls ist, sondern das ein Coding-Fehler ist.

Google brachte mich dann auf http://issues.outoforder.cc/view.php?id=95

Sobald dieser Bug gefixt ist, kann dann jeder auf unserem Server ein SSL-Zertifikat für seine Domain haben. Um das voran zu treiben habe ich mal die riesen Summe von US$5 auf den Bug ausgesetzt 😉
Dies ist übrigens ein riesen Vorteil von OpenSourceSoftware – der Code ist vorhanden und jeder der kann, oder will, kann ihn lesen und korrigieren.

Hoffentlich kommt mod_gnutls 0.5.4 sehr bald heraus und dieser Bug ist darin gefixt …

Mini Linux-Booting Contest (Updated)

Vor einigen Tagen habe ich davon gelesen, dass Moblin sehr schnell booten soll. Diese Aussage fand ich interessant und wollte sie mal genauer unter die Lupe nehmen. Darum habe mir am Wochenende zwei nicht zu langsame 4GB USB-Sticks besorgt.

Das Test-System war zwar kein Netbook wofür dieses Betriebssystem eigentlich optimiert ist, aber dennoch ein recht Ansehnliches: mein Desktop.

Intel Core2Quad 2.40GHz
OCZ 8 GB DDR2 800 QuadKit
NVidia GeForce 8600 GT

Zugegebener Maßen trifft das nicht so wirklich exakt auf Netbooks zu – aber ich Teste ja verschiedene Linux-Derivate gegen dieses Systeme und vergleich sie untereinander.

Die Derivate:

Gemessen habe ich – dies ist ja schließlich keine wissenschaftliche Dessertation – mit der Stopuhr in meinem Handy. Und zwar vom Bootmenü ab bis zu dem Zeitpunkt wo der Desktop-Manager fertig geladen ist (die „Sanduhr“ verschwindet).
Da ich keinen Rechner übrig habe, um die Distributionen zu installieren, boote ich bis auf das Gentoo alle Derivate von USB-Sticks (CnMemory Zinc; 22MB/s read, 6 MB/s write)

Angefangen habe ich mit moblin und nachdem ich im grub den Boot eingeleitet hatte, war ich echt perplex. Gefühlte 5 Sekunden später war der Desktop geladen. Das stimmte natürlich nicht ganz – es waren eigentlich fast 39 Sekunden. Damit kam ich zwar nicht an die 13 Sekunden aus dem Phoronix-Artikel heran, aber zum einen sind die USB-Sticks nicht sonderlich performant und zum anderen hat Phoronix eine OCZ SSD benutzt und kein USB2.0 Device.

EasyPeasy hingegen hat mich schwer enttäuscht. Ich habe schon sehr lange nicht mehr so lange auf meine grafische Oberfläche gewartet. Sehr lange scheint das Menü zu brauchen. Da EasyPeasy für MIDs (Mobile Internet Devices) zugeschnitten ist, besitzt es ein Menü, welches über den gesamten Bildschirm geht und dauerhaft im Hintergrund offen ist. Da der Boot vom USB-Stick immer ein „erster Boot“ ist – wird dieses Menü wohl jedes Mal neu generiert. Meiner Ansicht nach ist dieses Verhalten nicht sehr sinnvoll bei einem Live-Medium – schließlich ist der Software-Bestand und der User immer der selbe. Daher wäre es eventuell hilfreich, wenn das Menü im Live-Medium schon fertig generiert ist.

Neugierig geworden habe ich im Anschluss daran mein Standard-Betriebssystem Gentoo gemessen und kam auf ca 50 Sekunden Bootdauer. Diesen Wert finde ich schon recht ordentlich. Ich kann ihn sicherlich noch verbessern, wenn ich Zeit investiere und Dinge wie zB MySQL aus der Boot-Liste wieder rauswerfe – aber eigentlich will ich das gar nicht.

Zusammenfassung:

  1. moblin : 00:38.9
  2. gentoo : 00:50.4
  3. easypeasy : 01:41.0

UPDATE vom 27.04.2009:
Mehr zufällig als beabsichtigt habe ich gerade fest gestellt, dass ich durch den Wechsel von linux-2.6.26 auf linux-2.6.29 noch mal ca 7 Sekunden unter Gentoo heraus geholt habe. Laut bootchart dauert der Boot nun 43 Sekunden.

Warum MSN nur unwesentlich besser ist als ICQ …

Wie gerade berichtet tritt jeder Nutzer des Instant-Messaging Dienstes ICQ alle Copyrights und Lizenzrechte an den über das ICQ-Netzwerk übermittelten Daten ab.

Microsoft’s MSN hingegen ist auf den ersten Blick deutlich bescheidener:

Microsoft erhebt keine Ansprüche auf Material (einschließlich Feedback und Vorschlägen), das Sie Microsoft, anderen Nutzern oder der Öffentlichkeit zur Verfügung stellen als Upload, Eingabe oder Sendung zur Verfügung stellen.

Wenn man jedoch weiter liest, sieht es schon wieder nicht mehr so toll aus:

Indem Sie Inhalte in einem Kommunikationsdienst bereitstellen, räumen Sie (a) allen Mitgliedern des Kommunikationsdienstes (für jeden durch ein Mitglied zugänglichen Inhalt), und/oder (b) der allgemeinen Öffentlichkeit (soweit der Öffentlichkeit zugänglich) die Erlaubnis ein, Ihre Inhalte im Rahmen der Services zu nutzen, wie dies gemäß dieser Nutzungsbestimmungen gestattet ist (einschließlich, ohne darauf beschränkt zu sein, z. B. der Herstellung von Kopien und abgeleiteten Werken).

Durch das Hinterlegen von Abbildungen räumen Sie (a) allen Mitgliedern Ihrer privaten Community (…), und/oder (b) der allgemeinen Öffentlichkeit (…) die Erlaubnis zur Nutzung Ihrer Abbildungen in Verbindung mit der Nutzung anderer Dienste, wie sie in diesen Nutzungsbedingungen gestattet ist (…) ein, einschließlich aber nicht beschränkt auf eine nicht exklusive, weltweite, gebührenfreie Lizenz, die Abbildung zu kopieren, vertreiben, übermitteln, öffentlich auszustellen, öffentlich aufzuführen, vervielfältigen, bearbeiten, übersetzen, umformatieren ohne Ihren Namen an der Abbildung anzubringen sowie der Einräumung des Rechts, dieses Recht an den Anbieter von Diensten unterzulizenzieren.

Im Gegensatz zu ICQ tritt man bei Microsoft die Lizenzrechte also nicht an den Betreiber ab, sondern an JEDE natürliche und juristische Person, die irgendwie in den Besitz der Daten kommt.

Mein Vorschlag: Nutzt Jabber/XMPP

Warum ICQ böse ist …

ICQ wurde von AOL gekauft. Imho reicht das schon vollkommen aus. Aber es kommt noch besser:

ICQ sollte ausserdem nicht für den Versand wichtiger Daten verwendet werden (Code, geistiges Eigentum, Bilder, etc), da laut den vom Betreiber ICQ Inc. zum 7. Juni 2000 festgelegten Nutzungsregeln der Benutzer jegliche geistige Eigentumsrechte an den über den ICQ-Service zugänglich gemachten Daten automatisch abtritt.

Auszug aus den Nutzungsregeln:

„You agree that by posting any material or information anywhere on the ICQ Services and Information you surrender your copyright and any other proprietary right in the posted material or information. You further agree that ICQ LLC. is entitled to use at its own discretion any of the posted material or information in any manner it deems fit, including, but not limited to, publishing the material or distributing it“

siehe http://www.icq.com/legal/policy.html.

Zu den Risiken von MSN siehe auch meinen Beitrag Warum MSN nur unwesentlich besser ist als ICQ …

Mein Vorschlag: Nutzt Jabber/XMPP