MySQL unter Linux zu verwenden ist grundsätzlich einfach.
apt-get install mysql-server
Daher geht es auf dieser Seite mehr um die Optimierung und andere Erfahrungen im Umgang mit MySQL.
Da ich seit einiger Zeit alle Daten auf einem Server zentral unter /data speichere, das vereinfacht die Datensicherung, verschiebe ich auch den Speicherort von MySQL. In der Datei /etc/mysql/my.cnf befindet sich eine Zeile mit dem Speicherort für die Daten. Diesen kann man entsprechend anpassen.
... # ca. Zeile 47 datadir = /data/mysql ...
Seit Hardy müssen zusätzlich auch die Zugriffsrechte für MySQL im Apparmor angepasst werden. Die entsprechende Datei für MySQL ist /etc/apparmor.d/usr.sbin.mysqld. Hier müssen folgende Zeilen zusätzlich oder als Ersatz für den alten Speicherort eingetragen werden.
... # /var/lib/mysql/ r, # /var/lib/mysql/** rwk, /data/mysql/ r, /data/mysql/** rwk, ...
Danach muss Apparmor neu gestartet werden
/etc/init.d/apparmor restart
Um die Erreichbarkeit zu verbessern oder auch als Ausfallsicherung, bietet sich eine Replizierung des SQL Servers an. Damit ist gemeint, dass mehrere Server gleichzeitig die gleichen Daten vorhalten. Es gibt dabei verschiedene Szenarien. Die einfachste ist die Master-Slave Verbindung. Damit ist gemeint, dass zwar beide Server die gleichen Daten liefern, aber Daten nur auf dem Master-Server Daten verändert werden dürfen. Es gibt auch die Möglichkeit einen Ring oder eine Master-Master Konfiguration zu bilden, aber ich gehe hier nur auf die Master-Slave Verbindung ein.
Aus eigenen Erfahrungen weiss ich, dass es nicht immer ganz einfach ist eine Replizierung zu starten oder eine defekte Replizierung wieder zum laufen zu bringen. Ich hoffe also, dass es auf Anhieb klappt. Ansonsten habe ich weiter unten noch detailliert Szenarien für Reparaturen und Analysen notiert.
Die Replizierung bei MySQL ist ziemlich simpel aufgebaut. Der Masterserver schreibt alle Änderungen in ein Logfile. Dieses Logfile wird von den Slaves ausgelesen und die Änderungen werden lokal auch durchgeführt. Es betrifft alle UPDATE, INSERT und DELETE Kommandos. Zuerst muss man dem Masterserver sagen, dass alle verändernden SQL Befehle in ein Logfile geschrieben werden. Das erfolgt in der Datei /etc/mysql/my.cnf
... server-id = 1 log-bin # oder log-bin = masterlog ..
Jeder MySQL-Server, auch die Slaves, in einem Replizierungssystem, muss eine eindeutige Server-ID haben sonst gibt es mit den Anfragen ein Durcheinander. Daher die erste Zeile server-id = 1. Mit der zweiten Zeile wird das Logging eingeschaltet. Man kann zusätzlich auch noch den vorgegebenen Namen ändern, wie die letzte Zeile zeigt.
ToDo