So installieren Sie MySQL unter Ubuntu 18.04

Eine frühere Version dieses Tutorials wurde vonHazel Virdó geschrieben

Einführung

MySQL ist ein Open-Source-Datenbankverwaltungssystem, das üblicherweise als Teil des beliebten StacksLAMP (Linux, Apache, MySQL, PHP / Python / Perl) installiert wird. Es verwendet eine relationale Datenbank und SQL (Structured Query Language), um seine Daten zu verwalten.

Die Kurzversion der Installation ist einfach: Aktualisieren Sie Ihren Paketindex, installieren Sie das Paketmysql-serverund führen Sie dann das enthaltene Sicherheitsskript aus.

sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation

In diesem Tutorial wird erklärt, wie MySQL Version 5.7 auf einem Ubuntu 18.04-Server installiert wird. Wenn Sie jedoch eine vorhandene MySQL-Installation auf Version 5.7 aktualisieren möchten, können Sie stattdessenthis MySQL 5.7 update guide lesen.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Ein Ubuntu 18.04-Server, der von folgendenthis initial server setup guideeingerichtet wurde, einschließlich eines Nicht-root-Benutzers mitsudo-Berechtigungen und einer Firewall.

[[Schritt-1 -—- Installation von MySQL]] == Schritt 1 - Installation von MySQL

Unter Ubuntu 18.04 ist standardmäßig nur die neueste Version von MySQL im APT-Paket-Repository enthalten. Zum Zeitpunkt des Schreibens ist dies MySQL 5.7

Aktualisieren Sie zur Installation den Paketindex auf Ihrem Server mitapt:

sudo apt update

Dann installieren Sie das Standardpaket:

sudo apt install mysql-server

Dadurch wird MySQL installiert, Sie werden jedoch nicht aufgefordert, ein Kennwort festzulegen oder andere Konfigurationsänderungen vorzunehmen. Da dies Ihre Installation von MySQL unsicher lässt, werden wir uns als nächstes damit befassen.

[[Schritt-2 - Konfigurieren von MySQL]] == Schritt 2 - Konfigurieren von MySQL

Für Neuinstallationen möchten Sie das enthaltene Sicherheitsskript ausführen. Dies ändert einige der weniger sicheren Standardoptionen für Dinge wie Remotestammanmeldungen und Beispielbenutzer. In älteren Versionen von MySQL mussten Sie das Datenverzeichnis ebenfalls manuell initialisieren, dies geschieht jedoch jetzt automatisch.

Führen Sie das Sicherheitsskript aus:

sudo mysql_secure_installation

Dies führt Sie durch eine Reihe von Eingabeaufforderungen, in denen Sie einige Änderungen an den Sicherheitsoptionen Ihrer MySQL-Installation vornehmen können. Bei der ersten Aufforderung werden Sie gefragt, ob Sie das Validate Password Plugin einrichten möchten, mit dem Sie die Stärke Ihres MySQL-Passworts testen können. Unabhängig von Ihrer Wahl besteht die nächste Eingabeaufforderung darin, ein Kennwort für den Benutzer von MySQLrootfestzulegen. Geben Sie ein sicheres Passwort Ihrer Wahl ein und bestätigen Sie es.

Von dort aus können SieY und dannENTER drücken, um die Standardeinstellungen für alle nachfolgenden Fragen zu übernehmen. Dadurch werden einige anonyme Benutzer und die Testdatenbank entfernt, Remote-Root-Anmeldungen deaktiviert und diese neuen Regeln geladen, sodass MySQL die von Ihnen vorgenommenen Änderungen sofort berücksichtigt.

Um das MySQL-Datenverzeichnis zu initialisieren, verwenden Siemysql_install_db für Versionen vor 5.7.6 undmysqld --initialize für 5.7.6 und höher. Wenn Sie jedoch MySQL von der Debian-Distribution installiert haben, wie in Schritt 1 beschrieben, wurde das Datenverzeichnis automatisch initialisiert. du musst nichts tun Wenn Sie trotzdem versuchen, den Befehl auszuführen, wird der folgende Fehler angezeigt:

Ausgabe

mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
. . .
2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting

Beachten Sie, dass dieser Benutzer, obwohl Sie ein Kennwort für den MySQL-Benutzer vonrootfestgelegt haben, nicht so konfiguriert ist, dass er sich beim Herstellen einer Verbindung mit der MySQL-Shell mit einem Kennwort authentifiziert. Wenn Sie möchten, können Sie diese Einstellung anpassen, indem Sie Schritt 3 ausführen.

[[Schritt 3 - Optionales Anpassen der Benutzerauthentifizierung und -berechtigungen]] == Schritt 3 - (Optional) Anpassen der Benutzerauthentifizierung und -berechtigungen

In Ubuntu-Systemen mit MySQL 5.7 (und späteren Versionen) ist der MySQL-Benutzer vonrooto eingestellt, dass er sich standardmäßig mit dem Pluginauth_socketund nicht mit einem Kennwort authentifiziert. Dies ermöglicht in vielen Fällen eine größere Sicherheit und Benutzerfreundlichkeit, kann jedoch auch kompliziert sein, wenn Sie einem externen Programm (z. B. phpMyAdmin) den Zugriff auf den Benutzer erlauben müssen.

Um ein Kennwort für die Verbindung zu MySQL alsroot zu verwenden, müssen Sie die Authentifizierungsmethode vonauth_socket aufmysql_native_password umstellen. Öffnen Sie dazu die MySQL-Eingabeaufforderung von Ihrem Terminal aus:

