MySQL installieren unter Ubuntu: Sicherheit und Performance

Wie können Sie MySQL installieren und unter Ubuntu einrichten?
MySQL installieren heißt unter Ubuntu und Debian: Sie laden das Paket mysql-server mit dem Paketmanager, starten den Dienst und sichern danach das Root Konto, die Benutzerrechte und den Netzwerkzugriff ab. Allerdings genügt ein einzelner Befehl dafür nicht. Diese Anleitung führt Sie der Reihe nach durch alle Schritte.
Vorab eine Anmerkung: Wir sind ein Team für digitales Marketing und Webentwicklung, kein Hostinganbieter. Deshalb stützen wir uns auf die offizielle MySQL Dokumentation und auf die offizielle Ubuntu Server Anleitung. Wir behaupten daher keine Betriebserfahrung. Bei Versionsnummern und Standardwerten, deren wir nicht sicher sind, nennen wir keine Zahl.
Zunächst: Wir haben den Text für zwei Gruppen geschrieben. Die erste betreibt eine Website oder einen Onlineshop. Sie möchten mit Ihrem Hostinganbieter auf Augenhöhe sprechen und die richtige Frage stellen. Die zweite verwaltet einen eigenen VPS oder Server. Sie suchen also Befehle zum Nachvollziehen. In jedem Abschnitt finden beide Gruppen etwas.
Zur selben Reihe gehören Beiträge zu MariaDB, PostgreSQL, Sicherungen mit mysqldump und Datenbanken in Docker. Diese Themen wiederholen wir hier daher nicht. Stattdessen verweisen wir nur dort darauf, wo es passt.
Sollten Sie MySQL installieren oder Ihrem Hostinganbieter überlassen?
Nutzen Sie Shared Hosting oder einen verwalteten Server, sollten Sie MySQL installieren nicht selbst übernehmen. Der Datenbankserver läuft dort bereits, deshalb legen Sie im Kundenbereich nur eine Datenbank und einen Benutzer an. Serverweite Einstellungen dürfen Sie in den meisten Tarifen ohnehin nicht ändern. Daher brauchen Sie die Befehle dieses Beitrags nicht.
Bei einem eigenen VPS sieht es anders aus: Wer MySQL installieren will, trägt die Verantwortung selbst. Dort liegen also Installation, Sicherheit und Feinabstimmung bei Ihnen. Dafür brauchen Sie eine feste Routine: Updates einspielen, Sicherungen anlegen und Protokolle prüfen. Ohne diese Routine hilft Ihnen daher selbst die beste Konfiguration nicht.
In diesen Fällen empfehlen wir, die Arbeit dem Hostinganbieter oder einem Systemadministrator zu überlassen:
- Ein Ausfall kostet Sie direkt Umsatz, und Sie haben keine geprüfte Wiederherstellung aus der Sicherung.
- Sie möchten die Datenbank eines laufenden Shops ändern, ohne die Änderung vorher zu testen.
- Sie richten Fernzugriff, Firewall Regeln oder verschlüsselte Verbindungen zum ersten Mal ein.
- Replikation, Clustering oder einen großen Datenumzug, den Sie kaum rückgängig machen können.
Kurz gesagt: Dieser Beitrag will Sie nicht dazu drängen, alles allein zu tun. Er hilft Ihnen dagegen, die Entscheidung bewusst zu treffen. Außerdem können Sie die Aufgabe klar beschreiben, falls Sie jemanden beauftragen.
Welches MySQL Paket und welche Version sollten Sie wählen?
Wollen Sie MySQL installieren, ist unter Ubuntu das Paket mysql-server aus dem Repository der Distribution der einfachste Weg. Auch die offizielle Ubuntu Server Anleitung nennt dieses Paket. Zudem kommt es mit den Sicherheitsupdates der Distribution. Deshalb überrascht es bei der Erstinstallation am wenigsten.
Zu Versionsnummern sind wir ehrlich: Wir nennen hier deshalb keine. Folgen Sie unabhängig von der Wahl dem Prinzip der aktuellen stabilen Version. Eine Version mit langer Unterstützung macht weniger Pflegeaufwand als eine kurzlebige. Prüfen Sie dann die Support Zeiträume auf der offiziellen MySQL Seite.
Unter Debian bieten die Repositories meist MariaDB an. Möchten Sie MySQL von Oracle nutzen, müssen Sie womöglich das eigene Paketrepository des MySQL Projekts hinzufügen. Denn die Details ändern sich je nach Version. Öffnen Sie deshalb die offizielle Installationsdokumentation und folgen Sie ihr dort. Wenn Sie zwischen MariaDB und MySQL abwägen, vergleicht unser Begleitartikel in dieser Reihe beide.
Verlangt Ihre Anwendung eine bestimmte Version? Ein CMS nennt sie zum Beispiel auf der Seite mit den Systemanforderungen. Schauen Sie also zuerst dort nach. Sonst kann ein altes Plugin oder Theme mit einer neueren Version nicht mehr laufen.
Wie können Sie MySQL installieren: Schritt für Schritt unter Ubuntu?
Die folgenden Befehle zum Thema MySQL installieren folgen dem Weg der offiziellen Ubuntu Server Anleitung. Zunächst aktualisieren Sie die Paketliste. Dann installieren Sie das Paket. Nach der Installation startet der Dienst zwar normalerweise von selbst. Trotzdem sollten Sie den Zustand selbst prüfen.
sudo apt update
sudo apt install mysql-server
sudo service mysql status
sudo ss -tap | grep mysql
Der erste Befehl aktualisiert die Paketdaten. Der zweite installiert dann den Server. Drittens sehen Sie, ob der Dienst läuft. Viertens zeigt die Liste, auf welcher Adresse MySQL lauscht. Damit beantworten Sie zwei Fragen auf einmal: Läuft der Dienst, und ist er von außen erreichbar?
Die erste Verbindung bauen Sie mit diesem Befehl auf:
sudo mysql -u root
Laut Ubuntu Anleitung fragt diese Verbindung nicht nach einem Passwort. Der Grund: Das Root Konto meldet sich nämlich über auth_socket an. Anders gesagt, wenn Ihr Betriebssystembenutzer die Berechtigung hat, kommen Sie hinein. Das ist sicher, denn kein Passwort läuft über das Netz. Allerdings sollten Sie Ihre Anwendung dieses Konto nicht benutzen lassen. Warum, erklären wir danach.
Müssen Sie den Dienst neu starten, nennt die Anleitung diesen Befehl:
sudo systemctl restart mysql.service
Was macht mysql_secure_installation, und sollten Sie es ausführen?
mysql_secure_installation ist ein interaktives Werkzeug, das eine frische Installation härtet. Laut offizieller MySQL Dokumentation hilft es Ihnen, ein Root Passwort zu setzen, von außen erreichbare Root Konten zu löschen, anonyme Benutzer zu entfernen und die Testdatenbank zu löschen, die jeder Benutzer erreicht. Optional aktiviert es die Passwortprüfung.
sudo mysql_secure_installation
Das Werkzeug stellt Fragen, und Sie antworten. Außerdem nennt die Dokumentation 3306 als Standardport. Dagegen überspringt die Option --use-default die Fragen und läuft still. Denken Sie daran aber nur bei automatischen Installationen.
Ist es wirklich nötig? Unsere kurze Antwort: ja, führen Sie es aus. Es schließt die vier Lücken, die man am häufigsten vergisst, und zwar in einer Sitzung. Zudem ist der Befehl kurz und leicht rückgängig zu machen.
Beachten Sie jedoch einen Punkt. Die Ubuntu Anleitung zu MySQL erwähnt dieses Werkzeug allerdings nicht. Stattdessen sagt sie, dass das Root Konto lokal über auth_socket geschützt bleibt. Folglich liefert nicht jeder Schritt in Ihrer Umgebung dasselbe Ergebnis. Lesen Sie jede Frage genau, und wissen Sie bei Schritten wie dem Root Passwort, was Sie tun.
Das genaue Verhalten lesen Sie auf der offiziellen Seite zu mysql_secure_installation.
Wie legen Sie Benutzer und Berechtigungen in MySQL an?
Geben Sie jeder Anwendung eine eigene Datenbank und einen eigenen Benutzer. So greift eine Lücke in einer Anwendung nicht auf die anderen über, weil jedes Konto eigene Grenzen hat. Die Syntax aus der offiziellen MySQL Dokumentation ist einfach: Zuerst legt CREATE USER das Konto an, dann vergibt GRANT die Rechte.
CREATE DATABASE shop CHARACTER SET utf8mb4;
CREATE USER 'shop_app'@'localhost' IDENTIFIED BY 'hier-ein-starkes-passwort';
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'shop_app'@'localhost';
SHOW GRANTS FOR 'shop_app'@'localhost';
Name und Passwort im Beispiel sind erfunden, setzen Sie also eigene Werte ein. Der Teil 'localhost' im Kontonamen bedeutet laut Dokumentation, dass sich das Konto nur vom selben Rechner verbinden darf. Das Zeichen '%' ist dagegen ein Platzhalter, der Verbindungen von jedem Host zulässt.
Beim MySQL installieren zahlt sich ein Grundsatz aus: Geben Sie der Anwendung nur, was sie braucht. Eine normale Webanwendung liest und schreibt meistens Daten. Tabellen anlegen oder löschen muss sie daher nicht. Manche Installationsassistenten verlangen allerdings bei der Ersteinrichtung das Recht CREATE. Nehmen Sie das Recht dann nach der Einrichtung zurück.
REVOKE CREATE, DROP ON shop.* FROM 'shop_app'@'localhost';
Prüfen Sie die Rechte nach jeder Änderung mit SHOW GRANTS. So entdecken Sie ein zu weit gefasstes Recht früh.
Sollten Sie MySQL für den Fernzugriff öffnen?
Für die meisten Websites lautet die Antwort nein. Liegen Datenbank und Anwendung auf demselben Rechner, genügt es, wenn MySQL nur auf der lokalen Adresse lauscht. Laut Ubuntu Anleitung steht die Einstellung bind-address in der Datei /etc/mysql/mysql.conf.d/mysqld.cnf. Nach einer Änderung müssen Sie den Dienst dann neu starten.
Fernzugriff ergibt allerdings nur in zwei Fällen Sinn. Entweder liegen Anwendung und Datenbank auf getrennten Rechnern, oder Sie wollen sich mit einem Verwaltungswerkzeug verbinden. Im zweiten Fall ist ein Tunnel über SSH sicherer, als Port 3306 für alle zu öffnen.
ssh -L 3307:127.0.0.1:3306 benutzer@192.0.2.10
Die Adresse 192.0.2.10 ist hier eine Beispieladresse aus dem Dokumentationsbereich. Konkret verbindet der Befehl Port 3307 auf Ihrem Rechner mit MySQL auf dem Server. Somit steht MySQL nie im Internet, und Ihr Verwaltungswerkzeug verbindet sich mit einem lokalen Port.
Welche Adresse Ihr Server hat, bestätigen Sie mit unserem IP Abfrage Werkzeug. Danach prüfen Sie die Firewall Regeln in der Dokumentation Ihres Anbieters. Bevor Sie den Fernzugriff öffnen, empfehlen wir die Rücksprache mit Ihrem Hostinganbieter. Denn eine falsche Regel kann Ihre Datenbank automatischen Scannern preisgeben.
Wo liegt die MySQL Konfigurationsdatei, und welche Dateien liest MySQL?
MySQL liest seine Konfigurationsdateien beim Start in fester Reihenfolge. Laut offizieller Dokumentation sind das unter Linux /etc/my.cnf, /etc/mysql/my.cnf, falls vorhanden $MYSQL_HOME/my.cnf, eine Datei, die Sie mit --defaults-extra-file angeben, und ~/.my.cnf. Eine später gelesene Datei gewinnt also.
Die Optionen stehen in Gruppen, die mit einer eckigen Klammer beginnen. Für den Server gilt die Gruppe [mysqld]. Zum Beispiel fügen Sie einen Block wie diesen hinzu:
[mysqld]
innodb_buffer_pool_size = 2G
slow_query_log = 1
Sind Sie unsicher, welche Dateien MySQL liest, empfiehlt die Dokumentation diesen Befehl:
mysqld --verbose --help
Am Anfang der Ausgabe stehen die Dateien, die MySQL sucht, und die Gruppen, die es kennt. Unter Ubuntu schreiben Sie Ihre Einstellungen meist in Dateien unter /etc/mysql/. Aber Vorsicht: Definieren Sie dieselbe Option an zwei Stellen, gewinnt die letzte. Haben Sie MySQL installiert und wirkt eine Einstellung nicht, suchen Sie daher zuerst nach einer zweiten, widersprüchlichen Definition.
Die Dokumentation sagt außerdem, dass MySQL Konfigurationsdateien ignoriert, in die jeder schreiben darf. Das dient nämlich der Sicherheit. Halten Sie die Dateirechte also eng.
Wo sollten Sie bei der MySQL Performance Optimierung anfangen?
Stimmen Sie nichts ab, bevor Sie gemessen haben. Denn die meisten Leistungsprobleme kommen von schlecht geschriebenen Abfragen und fehlenden Indizes, nicht von Speichereinstellungen. Ihre Reihenfolge sollte daher so aussehen: Zuerst finden Sie die langsame Abfrage, dann beheben Sie Index und Abfrage, zuletzt schauen Sie auf den Speicher.
Die Tabelle fasst vier Ebenen zusammen und zeigt, wann sich welche lohnt. Es ist ein Vergleich ohne Zahlen, denn der Gewinn hängt ganz von Ihrer Last ab.
| Ebene | Was sie tut | Wann sie zuerst kommt | Risiko |
|---|---|---|---|
| Slow Query Log | Hält langsame Abfragen fest | Immer der erste Schritt | Gering, nur Speicherplatz |
| Index und Abfrage | Liest weniger Zeilen | Das Log zeigt eine wiederkehrende Abfrage | Schreiben kostet etwas mehr |
| innodb_buffer_pool_size | Hält Daten im Speicher | Daten passen in den Speicher, lesen aber trotzdem von der Platte | Zu viel Speicher bremst das System |
| Cache der Anwendung | Spart die Abfrage ganz | Dieselbe Leseabfrage kommt oft vor | Gefahr veralteter Daten |
Die letzte Zeile liegt außerhalb der MySQL Einstellungen, verdient aber eine Erwähnung. Ein Ergebnis aus dem Cache zu liefern, ist oft billiger, als es bei jeder Anfrage neu zu berechnen. Mehr dazu lesen Sie in unserem Beitrag über Caching mit Redis und Memcached.
Was ist innodb_buffer_pool_size, und wie stellen Sie den Wert ein?
innodb_buffer_pool_size ist die Größe des Speicherbereichs, in dem InnoDB Tabellen und Indexdaten vorhält. Die MySQL Dokumentation beschreibt ihn als Bereich im Hauptspeicher, in dem InnoDB Daten beim Zugriff zwischenspeichert. Häufig genutzte Daten kommen aus dem Speicher, daher sinken die Plattenzugriffe. Laut Dokumentation beträgt der Standardwert 128 MB.
Wie viel sollten Sie vergeben? Die offizielle Dokumentation sagt: Auf dedizierten Servern geben viele bis zu 80 Prozent des physischen Speichers an den Buffer Pool. Achten Sie auf zwei Wörter: „bis zu“ und „dediziert“. Anders gesagt: Es ist eine Obergrenze, kein Ziel. Außerdem gilt sie nur für Rechner, die allein der Datenbank dienen.
Teilen sich Webserver, PHP und Datenbank einen Rechner, lassen Sie auch Speicher für das Betriebssystem, die PHP Prozesse und die Verbindungen frei. Beispielrechnung: Bei einem geteilten Rechner mit 8 GB Speicher liegt die Obergrenze von 80 Prozent bei etwa 6,4 GB. Da PHP und das Betriebssystem davon viel brauchen, starten Sie niedriger, beobachten den Speicherverbrauch und erhöhen den Wert bei Bedarf. Das ist ein Ausgangspunkt, keine Garantie.
Den dauerhaften Wert tragen Sie in die Konfigurationsdatei ein:
[mysqld]
innodb_buffer_pool_size = 2G
Die 2G sind nur ein Beispiel. Wählen Sie Ihren eigenen Wert nach Datenmenge und Speicher.
Können Sie innodb_buffer_pool_size im laufenden Betrieb ändern?
Ja. Laut MySQL Dokumentation ändern Sie die Größe des Buffer Pools ohne Neustart. Ein Befehl mit SET GLOBAL genügt dafür. Allerdings muss der Wert ein Vielfaches von innodb_buffer_pool_chunk_size mal innodb_buffer_pool_instances sein. Sonst rundet MySQL auf das nächste gültige Vielfache auf.
SELECT @@innodb_buffer_pool_size;
SET GLOBAL innodb_buffer_pool_size = 2147483648;
SHOW STATUS WHERE Variable_name = 'Innodb_buffer_pool_resize_status';
Der dritte Befehl zeigt den Fortschritt der Größenänderung. Die Dokumentation sagt außerdem, dass aktive Transaktionen enden müssen, bevor die Änderung beginnt. Zu einer geschäftigen Stunde kann daher eine Wartezeit entstehen.
Zudem gibt es einen Hinweis. Laut Dokumentation sollte die Zahl der Chunks, also die Poolgröße geteilt durch die Chunkgröße, nicht über 1000 liegen, damit keine Leistungsprobleme entstehen. Zum Beispiel kommen kleine Server dieser Grenze nie nahe. Bei sehr viel Speicher sollten Sie es dennoch prüfen.
SET GLOBAL wirkt nur auf den laufenden Server. Nach einem Neustart gilt dann wieder der Wert aus der Konfigurationsdatei. Tragen Sie den gewünschten Wert deshalb zusätzlich in die Datei my.cnf ein. Planen Sie diese Arbeit im Produktivbetrieb Stunden im Voraus, damit eine mögliche Wartezeit Sie nicht überrascht.
Details finden Sie auf der Seite zur Größenänderung des Buffer Pools und in der Übersicht zum Buffer Pool.
Wie schalten Sie das MySQL Slow Query Log ein?
Das Slow Query Log schreibt Abfragen, die länger als eine festgelegte Zeit laufen, in eine Datei. Laut MySQL Dokumentation ist slow_query_log standardmäßig aus, und long_query_time steht standardmäßig auf 10 Sekunden. Tun Sie nichts, landet eine Abfrage also erst nach mehr als 10 Sekunden im Log. Für die meisten Websites ist diese Schwelle daher zu hoch.
Um es vorübergehend auf dem laufenden Server einzuschalten, nutzen Sie diese Befehle:
SET GLOBAL slow_query_log = 1;
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
SET GLOBAL long_query_time = 1;
Dateipfad und die Schwelle von 1 Sekunde sind Beispiele. Der MySQL Prozess muss in dieses Verzeichnis schreiben dürfen, sonst entsteht kein Log. Wählen Sie die Schwelle passend zu Ihrer Website. Erst hoch anzusetzen und später zu senken, verhindert ein aufgeblähtes Log.
Für eine dauerhafte Einstellung tragen Sie dieselben drei Zeilen in die Gruppe [mysqld] ein. Eine Änderung mit SET GLOBAL verschwindet nämlich nach einem Neustart.
Die Option log_queries_not_using_indexes aus der Dokumentation hält Abfragen ohne Index fest, unabhängig von der Laufzeit. Bei kleinen Tabellen ist ein fehlender Index allerdings normal. Daher füllt sie das Log schnell. Mit der Zeitschwelle allein zu beginnen, ist meist übersichtlicher.
Wie lesen Sie das Slow Query Log?
Eine lange Logdatei lässt sich dagegen von Hand schwer lesen. MySQL liefert dafür ein Werkzeug zur Zusammenfassung mit, das mysqldumpslow heißt. Es gruppiert ähnliche Abfragen und zeigt, wie oft jede lief und wie lange sie dauerte. So unterscheiden Sie eine einmalige Verlangsamung von einer wiederkehrenden.
mysqldumpslow /var/log/mysql/mysql-slow.log
Fragen Sie zuerst: Welche Abfrage verbraucht die meiste Gesamtzeit? Eine einzelne schwere Abfrage und eine mittlere, die tausendmal läuft, brauchen verschiedene Lösungen. Die erste beheben Sie zum Beispiel mit einem Index oder einer Umschreibung. Die zweite lösen Sie mit einem Cache oder mit besserem Anwendungscode.
Kopieren Sie eine Abfrage aus dem Log und prüfen Sie sie mit EXPLAIN. Das behandeln wir danach. Bedenken Sie, dass das Log personenbezogene Daten enthalten kann, denn der Abfragetext kann Parameterwerte tragen. Legen Sie die Datei nicht in ein öffentliches Verzeichnis, und bereinigen Sie sie vor dem Teilen.
Details finden Sie auf der Seite zum Slow Query Log.
Was ist ein Index, und wann hilft er?
Ein Index ist eine zusätzliche Datenstruktur, mit der Sie Zeilen schneller erreichen. Denken Sie an das Stichwortverzeichnis am Ende eines Buchs. Ohne es lesen Sie dann das ganze Buch, um ein Wort zu finden. Ebenso durchsucht MySQL die Tabelle Zeile für Zeile, wenn kein Index existiert.
Durchsuchen Sie eine Spalte oft mit WHERE, JOIN oder ORDER BY, ist sie ein Kandidat. Fragt ein Onlineshop zum Beispiel die Bestelltabelle ständig nach dem Kunden ab, legen Sie einen Index auf die Spalte der Kundennummer.
CREATE INDEX idx_bestellung_kunde ON bestellung (kunde_id);
SHOW INDEX FROM bestellung;
Ein Index ist allerdings nicht gratis. Jeder Schreibvorgang aktualisiert auch den Index, und er belegt Plattenplatz. Somit bremsen viele unnötige Indizes das Schreiben. Setzen Sie daher nicht auf jede Spalte einen Index. Legen Sie Indizes für die echten Abfragen an, die Sie im Log sehen.
Noch ein Hinweis: Eine Spalte mit sehr wenigen verschiedenen Werten ist oft ein schlechter Kandidat. Außerdem zählt bei einem zusammengesetzten Index die Reihenfolge der Spalten. Laut Dokumentation nutzt MySQL in manchen Fällen nur das linke Präfix des Schlüssels.
Fangen Sie gerade mit SQL an, ist unser Fahrplan zum SQL Lernen ein guter Start. Für Vorstellungsgespräche eignen sich unsere SQL Interview Fragen.
Wie lesen Sie die Ausgabe von EXPLAIN?
EXPLAIN zeigt, wie MySQL eine Abfrage ausführen will. Dazu stellen Sie es der Abfrage voran. Zudem sagt die Dokumentation, dass es für SELECT, DELETE, INSERT, REPLACE und UPDATE funktioniert. In der Ausgabe sehen Sie, welchen Index MySQL gewählt hat und wie viele Zeilen es prüfen will.
EXPLAIN SELECT * FROM bestellung WHERE kunde_id = 42;
Das sind die wichtigsten Spalten:
- type: zeigt, wie MySQL die Tabelle liest, und ALL bedeutet einen vollständigen Tabellenscan.
- possible_keys: listet die Indizes auf, die MySQL nutzen könnte.
- key: zeigt den Index, den MySQL tatsächlich gewählt hat.
- rows: schätzt, wie viele Zeilen MySQL prüfen muss.
- Extra: liefert Zusatzinfos, und Using filesort sowie Using temporary verdienen Aufmerksamkeit.
Die Dokumentation sagt, ein vollständiger Tabellenscan sei normalerweise nicht gut und meistens sehr schlecht. Ihr Ziel bei großen Tabellen: type soll von ALL weg und zu Werten wie ref, range oder const wechseln, die einen Index nutzen.
Gehen Sie mit der Spalte rows vorsichtig um. Die Dokumentation sagt, dass diese Zahl bei InnoDB Tabellen eine Schätzung ist und nicht immer genau stimmt. Deshalb sollten Sie eine einzelne Zahl nicht als absolute Wahrheit nehmen. Vergleichen Sie stattdessen die Werte vorher und nachher.
Welche EXPLAIN Werte sind Warnzeichen?
Die Tabelle sammelt die Werte, die Ihnen am häufigsten begegnen, und ihre Bedeutung. Die Bedeutungen stammen von der Seite zur EXPLAIN Ausgabe in der MySQL Dokumentation.
| Wert | Bedeutung | Was Sie tun |
|---|---|---|
| type = ALL | Vollständiger Tabellenscan | Bei großer Tabelle Index anlegen oder Abfrage ändern |
| type = range | Liest einen Indexbereich | Meist in Ordnung, Zeilenzahl prüfen |
| type = ref | Liest passende Indexwerte | Oft ein gutes Zeichen |
| type = const | Höchstens eine passende Zeile | Der Idealfall |
| Using filesort | Zusätzlicher Durchgang zum Sortieren | Index passend zu ORDER BY erwägen |
| Using temporary | Legt eine temporäre Tabelle an | Abfrage oder GROUP BY überprüfen |
| Using index | Liest nur aus dem Index | Ein gutes Zeichen |
Die Dokumentation nennt Using filesort und Using temporary als Dinge, auf die Sie achten sollten, wenn Abfragen so schnell wie möglich laufen sollen. Bei einer kleinen Tabelle schaden sie jedoch oft nicht. Lesen Sie die Werte also zusammen mit der Zeilenzahl.
Ein Beispiel für den Ablauf: Im Log haben Sie die Abfrage gefunden, die Bestellungen nach Kunde auflistet. EXPLAIN zeigt type = ALL und eine hohe Schätzung bei rows. Dann legen Sie den Index an, führen EXPLAIN erneut aus und sehen, dass type zu ref wechselt. Somit belegen Sie die Verbesserung.
MySQL bietet außerdem EXPLAIN ANALYZE für echte Laufzeiten. Die Details dieser Option haben wir auf der offiziellen Seite nicht geprüft. Schauen Sie daher vor der Nutzung in die Dokumentation Ihrer Version. Jede Spalte finden Sie auf der Seite zur EXPLAIN Ausgabe.
Sollten Sie statt MySQL lieber MariaDB wählen?
Das meiste SQL in dieser Anleitung läuft auch auf MariaDB, aber nicht jeder Einstellungsname und Standardwert stimmt überein. Nutzen Sie MariaDB, prüfen Sie die Befehle daher in der Dokumentation Ihrer Version. Die Unterschiede haben wir in einem eigenen Beitrag zum Vergleich von MariaDB und MySQL gesammelt.
Fragen Sie sich: Was verlangt Ihre Anwendung? Zum Beispiel unterstützen viele CMS beides. In der Praxis macht es meist die wenigsten Probleme, das zu nehmen, was Ihr Hostinganbieter bietet. Diese Wahl allein macht Ihre Website nicht schnell. Qualität von Index und Abfrage zählt meist mehr.
Wie wirkt sich die MySQL Abstimmung auf Ladezeit und SEO aus?
Eine dynamische Seite schickt Abfragen an die Datenbank, um ihre Antwort zu bauen. Läuft eine Abfrage langsam, antwortet der Server später. Das verzögert somit die Seite. Besucher warten, und Suchmaschinen bevorzugen langsame Websites weniger. Diesen Zusammenhang erklären wir ausführlich im Beitrag Wie beeinflusst die Ladezeit das SEO.
Im E-Commerce ist die Wirkung direkter, denn Produktlisten, Filter und Warenkörbe führen viele Abfragen aus. Das behandeln wir im Beitrag Ladezeit im Onlineshop und Umsatz. Für ein Tempo Zeugnis einer Seite ist ein Lighthouse Test zur Website Performance ein guter Anfang.
Behalten Sie aber eines im Kopf: Lighthouse misst die Browserseite. Es zeigt eine langsame Datenbankabfrage nicht direkt, sondern nur als Antwortzeit des Servers. Um den wahren Verursacher zu finden, müssen Sie daher das Slow Query Log lesen.
Läuft Ihre Website mit individueller Software, entstehen Datenbankdesign und Abfragequalität in der Entwicklung. Für ein solches Projekt lesen Sie mehr zu unserer individuellen Softwareentwicklung. Außerdem prüfen wir die Tempoprobleme Ihrer Website gern gemeinsam mit Ihnen im Rahmen der SEO Beratung.
Welche Fehler passieren beim MySQL Einrichten am häufigsten?
Meist entstehen Fehler aus Eile, nicht aus Unwissen. Die folgende Liste sammelt die häufigen und nennt je eine einfache Abhilfe.
- Die Anwendung mit dem Root Konto verbinden: Geben Sie jeder Anwendung einen eigenen Benutzer.
- Port 3306 für alle öffnen: Beginnen Sie mit lokalem Lauschen und einem Tunnel über SSH.
- Den Buffer Pool ohne Messung vergrößern: Lesen Sie zuerst das Slow Query Log.
- Jede Spalte mit einem Index versehen: Legen Sie Indizes nur für Abfragen an, die Sie im Log sehen.
- Keine Sicherung anlegen: Sichern Sie immer, bevor Sie Einstellungen ändern.
- Eine Option in zwei Dateien definieren: Prüfen Sie Widersprüche mit
mysqld --verbose --help.
Sicherungen verdienen ein eigenes Kapitel. Die Strategie behandeln wir in unserer Website Backup Strategie, und mysqldump für Datenbanken behandelt der Begleitbeitrag dieser Reihe. Die Datenbank ist der wertvollste Teil einer Website. Folglich ist jede Änderung ohne Sicherung ein Risiko.
Auch die Wahl des Hostings gehört zu dieser Entscheidung. Welcher Tarif Datenbankeinstellungen erlaubt, lesen Sie in unserem Leitfaden zur Wahl des Webhostings.
Was sollten Sie tun, nachdem Sie MySQL installieren und einrichten?
Sobald Sie MySQL installieren und die Installation endet, folgen Sie der Reihenfolge unten. Denn jeder Schritt setzt voraus, dass der vorige geklappt hat. Gehen Sie die Liste einmal durch und prüfen Sie sie danach alle drei Monate erneut.
- Bestätigen Sie, dass der Dienst läuft und auf welcher Adresse er lauscht.
- Lesen Sie die Schritte von mysql_secure_installation und wenden Sie sie an.
- Legen Sie für jede Anwendung eine eigene Datenbank und einen eigenen Benutzer an.
- Prüfen Sie die Rechte mit SHOW GRANTS.
- Lassen Sie den Fernzugriff geschlossen, wenn Sie ihn nicht brauchen.
- Schalten Sie das Slow Query Log mit einer sinnvollen Schwelle ein.
- Prüfen Sie die ersten drei Abfragen aus dem Log mit EXPLAIN.
- Legen Sie bei Bedarf einen Index an und messen Sie erneut.
- Stellen Sie den Buffer Pool nach Ihrem echten Speicherverbrauch ein.
- Legen Sie eine Sicherung an und testen Sie einmal die Wiederherstellung.
Der Sinn der Liste ist also die Reihenfolge der Arbeit. Jeder Punkt könnte ein eigenes Thema sein, doch die Reihenfolge zählt. Sicherheit und Sicherung kommen zuerst, die Tempoabstimmung danach.
Sind Sie unsicher, ob Sie allein weitermachen sollten, ist es klug, die Arbeit einer benannten Fachperson zu übergeben. Wir betreiben keine Server. Dafür helfen wir bei den Tempo und Sichtbarkeitsproblemen Ihrer Website, mit unserem Webdesign und unserer E-Commerce Beratung.



