Ziel
Dieser Blogeintrag beschäftigt sich mit der Kompilierung und Einrichtung von MySQL 5.5 unter Debian 6.0.2 Zusätzlich wird gezeigt, wie man die Debug Optionen der MySQL Datenbank aktivieren kann. Bei einer vorkompilieren MySQL Version, schlägt das Akivieren des Session Tracings mit der folgenden Fehlermeldung fehl:
mysql: ERROR: Option 'debug' used, but is disabled
Das Mitschreiben eines Trace Files kann zum Beispiel Sinn machen, wenn der MySQL Deamon ohne erkennbaren Grund abbricht. Weitere Informationen zum Debuggen eines MySQL Servers finden sich hier.
Vorraussetzungen
Dieses Tutorial setzt die Installation einer Debian 6.0.x Version voraus. Spezielle Anforderungen an die Installation gibt es nicht.
Kompilieren von CMake
Für das Kompilieren von MySQL verwende ich das Open-Source und plattformübergreifende Build Werkzeug CMake.
Bevor CMake kompiliert werden kann müssen zunächst weitere Pakete installiert werden.
root@eden:~# aptitude install g++ ncurses-dev
Download des Source Codes von der CMake Homepage.
root@eden:~# cd /tmp root@eden:~# wget http://www.cmake.org/files/v2.8/cmake-2.8.5.tar.gz
Entpacken und Kompileren von CMake
root@eden:~# tar xzf cmake-2.8.5.tar.gz root@eden:~# cd cmake-2.8.5 root@eden:~# ./configure root@eden:~# make root@eden:~# make install
Überprüfung der kompilierten Version
root@eden:~# cmake -version cmake version 2.8.5
Tipp: CMake kann unter Debian auch mithilfe von aptitude (aptitude install cmake) installiert werden. Auf anderen Systemen, wie z.B. CentOS 5.x steht kein vorgefertiges Paket zur Verfügung.
Komplieren von MySQL 5.5
In diesem Schritt wird nun MySQL mithilfe von CMake kompiliert. Bevor dies aber durchgeführt werden kann, müssen zunächst ein paar Voraussetzungen erfüllt sein.
Der MySQL Daemon läuft in der Standardinstallation als Benutzer mysql. Dies möchte ich beibehalten und lege zunächst den Benutzer und eine gleichnamige Gruppe an.
root@eden:~# useradd mysql root@eden:~# groupadd mysql
Anschließend werden die Verzeichnisse für den MySQL Server verwendet. Bei der Wahl der Verzeichnisse orientiere ich mich an den Standardverzeichnissen.
Pfad | Aufgabe | Benutzer | Gruppe | Rechte | Manuell angelegt? |
/usr/local/mysql | Basis Verzeichnis des MySQL Servers | root | staff | 755 | Nein |
/var/run/mysqld | Speicherort der UNIX Socket Datei | mysql | root | 755 | Ja |
/var/lib/mysql | Datenverzeichnis des MySQL Servers | mysql | mysql | 700 | Ja |
root@eden:~# mkdir -p /var/run/mysqld root@eden:~# chown -R mysql:root /var/run/mysqld root@eden:~# chmod -R 755 /var/run/mysqld root@eden:~# mkdir -p /var/lib/mysql root@eden:~# chown -R mysql:mysql /var/lib/mysql root@eden:~# chmod -R 700 /var/lib/mysql
Als letzte Voraussetzung müssen die folgenden Pakete nachinstalliert werden.
root@eden:~# aptitude install libaio-dev bison
Nun wird der MySQL Source Code über die MySQL Homepage heruntergeladen und entpackt.
root@eden:~# cd /tmp root@eden:~# wget http://www.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.15.tar.gz/from/http://ftp.gwdg.de/pub/misc/mysql/ -O mysql-5.5.15.tar.gz root@eden:~# tar zcf mysql-5.5.15.tar.gz
MySQL kann nun kompiliert werden. Für das Aktivieren der Debug Optionen muss der Parameter -DWITH_DEBUG auf 1 gesetzt werden.
root@eden:~# cd mysql-5.5.15 root@eden:~# cmake . -DINSTALL_LAYOUT=STANDALONE -DWITH_DEBUG=1 \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysql.sock \ -DMYSQL_DATADIR=/var/lib/mysql root@eden:~# make root@eden:~# make install
Der Kompiliervorgang ist abgeschlossen und die Version kann überprüft werden.
root@eden:~# export PATH=/usr/local/mysql/bin:$PATH root@eden:~# mysqld -V root@eden:~# mysqld Ver 5.5.15-debug for Linux on x86_64 (Source distribution)
Damit nicht jedes Mal die PATH Variable angepasst werden muss, wird die Standardprofil Datei erweitert.
root@eden:~# vi /etc/profile export PATH=/usr/local/mysql/bin:$PATH
Im nächsten Schritt müssen das MySQL Data Directory und die Systemtabellen angelegt werden.
root@eden:~# /usr/local/mysql/scripts/mysql_install_db --user=mysql --ldata=/var/lib/mysql --basedir=/usr/local/mysql
Zur Absicherung der neuen MySQL Server Installation wird das Skript mysql_secure_installation ausgeführt. Dieses setzt unter Anderem ein Passwort für den root Benutzer, entfernt den anoymen Benutzer und passt Rechte an.
root@eden:~# /usr/local/mysql/bin/mysql_secure_installation
Der MySQL Server verwendet als Konfigurationsdatei die Datei my.cnf im Verzeichnis /etc. Als Grundlage für diese Datei verwende ich die Beispieldatei my-small.cnf, die beim MySQL Server mitgeliefert wird.
root@eden:~# cp /usr/local/mysql/support-files/my-small.cnf /etc/mysql/my.cnf
Damit automatisch das Mitschreiben einer neuen MySQL Session aktiviert wird, passe ich entsprechend die my.cnf Datei an. In diesem Fall wird das Tracefile unter /tmp/mysqld_debug.trace gespeichert.
root@eden:~# vi /etc/my.cnf debug=d,info,error,query,general,where:O,/tmp/mysqld_debug.trace
Hinweis: Das Tracefile kann sehr groß werden. Über die Angabe der verschiedenen Debug-Level (z.b. info oder error) kann der Umfang des Tracefiles reduziert werden. Für weitere Informationen siehe hier.
Für das Starten und Stoppen des MySQL Deamons verwende ich das mitgelieferte Init Skript .
root@eden:~# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
Die Konfiguration ist abgeschlossen und der MySQL Deamon kann gestartet werden.
root@eden:~# /etc/init.d/mysql start Starting MySQL ...
Für das Testen des Debugging melde ich mich an der Datenbank an und erstelle eine Testdatenbank mit den Namen debugtest.
root@eden:~# mysql -u root -p mysql> CREATE DATABASE debugtest; mysql> EXIT;
Nun überprüfe ich das Tracefile /tmp/mysqld_debug.trace.
root@eden:~# more /tmp/mysqld_debug.trace ... dispatch_command: info: query ready net_send_eof: info: EOF sent, so no more error sending allowed do_command: info: vio_read returned -1 errno: 11 do_command: info: Command on socket (20) = 3 (Query) dispatch_command: info: packet: ''; command: 3 dispatch_command: query: CREATE DATABASE debugtest ...
Wie man sieht funktioniert das Mitschreiben der Datenbankaktivittäten einwandfrei.