sudo mysql

Überprüfen Sie als Nächstes mit dem folgenden Befehl, welche Authentifizierungsmethode jedes Ihrer MySQL-Benutzerkonten verwendet:

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

In diesem Beispiel können Sie sehen, dass sich der Benutzer vonroottatsächlich mit dem Pluginauth_socketauthentifiziert. Führen Sie den folgenden BefehlALTER USERaus, um das Konto vonrootfür die Authentifizierung mit einem Kennwort zu konfigurieren. Stellen Sie sicher, dass Siepassword in ein sicheres Kennwort Ihrer Wahl ändern, und beachten Sie, dass dieser Befehl das in Schritt 2 festgelegte Kennwort vonroot ändert:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Führen Sie dannFLUSH PRIVILEGES aus, um den Server anzuweisen, die Grant-Tabellen neu zu laden und Ihre neuen Änderungen in Kraft zu setzen:

FLUSH PRIVILEGES;

Überprüfen Sie die von jedem Ihrer Benutzer verwendeten Authentifizierungsmethoden erneut, um sicherzustellen, dassroot nicht mehr mit demauth_socket-Plugin authentifiziert wird:

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

In dieser Beispielausgabe sehen Sie, dass sich der MySQL-Benutzer vonrootjetzt mit einem Kennwort authentifiziert. Sobald Sie dies auf Ihrem eigenen Server bestätigt haben, können Sie die MySQL-Shell verlassen:

exit

Alternativ finden einige möglicherweise, dass es besser für ihren Workflow ist, mit einem dedizierten Benutzer eine Verbindung zu MySQL herzustellen. Um einen solchen Benutzer anzulegen, öffnen Sie die MySQL-Shell noch einmal:

sudo mysql

[.Hinweis]##

Note: Wenn Sie die Kennwortauthentifizierung fürroot aktiviert haben, wie in den vorhergehenden Absätzen beschrieben, müssen Sie einen anderen Befehl verwenden, um auf die MySQL-Shell zuzugreifen. Folgendes führt Ihren MySQL-Client mit regulären Benutzerrechten aus und Sie erhalten nur Administratorrechte innerhalb der Datenbank, wenn Sie sich authentifizieren:

mysql -u root -p

Erstellen Sie von dort aus einen neuen Benutzer und geben Sie ihm ein sicheres Passwort:

CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

Gewähren Sie dann Ihrem neuen Benutzer die entsprechenden Berechtigungen. Mit dem folgenden Befehl können Sie beispielsweise allen Tabellen in der Datenbank Benutzerberechtigungen erteilen sowie die Berechtigung zum Hinzufügen, Ändern und Entfernen von Benutzerberechtigungen erteilen:

GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Beachten Sie, dass Sie zu diesem Zeitpunkt den BefehlFLUSH PRIVILEGES nicht erneut ausführen müssen. Dieser Befehl wird nur benötigt, wenn Sie die Grant-Tabellen mit Anweisungen wieINSERT,UPDATE oderDELETE ändern. Da Sie einen neuen Benutzer erstellt haben, istFLUSH PRIVILEGES hier nicht erforderlich, anstatt einen vorhandenen zu ändern.

Beenden Sie anschließend die MySQL-Shell:

exit

Lassen Sie uns zum Schluss die MySQL-Installation testen.

[[Schritt-4 -—- Testen von MySQL]] == Schritt 4 - Testen von MySQL

Unabhängig davon, wie Sie es installiert haben, sollte MySQL automatisch gestartet werden. Um dies zu testen, überprüfen Sie den Status.

systemctl status mysql.service

Es wird eine Ausgabe ähnlich der folgenden angezeigt:

Ausgabe

● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en
   Active: active (running) since Wed 2018-04-23 21:21:25 UTC; 30min ago
 Main PID: 3754 (mysqld)
    Tasks: 28
   Memory: 142.3M
      CPU: 1.994s
   CGroup: /system.slice/mysql.service
           └─3754 /usr/sbin/mysqld

Wenn MySQL nicht ausgeführt wird, können Sie es mitsudo systemctl start mysql starten.

Für eine zusätzliche Überprüfung können Sie versuchen, mit dem Toolmysqladmin, einem Client, mit dem Sie Verwaltungsbefehle ausführen können, eine Verbindung zur Datenbank herzustellen. Dieser Befehl besagt beispielsweise, dass eine Verbindung zu MySQL alsroot (-u root) hergestellt, ein Kennwort (-p) abgefragt und die Version zurückgegeben werden soll.

sudo mysqladmin -p -u root version

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

Ausgabe

mysqladmin  Ver 8.42 Distrib 5.7.21, for Linux on x86_64
Copyright (c) 2000, 2018, 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      5.7.21-1ubuntu1
Protocol version    10
Connection      Localhost via UNIX socket
UNIX socket     /var/run/mysqld/mysqld.sock
Uptime:         30 min 54 sec

Threads: 1  Questions: 12  Slow queries: 0  Opens: 115  Flush tables: 1  Open tables: 34  Queries per second avg: 0.006

Dies bedeutet, dass MySQL läuft.

Fazit

Sie haben jetzt ein grundlegendes MySQL-Setup auf Ihrem Server installiert. Hier sind einige Beispiele für die nächsten Schritte, die Sie ausführen können: