Eine frühere Version dieses Tutorials wurde von Hazel Virdó verfasst.
MySQL ist ein Open-Source-basiertes Datenbank-Managementsystem, das üblicherweise als Teil des beliebten LAMP-Stacks (Linux, Apache, MySQL, PHP/Python/Perl) installiert wird. Es implementiert das relationale Modell und verwendet zur Verwaltung der Daten Structured Query Language (besser bekannt als SQL).
In diesem Tutorial wird beschrieben, wie Sie MySQL-Version 8 auf einem Ubuntu 20.04-Server installieren können. Nach Abschluss des Tutorials verfügen Sie über eine funktionierende relationale Datenbank, mit der Sie Ihre nächste Website oder Anwendung erstellen können.
Um dieser Anleitung zu folgen, benötigen Sie:
Unter Ubuntu 20.04 können Sie MySQL mithilfe des APT-Paket-Repository installieren. Zum Zeitpunkt der Verfassung dieses Dokuments ist die im standardmäßigen Ubuntu-Repository verfügbare Version 8.0.19.
Aktualisieren Sie zum Installieren den Paketindex auf Ihrem Server, wenn Sie es in letzter Zeit nicht getan haben:
- sudo apt update
Installieren Sie anschließend das Paket mysql-server
:
- sudo apt install mysql-server
Dadurch wird MySQL installiert; Sie werden jedoch nicht dazu aufgefordert, ein Passwort festzulegen oder andere Konfigurationsänderungen vorzunehmen. Da damit Ihre Installation von MySQL unsicher bleibt, kümmern wir uns als Nächstes um das Thema Sicherheit.
Bei neuen Installationen von MySQL sollten Sie das im DBMS enthaltene Sicherheitsskript ausführen. Das Skript ändert gewisse weniger sichere Standardeinstellungen bei Aspekten wie Remote-Root-Login und Beispielbenutzern.
Führen Sie das Sicherheitsskript mit sudo
aus:
- sudo mysql_secure_installation
Dieses Skript führt Sie durch eine Reihe von Aufforderungen, in denen Sie verschiedene Änderungen an den Sicherheitseinstellungen Ihrer MySQL-Einrichtung vornehmen können. In der ersten Eingabeaufforderung werden Sie gefragt, ob Sie das Plugin Validate Password einrichten möchten, mit dem Sie die Stärke Ihres MySQL-Passworts testen können.
Wenn Sie sich für die Einrichtung des Validate Password-Plugins entscheiden, werden Sie von dem Skript gefragt, ob Sie eine Passwort-Validierungsstufe auswählen möchten. Die stärkste Stufe – die Sie durch Eingabe von 2
auswählen – erfordert, dass Ihr Passwort mindestens acht Zeichen lang ist und eine Mischung aus Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen enthält:
OutputSecuring the MySQL server deployment.
Connecting to MySQL using a blank password.
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: Y
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
2
Unabhängig davon, ob Sie sich für die Einrichtung des Validate Password-Plugins entscheiden, werden Sie als Nächstes dazu aufgefordert, ein Passwort für den root user für MySQL festzulegen. Geben Sie ein sicheres Passwort Ihrer Wahl ein und bestätigen Sie es dann:
OutputPlease set the password for root here.
New password:
Re-enter new password:
Wenn Sie das Validate Password-Plugin verwendet haben, erhalten Sie eine Rückmeldung über die Stärke Ihres neuen Passworts. Dann fragt das Skript, ob Sie mit dem von Ihnen gerade eingegebenen Passwort fortfahren oder ein neues Passwort eingeben möchten. Wenn Sie mit der Stärke des von Ihnen gerade eingegebenen Passworts zufrieden sind, geben Sie Y
ein, um das Skript fortzusetzen:
OutputEstimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
Von dort aus können Sie Y
und dann ENTER
drücken, um die Standardeinstellungen für alle nachfolgenden Fragen zu akzeptieren. Damit werden einige anonyme Benutzer und die Testdatenbank entfernt, Remote-Root-Logins deaktiviert und diese neuen Regeln geladen, damit MySQL die Änderungen, die Sie gerade vorgenommen haben, unverzüglich anwendet.
Beachten Sie, dass Sie zwar ein Passwort für den MySQL-Benutzer root festgelegt haben, dieser Benutzer jedoch nicht so konfiguriert ist, dass er beim Verbinden mit der MySQL-Shell per Passwort authentifiziert wird. Wenn Sie möchten, können Sie diese Einstellung durch Ausführung von Schritt 3 anpassen.
In Ubuntu-Systemen, die MySQL 5.7 (oder höher) ausführen, ist der MySQL-Benutzer root so konfiguriert, dass er nicht per Passwort, sondern standardmäßig mit dem Plugin auth_socket
authentifiziert wird. Dadurch entsteht in vielen Fällen mehr Sicherheit und Benutzerfreundlichkeit, kann aber auch Dinge komplizieren, wenn Sie einem externen Programm (z. B. phpMyAdmin) Zugriff auf den Benutzer erteilen müssen.
Um als root ein Passwort für die Verbindung mit MySQL zu verwenden, müssen Sie die Authentifizierungsmethode vom Plugin auth_socket
in ein anderes Plugin ändern, wie zum Beispiel caching_sha2_password
oder mysql_native_password
. Öffnen Sie dazu die MySQL -Eingabeaufforderung auf Ihrem Terminal:
- sudo mysql
Prüfen Sie dann mit folgendem Befehl, welches Authentifizierungsverfahren Ihre MySQL -Benutzerkonten verwenden:
- SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$lS|M#3K #XslZ.xXUq.crEqTjMvhgOIX7B/zki5DeLA3JB9nh0KwENtwQ4 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root | | auth_socket | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)
In diesem Beispiel können Sie sehen, dass der root-Benutzer über das auth_socket
-Plugin authentifiziert wird. Um das root-Konto so zu konfigurieren, dass eine Authentifizierung mit Passwort erfolgt, führen Sie eine ALTER USER
-Anweisung aus, um zu ändern, welches Authentifizierungs-Plugin verwendet wird, und legen Sie ein neues Passwort fest.
Vergessen Sie nicht, password
in ein starkes Passwort Ihrer Wahl zu ändern, und beachten Sie, dass dieser Befehl das root-Passwort, das Sie in Schritt 2 festgelegt haben, ändern wird.
- ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
Anmerkung: Die vorherige ALTER USER
-Anweisung konfiguriert den MySQL-Benutzer root so, dass er mit dem Plugin caching_sha2_password
authentifiziert wird. Gemäß der offiziellen MySQL-Dokumentation ist caching_sha2_password
das bevorzugte Authentifizierungs-Plugin von MySQL, da es eine sicherere Passwortverschlüsselung bietet als das ältere, aber immer noch verbreitete Plugin mysql_native_password
.
Allerdings funktionieren viele PHP-Anwendungen (beispielsweise phpMyAdmin) mit caching_sha2_password
nicht zuverlässig. Wenn Sie diese Datenbank mit einer PHP-Anwendung verwenden möchten, wollen Sie root ggf. so festlegen, dass stattdessen mit mysql_native_password
authentifiziert wird:
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Führen Sie dann FLUSH PRIVILEGES
aus, was den Server anweist, die Berechtigungstabellen neu zu laden und die Änderungen zu übernehmen:
- FLUSH PRIVILEGES;
Prüfen Sie die von Ihren Benutzern verwendeten Authentifizierungsmethoden erneut, um zu bestätigen, dass root
nicht mehr über das auth_socket-Plugin authentifiziert wird:
- SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$lS|M#3K #XslZ.xXUq.crEqTjMvhgOIX7B/zki5DeLA3JB9nh0KwENtwQ4 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | caching_sha2_password | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)
In dieser Beispielausgabe können Sie sehen, dass der MySQL-Benutzer root jetzt mit caching_sha2_password
authentifiziert wird. Nach der Bestätigung auf Ihrem eigenen Server können Sie die MySQL-Shell beenden:
- exit
Manchmal ist es hilfreicher, sich über einen dedizierten Benutzer mit MySQL zu verbinden. Um einen solchen Benutzer zu erstellen, öffnen Sie erneut die MySQL-Shell:
- sudo mysql
Anmerkung: Wenn Sie für root die Passwortauthentifizierung aktiviert haben, wie in den vorherigen Absätzen beschrieben, müssen Sie einen anderen Befehl für den Zugriff auf die MySQL-Shell verwenden. Der folgende Befehl sorgt dafür, dass Ihr MySQL-Client mit regulären Benutzerberechtigungen ausgeführt wird; Sie erhalten nur dann Administratorberechtigungen in der Datenbank, wenn Sie sich authentifizieren:
- mysql -u root -p
Erstellen Sie von dort einen neuen Benutzer und geben Sie ihm ein starkes Passwort:
- CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
Erteilen Sie dann Ihrem neuen Benutzer die entsprechenden Berechtigungen. Mit diesem Befehl können Sie dem Benutzer zum Beispiel Berechtigungen für alle Tabellen in der Datenbank sowie Berechtigungen zum Hinzufügen, Ändern und Entfernen von Benutzerberechtigungen erteilen:
- GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
Beachten Sie, dass Sie an dieser Stelle den Befehl FLUSH PRIVILEGES
nicht erneut ausführen müssen. Der Befehl wird nur benötigt, wenn Sie die Berechtigungstabellen mit Anweisungen wie INSERT
, UPDATE
oder DELETE
ändern. Da Sie einen neuen Benutzer erstellt haben, anstatt einen vorhandenen Benutzer zu verändern, ist FLUSH PRIVILEGES
hier nicht erforderlich.
Beenden Sie anschließend die MySQ-Shell:
- exit
Lassen Sie uns die MySQL-Installation abschließend testen.
Unabhängig davon, wie Sie es installiert haben, sollte MySQL automatisch gestartet worden sein. Um dies zu testen, überprüfen Sie seinen Status.
- systemctl status mysql.service
Sie werden eine Ausgabe sehen, die der folgenden ähnelt:
Output● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-04-21 12:56:48 UTC; 6min ago
Main PID: 10382 (mysqld)
Status: "Server is operational"
Tasks: 39 (limit: 1137)
Memory: 370.0M
CGroup: /system.slice/mysql.service
└─10382 /usr/sbin/mysqld
Wenn MySQL nicht ausgeführt wird, können Sie es mit sudo systemctl start mysql
starten.
Für einen zusätzlichen Test können Sie mit dem Tool mysqladmin
eine Verbindung zur Datenbank herstellen. Das ist ein Client, der Sie administrative Befehle ausführen lässt. Dieser Befehl besagt zum Beispiel, dass eine Verbindung mit MySQL als root (-u root
) hergestellt, nach einem Passwort gefragt (-p
) und die Version zurückgegeben wird.
- sudo mysqladmin -p -u root version
Sie sollten eine ähnliche Ausgabe wie diese sehen:
Outputmysqladmin Ver 8.0.19-0ubuntu5 for Linux on x86_64 ((Ubuntu))
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Server version 8.0.19-0ubuntu5
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 10 min 44 sec
Threads: 2 Questions: 25 Slow queries: 0 Opens: 149 Flush tables: 3 Open tables: 69 Queries per second avg: 0.038
Das bedeutet, dass MySQL jetzt ausgeführt wird.
Sie haben nun eine grundlegende MySQL-Einrichtung auf Ihrem Server installiert. Hier sehen Sie einige Beispiele für nächste Schritte:
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!