MySQL Login ohne Passwort mit .my.cnf

Um beim Arbeiten an einem MySQL Server nicht ständig die Parameter für Benutzername und Passwort angeben zu müssen, kann man eine Benutzerkonfiguration anlegen und dort Benutzername und Passwort eintragen.

nano ~/.my.cnf

Anschließend den folgenden Inhalt einfügen.
[text][client]
user=benutzername
password=passwort

[mysqladmin]
user=benutzername
password=passwort[/text]

Speichern. Fertig. Nun kann man auf der Konsole die Programme mysql und mysqladmin ohne Parameter für Benutzer und Passwort verwenden.

Doch Vorsicht! Diese Funktion mag vielleicht komfortabel sein, aber gelingt es einem Angreifer eine Shell-Sitzung unter Ihrem Benutzer zu starten, so hat dieser auch Zugriff zur Datenbank.
Der Einsatz in Produktivumgebungen sollte also gut überlegt sein.

Weitere Informationen zum Thema:
http://dev.mysql.com/doc/refman/5.1/de/option-files.html

Konsistenz einer Datenbankreplikation prüfen

Das Einrichten von Replikationen unter MySQL ist „recht einfach“. Schwieriger ist es die Konsistenz der replizierten Datenbanken herauszufinden. Gerade nach einem Ausfall und dem erneuten Aufsetzen der Replikation.
Eine Variante ist die Benutzung des Maatkit Toolkit, welches für Anwender, Entwickler und Administratoren von Open-Source-Datenbanken (z.B. MySQL, PostgreSQL, …) entwickelt wurde. Das Toolkit stellt unter anderem Skripte bereit um mittels Checksummen verschiedene Datenbanken miteinander zu vergleichen.

Zunächst werden die Scripte des Maatkit Toolkit benötigt.

wget http://www.maatkit.org/get/mk-table-checksum
wget http://www.maatkit.org/get/mk-checksum-filter

Nicht vergessen die heruntergeladenen Skripte ausführbar zu machen!
Alternativ kann auch das gesamte Toolkit aus den Paketquellen installiert werden.

sudo apt-get install maatkit

Danach können mittels mk-table-checksum alle Checksummen der angegebenen Datenbank wie folgt angezeigt werden.

mk-table-checksum h=host1,u=user,p=pass h=host2,u=user,p=pass … –databases db

Da sich das Lesen der Rückgabe bei größeren Datenbanken recht schwierig gestaltet empfiehlt sich er Einsatz des Skripts mk-checksum-filter als Ausgabefilter.

mk-table-checksum h=host1,u=user,p=pass … –databases db | mk-checksum-filter

Hiermit werden nur die Tabellen angezeigt, die Unterschiede in der Checksumme haben.

Mit ein bisschen basteln kann diese Information z.B. in einem Script regelmäßig die Konsistenz der Datenbank prüfen und im Fehlerfall per Mail den Admin informieren. Selbstverständlich gibt es noch viele weitere Funktionen und Parameter auf die ich nicht eingegangen bin, diese sind in der Dokumentation gut beschrieben.

Weitere Informationen zum Thema:
http://www.maatkit.org/
http://www.maatkit.org/doc/mk-table-checksum.html
http://www.maatkit.org/doc/mk-checksum-filter.html
http://code.google.com/p/maatkit/

Vertikale Ausgabe der Ergebnisse im MySQL Client

SQL Abfragen in einem Terminal auszuführen hat den Nachteil, dass die Ergebnisse häufig zu groß sind, um leserlich im kleinen Terminal Fenster dargestellt zu werden. Um die Ergebnisse vertikal auszugeben, muss anstelle des ; ein \G als Terminator verwendet werden.

Die folgenden 2 Beispiele zeigen den Unterschied. Zuerst die Prozessliste mit ; als Terminator …

mysql> show full processlist;
+——-+————-+———–+——+———+——–+——————- —————————————————-+———————–+
| Id | User | Host | db | Command | Time | State | Info |
+——-+————-+———–+——+———+——–+——————- —————————————————-+———————–+
| 59172 | root | localhost | NULL | Query | 0 | NULL | show full processlist |
+——-+————-+———–+——+———+——–+——————- —————————————————-+———————–+
1 rows in set (0.00 sec)

… und zum Vergleich die gleiche Abfrage nocheinmal mit \G

mysql> show full processlist\G
*************************** 1. row ***************************
     Id: 59172
   User: root
   Host: localhost
     db: NULL
Command: Query
   Time: 0
  State: NULL
   Info: show full processlist
1 rows in set (0.00 sec)

Wenn man dauerhaft diese Ausgabe möchte, muss einfach in die Datei ~/.my.cnf bzw. für alle Benutzer in der /etc/my.cnf die folgende Zeile ergänzen.
[text][mysql]
vertical[/text]
Nach dem Eintragen dieser Zeile ist es egal ob die Query mit ; oder \G endet. Das Ergebnis wird immer vertikal angezeigt.

Version von MySQL auslesen

Um die Version der MySQL-Installation herrauszufinden gibt es viele verschiedene Möglichkeiten. Z.B. findet sich in den Statusvariablen ein Eintrag zur Version.

mysql> SHOW VARIABLES LIKE ‚version‘;
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| version       | 5.1.45-log |
+---------------+------------+
1 row in set (0.00 sec)

Eine andere Variante ist die Verwendung der Methode Version(). Diese kann zum Beispiel auch in einer PHP Abfrage komfortabel genutzt werden.

mysql> SELECT VERSION();
+------------+
| VERSION()  |
+------------+
| 5.1.45-log |
+------------+
1 row in set (0.00 sec)

MySQL Performance Optimierung mit MySQLTuner

MySQLTuner - nicht optimierte DatenbankBei meiner Suche nach Möglichkeiten MySQL Datenbanken zu optimieren, bin ich auf MySQLTuner gestoßen. Dieses in Perl geschriebene Script, wertet nach Angabe der Zugangsdaten schnell und übersichtlich die Datenbankkonfiguration nach Performancegesichtspunkten aus und bietet Vorschläge zur Optimierung.

Die Verwendung ist denkbar einfach. Aktuelle Version herunterladen. Ausführen. Vorschläge ansehen und ggf. entsprechend optimieren.

wget http://github.com/rackerhacker/MySQLTuner-perl/raw/master/mysqltuner.pl
perl mysqltuner.pl

Alternativ kann man sich auch den perl Befehl sparen, in dem man das Skript ausführbar macht.

chmod u+x mysqltuner.pl
./mysqltuner.pl

Heraus kommt dann eine Auswertung die in General Statistics, Storage Engine Statistics, Security Recommendations, Performance Metrics, Recommendations unterteilt ist. Ob alle Optimierungsvorschläge auch Zielführend sind, kann ich an dieser stelle noch nicht abschließend bewerten. Eine Erleichterung zur Optimierung ist es aber alle mal.

Links zum Projekt:
http://blog.mysqltuner.com/
http://github.com/rackerhacker/MySQLTuner-perl
http://groups.google.com/group/mysqltuner-talk