MySQLd – Datenbankserver

Allgemeines

Der Aufbau von MySQL ist recht Simple. Die einzige Konfigurationsdatei liegt in „/etc/mysql/“ und heißt „my.cnf“. Hier lassen sich nun die verschiedenen Laufzeitoptionen von MySQL einstellen. Zum Beispiel auf welchen Port und welchen Interface es laufen soll. Aber auch wieviel Puffer und Speicher MySQL verwenden soll. Die eigentlichen Daten von MySQL werden dann in „/var/lib/mysql“ gespeichert. Das Rechte-Management von MySQL wird über eine MySQL-Datenbank mit dem Namen „mysql“ gesteuert.

„my.cnf“

Die „my.cnf“ ist in mehrere Teil gegliedert. Jeder Teilbereich wird durch den Namen eckige Klammer abgegrenzt. Der wirklich wichtige Bereich ist „[mysqld]“. Dort stehen die Optionen welche für den MySQL-Prozess wichtig sind. Hier man eine gute Grundkonfiguration:

Server Basics

Am Anfang sollte man immer Grundlegende Dinge festlegen. Wie z.B. den Buntzer, unter welchen MySQL laufen soll. Soll es an eine IP gebunden werden? Welcher Port verwendet werden soll. Wichtig für die Replikation ist dann auch immer eine eindeutige „server-id“. Oft ist es auch sinnvoll „Selects“ eine höhere Priorität zu geben. „skip-locking“ sollte auf jeden Fall aktiviert sein, da sonst die Performance massiv einbrechen kann. Ohne diese Option werden recht rechenintensive Methoden verwendet, Tabellen von der Festplatte zu lesen.

 

Grundconfiguration
user = mysql
bind-address = 10.10.10.10
port = 3306
server-id = 40
low_priority_updates = 1
skip-locking

 

Server Verzeichnisse und Logdateien

Im weiteren Verlauf der Konfig werde meist noch mehrere Verzeichnisse und Log-Dateien definiert. Diese sind selbsterklärend. Einzig auf das „bin-log“ sollte man genau achten, da darüber die Replikation abläuft. „datadir“ ist, wo die Tabellen auf der Festplatte abgelegt werden.

 

weitere Grundkonifguration
socket = /var/run/mysqld/mysqld.sockpid-file = /var/run/mysqld/mysqld.pid
log-bin = /var/log/mysql/master-blog
log-error = /var/log/mysql/mysqld.err
log-queries-not-using-indexes = /var/log/mysql/q-n-u-i.log
log-slow-queries = /var/log/mysql/slow-q.log
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp

 

Puffer und Caches

MySQL hat verschiedene Cache-Funktionen und Puffer. Manche sind nur auf Verbindungsebene aktive, wieder andere serverweit. Aber es geht auch, das man auf seiner Verbindung den Cache/Puffer neu definiert und so den Serverweiten überschreibt, für seine Verbindung. Cache und Puffer kann man nie pauschal festlegen. Sie müssen auf die jeweiligen Anwendungen angepasst werden, welche mit der Datenbank arbeiten sollen.

 

Detailkonfiguration
max_connections = 350open_files_limit = 3600
long_query_time = 5
thread_cache_size = 200
query_cache_size = 96M
query_cache_limit = 5M
table_cache = 4200
max_heap_table_size = 64M
tmp_table_size = 32M
read_buffer_size = 512k
key_buffer_size = 4500M
read_rnd_buffer_size = 8M
join_buffer_size = 1M
sort_buffer_size = 1M

 

Bei „max_connections“ handelt es sich um die Anzahl der offenen Verbindungen, oder eingeloggten Benutzer wenn man so will.

open_files_limit“ gibt an, wieviele Dateien der MySQL-Prozess gleichzeitig öffnen darf.

long_query_time“ wird in Sekunden angegeben. Es definiert ab welcher laufzeit ein Query als „slow query“ eingestuft wird.

thread_cache_size“ gibt die Anzahl der Threads an, welche zurückgehalten werden.

query_cache_szie“ legt die Größe des Speichers für SELECT-Querys fest.

query_cache_limit“ besagt, das Querys, welche größer als das Limit sind, nicht gecached werden sollen.

table_cache“ gibt die Anzahl an Tabellen vor, welche im Speicher gehalten werden sollen.

max_heap_table_size“ gibt an, wie groß eine Tabellen sein darf, welche temporär im RAM erzeugt wird.

tmp_table_size“ legt die gesamt Größe des Tabellen-Cache fest.

read_buffer_size“ ist für das sequenzielle auslesen von Tabellen zuständig. Werte größer als 512 KB bringen kaum mehr Performance.

key_buffer_size“ legt die Größe des Speichers für die MyISAM Key-Files der Tabellen fest. Man sollte möglichst versuchen viel davon im Speicher zu haben.

read_rnd_buffer_size“ ist für nicht-sequenzielle und parallele Zugriffe auf Tabellen zuständig.

join_buffer_size“, wie der Name schon da, um bei „joins“ zwischen zu speichern.

sort_buffer_size“, beim Sortieren ist dieser Puffer wichtig.