Kapitel 1. MySQL installieren

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Beginnen wir unseren Lernpfad, indem wir MySQL installieren und zum ersten Mal darauf zugreifen.

Beachte, dass wir uns in diesem Buch nicht auf eine einzige Version von MySQL verlassen. Stattdessen haben wir auf unser kollektives Wissen über MySQL in der Praxis zurückgegriffen. Der Schwerpunkt des Buches liegt auf Linux-Betriebssystemen (vor allem Ubuntu/Debian und CentOS/RHEL oder deren Derivaten) und auf MySQL 5.7 und MySQL 8.0, da dies unserer Meinung nach die "aktuellen" Versionen sind, die für den Produktionseinsatz geeignet sind. Die MySQL 5.7- und 8.0-Serien befinden sich noch in der Entwicklung, was bedeutet, dass auch weiterhin neuere Versionen mit Fehlerbehebungen und neuen Funktionen veröffentlicht werden.

Seit MySQL die beliebteste Open-Source-Datenbank ist (Oracle, das an erster Stelle steht, ist nicht quelloffen), ist die Nachfrage nach einem schnellen Installationsprozess gestiegen. Du kannst dir die Installation von MySQL so vorstellen wie das Backen eines Kuchens: Der Quellcode ist das Rezept. Aber selbst wenn der Quellcode verfügbar ist, ist das Rezept für die Erstellung von Software nicht einfach zu befolgen. Das Kompilieren dauert seine Zeit, und in der Regel ist es notwendig, zusätzliche Entwicklungsbibliotheken zu installieren, die die Produktionsumgebung einem Risiko aussetzen. Angenommen, du möchtest einen Schokoladenkuchen backen. Selbst wenn du die Anleitung hast, wie du ihn selbst machen kannst, möchtest du vielleicht nicht deine Küche verschmutzen oder du hast keine Zeit, ihn zu backen, also gehst du in eine Bäckerei und kaufst stattdessen einen. Für MySQL kannst du die Distributionspakete verwenden, wenn du es ohne den Aufwand des Kompilierens benutzen willst.

Distributionspakete für MySQL gibt es für verschiedene Plattformen, darunter Linux-Distributionen, Windows und macOS. Diese Pakete bieten eine flexible und schnelle Möglichkeit, MySQL zu nutzen. Um auf das Beispiel mit dem Schokoladenkuchen zurückzukommen: Angenommen, du möchtest etwas ändern. Vielleicht möchtest du einen weißen Schokoladenkuchen. Für MySQL gibt es so genannte Forks, die verschiedene Optionen enthalten. Im nächsten Abschnitt werden wir uns ein paar davon ansehen.

MySQL-Gabeln

In der Softwareentwicklung kommt es zu einem Fork, wenn jemand den Quellcode von kopiert und seinen eigenen Weg der unabhängigen Entwicklung und Unterstützung beginnt. Der Fork kann sich eng an die ursprüngliche Version anlehnen, wie bei der Percona-Distribution von MySQL, oder sich von ihr entfernen, wie bei MariaDB. Da der MySQL-Quellcode offen und frei ist, können neue Projekte den Code ohne Erlaubnis des ursprünglichen Entwicklers abspalten. Werfen wir einen Blick auf ein paar der bekanntesten Forks.

MySQL Community Edition

MySQL Community Edition, auch bekannt als die Upstream- oder Vanilla-Version von MySQL, ist die Open-Source-Version, die von Oracle vertrieben wird. Diese Version treibt die Entwicklung der InnoDB-Engine und neuer Funktionen voran und ist die erste, die Updates, neue Funktionen und Fehlerbehebungen erhält.

Percona Server für MySQL

Die Percona-Distribution von MySQL ist ein freier, quelloffener Drop-in-Ersatz für die MySQL Community Edition. Die Entwicklung orientiert sich eng an dieser Version und konzentriert sich auf die Verbesserung der Leistung und des gesamten MySQL-Ökosystems. Percona Server enthält außerdem zusätzliche Erweiterungen wie die MyRocks-Engine, ein Audit-Log-Plugin und ein PAM-Authentifizierungs-Plugin. Percona wurde von Peter Zaitsev und Vadim Tkachenko mitbegründet.

MariaDB Server

MariaDB Server wurde von Michael "Monty" Widenius und entwickelt und wird von der MariaDB Foundation vertrieben. MariaDB Server ist bei weitem der Fork, der sich am weitesten von Vanilla MySQL entfernt hat. In den letzten Jahren hat sie neue Funktionen und Engines wie MariaDB ColumnStore entwickelt und war die erste Datenbank, die die Galera 4Clustering-Funktionalität integriert hat.

MySQL Enterprise Edition

Die MySQL Enterprise Edition ist derzeit die einzige Version mit einer kommerziellen Lizenz (was bedeutet, dass du für die Nutzung bezahlen musst, wie bei einer Windows-Lizenz). Sie wird ebenfalls von Oracle vertrieben und enthält alle Funktionen der Community Edition sowie exklusive Funktionen für Sicherheit, Backup und Hochverfügbarkeit.

Installationsmöglichkeiten und Plattformen

Zuerst musst du die MySQL-Version auswählen, die mit deinem Betriebssystem (OS) kompatibel ist. Du kannst die Kompatibilität auf der MySQL-Website überprüfen. Die gleichen Supportrichtlinien gelten auch für Percona Server und MariaDB.

Wir hören oft die Frage: Ist es möglich, MySQL auf einem Betriebssystem zu installieren, das nicht unterstützt wird? In den meisten Fällen lautet die Antwort: Ja. Es ist zum Beispiel möglich, MySQL auf Windows 7 zu installieren, aber das Risiko, auf einen Fehler zu stoßen oder mit unvorhersehbarem Verhalten konfrontiert zu werden (z. B. Speicherlecks oder zu geringe Leistung), ist hoch. Wegen dieser Risiken raten wir davon ab, dies in Produktionsumgebungen zu tun.

Im nächsten Schritt musst du entscheiden, ob du eine Entwicklungs- oder eine General Availability (GA) Version installieren möchtest. Entwicklungsversionen haben die neuesten Funktionen, aber wir empfehlen sie nicht für die Produktion, da sie nicht stabil sind. GA-Releases, auch Produktions- oder stabile Releases genannt, sind für den Einsatz in der Produktion gedacht.

Tipp

Wir empfehlen dringend, die neueste GA-Version zu verwenden, da diese die neuesten stabilen Fehlerbehebungen und Leistungsverbesserungen enthält.

Als Letztes musst du entscheiden, welches Distributionsformat du für das Betriebssystem installieren möchtest. Für die meisten Anwendungsfälle ist eine Binärdistribution geeignet. Binärdistributionen sind im nativen Format für viele Plattformen erhältlich, z. B. als .rpm-Pakete für Linux oder .dmg-Pakete für macOS. Die Distributionen sind auch in allgemeinen Formaten erhältlich, z. B. als .zip-Archive oder komprimierte .tar-Dateien(Tarballs). Unter Windows kannst du den MySQL Installer verwenden, um eine Binärdistribution zu installieren.

Warnung

Achte darauf, ob die Version 32-Bit oder 64-Bit ist. Als Faustregel gilt, dass du die 64-Bit-Version wählen solltest. Sofern du nicht mit einem alten Betriebssystem arbeitest, solltest du nicht die 32-Bit-Version wählen. Das liegt daran, dass 32-Bit-Prozessoren nur eine begrenzte Menge an Arbeitsspeicher verwalten können (4 GB oder weniger), während 64-Bit-Prozessoren in der Lage sind, viel mehr Speicher zu adressieren.

Der Installationsprozess besteht aus vier Hauptschritten, die in den folgenden Abschnitten beschrieben werden. Es ist wichtig, dass du diese korrekt befolgst und die Mindestsicherheitsanforderungen für die MySQL-Datenbank einhältst.

1. Lade die Distribution herunter, die du installieren möchtest

Jede Distribution hat ihren eigenen Eigentümer und damit auch ihre eigene Quelle. Einige Linux-Distributionen bieten Standardpakete in ihren Repositories an. Unter CentOS 8 zum Beispiel ist die MySQL-Vanilla-Distribution in den Standard-Repositories verfügbar. Wenn das Betriebssystem über Standardpakete verfügt, ist es nicht nötig, MySQL von einer Website herunterzuladen oder ein Repository selbst zu konfigurieren, was den Installationsprozess erleichtert.

Wir zeigen dir, wie du die Repositories installierst und die Dateien herunterlädst, ohne dass du während des Installationsprozesses auf die Website gehen musst. Wenn du MySQL jedoch selbst herunterladen möchtest, kannst du die folgenden Links verwenden:

2. Installiere die Verteilung

Die Installation besteht aus den elementaren Schritten, um MySQL funktionsfähig zu machen und online zu bringen, aber nicht aus der Sicherung von MySQL. Zu diesem Zeitpunkt kann sich zum Beispiel der MySQL-Root-Benutzer ohne Passwort anmelden, was ziemlich gefährlich ist, da der Root-Benutzer die Berechtigung hat, jede Aktion auszuführen, einschließlich des Löschens einer Datenbank.

3. Erforderliche Nachinstallationsarbeiten durchführen

In diesem Schritt geht es darum, sicherzustellen, dass der MySQL-Server richtig funktioniert. Es ist wichtig sicherzustellen, dass dein Server sicher ist. Der erste Schritt dazu ist die Ausführung des Skripts mysql_secure_installation. Du änderst das Passwort für den Root-Benutzer, deaktivierst den Zugriff für den Root-Benutzer von einem entfernten Server und entfernst die Testdatenbank.

4. Benchmarks ausführen

Einige DBAs führen für jeden Einsatz von Benchmarks durch, um zu messen, ob die Leistung für das Projekt, für das sie es einsetzen, geeignet ist. Das gängigste Tool dafür ist sysbench. An dieser Stelle ist es wichtig zu betonen, dass sysbench eine synthetische Arbeitslast durchführt, während wir, wenn die Anwendung läuft, von der realen Arbeitslast sprechen. Synthetische Workloads liefern in der Regel Berichte über die maximale Serverleistung, können aber nicht den realen Workload (mit seinen inhärenten Sperren, unterschiedlichen Ausführungszeiten für Abfragen, Stored Procedures, Triggern usw.) reproduzieren.

Im nächsten Abschnitt gehen wir die Details des Installationsprozesses für einige der am häufigsten verwendeten Plattformen durch.

Installation von MySQL unter Linux

Das Linux-Ökosystem ist vielfältig und hat viele Varianten, darunter Red Hat Enterprise Linux (RHEL), CentOS, Ubuntu, Debian und andere. Dieser Abschnitt konzentriert sich nur auf die populärsten Varianten - sonst würde sich dieses Buch nur um den Installationsprozess drehen!

Installation von MySQL auf CentOS 7

CentOS, kurz für Community Enterprise Linux Operating System, wurde 2004 gegründet und 2014 von Red Hat übernommen. CentOS ist die Community-Version von Red Hat, sie sind also ziemlich identisch, aber CentOS ist kostenlos und der Support kommt von der Community und nicht von Red Hat selbst. CentOS 7 wurde 2014 veröffentlicht und hat ein End-of-Life-Datum von 2024.

Installation von MySQL 8.0

Um MySQL 8.0 unter CentOS 7 mit dem yum-Repository zu installieren, führe die folgenden Schritte aus.

Am Linux-Server anmelden

Aus Sicherheitsgründen loggen sich Benutzer normalerweise als nicht privilegierte Benutzer bei Linux-Servern ein. Hier ist ein Beispiel für einen Benutzer, der sich von einem macOS-Terminal aus mit einem privaten Schlüssel bei Linux anmeldet:

$ ssh -i key.pem centos@3.227.11.227

Nachdem du dich erfolgreich verbunden hast, siehst du im Terminal etwas wie das hier:

[centos@ip-172-30-150-91 ~]$

Root unter Linux werden

Sobald du mit dem Server verbunden bist, musst du root werden:

$ sudo su - root

In deinem Terminal siehst du dann eine Eingabeaufforderung wie die folgende:

[root@ip-172-30-150-91 ~]#

Root zu werden ist wichtig, denn um MySQL zu installieren, müssen Aufgaben wie das Anlegen des MySQL-Benutzers in Linux, das Konfigurieren von Verzeichnissen und das Setzen von Berechtigungen durchgeführt werden. Es ist auch möglich, den Befehl sudo für alle Beispiele zu verwenden, die wir zeigen werden und die vom Benutzer root ausgeführt werden sollten. Wenn du jedoch vergisst, einem Befehl das Präfix sudo voranzustellen, wird der Installationsprozess unvollständig sein.

Hinweis

In diesem Kapitel wird in den meisten Beispielen der Linux-Root-Benutzer verwendet (dargestellt durch die Eingabeaufforderung # in den Codezeilen). Ein weiterer Vorteil der Darstellung # ist, dass dies auch das Kommentarzeichen in Linux ist. Wenn du Zeilen aus dem Buch blind kopierst und einfügst, wirst du keine echten Befehle in der Shell ausführen.

Konfiguriere das yum Repository

Führe den folgenden Befehl aus, um das MySQL yum-Repository zu konfigurieren:

# rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7.rpm

MySQL 8.0 Community Server installieren

Da das MySQL yum Repository Repositories für mehrere MySQL-Versionen (5.7 und 8.0 Hauptversionen) hat, müssen wir zuerst alle Repositories deaktivieren:

# sed -i 's/enabled=1/enabled=0/'
/etc/yum.repos.d/mysql-community.repo

Als nächstes müssen wir das MySQL 8.0 Repository aktivieren und den folgenden Befehl ausführen, um MySQL 8.0 zu installieren:

# yum --enablerepo=mysql80-community install mysql-community-server

Starte den MySQL-Dienst

Starte nun den MySQL-Dienst mit dem Befehl systemctl:

# systemctl start mysqld

Es ist auch möglich, den MySQL-Prozess manuell zu starten. Das kann nützlich sein, um Initialisierungsprobleme zu beheben, wenn MySQL sich weigert, zu starten. Um manuell zu starten, gibst du den Speicherort der Datei my.cnf an und gibst an, welcher Benutzer die Datenbankdateien und den Prozess manipulieren kann:

# mysqld --defaults-file=/etc/my.cnf --user=mysql

Entdecke das Standardpasswort für den Root-Benutzer

Wenn du MySQL 8.0 installierst, erstellt MySQL ein temporäres Passwort für das Root-Benutzerkonto. Um das Passwort des Root-Benutzerkontos zu ermitteln, führst du den folgenden Befehl aus:

# grep "A temporary password" /var/log/mysqld.log

Der Befehl liefert eine Ausgabe wie die folgende:

2020-05-31T15:04:12.256877Z 6 [Note] [MY-010454] [Server] A temporary
password is generated for root@localhost: #z?hhCCyj2aj

Sichern Sie die MySQL-Installation

MySQL bietet ein Shell-Skript, das du auf Unix-Systemen ausführen kannst, mysql_secure_installation, mit dem du die Sicherheit deiner Serverinstallation auf folgende Weise verbessern kannst:

  • Du kannst ein Passwort für das Root-Konto festlegen.

  • Du kannst den Root-Zugriff von außerhalb des localhosts deaktivieren.

  • Du kannst anonyme Benutzerkonten entfernen.

  • Du kannst die Testdatenbank entfernen, auf die standardmäßig anonyme Benutzer zugreifen können.

Führe den Befehl mysql_secure_installation aus, um den MySQL-Server zu sichern:

# mysql_secure_installation

Er wird dich zur Eingabeaufforderung für das aktuelle Passwort des Root-Kontos machen:

Enter the password for user root:

Gib das im vorherigen Schritt erhaltene temporäre Passwort ein und drücke die Eingabetaste. Die folgende Meldung wird angezeigt:

The existing password for the user account root has expired. Please
set a new password.

New password:
Re-enter new password:
Hinweis

Dieser Abschnitt behandelt nur die Grundlagen des Änderns des Root-Passworts, um den Zugriff auf den MySQL-Server zu ermöglichen. In Kapitel 8 werden wir mehr Details über die Vergabe von Privilegien und die Erstellung einer Passwortrichtlinie zeigen.

Du musst das neue Passwort für das Root-Konto zweimal eingeben. Neuere MySQL-Versionen verfügen über eine Validierungsrichtlinie, die besagt, dass das neue Passwort bestimmte Mindestanforderungen erfüllen muss, um akzeptiert zu werden. Die Standardanforderungen sind, dass Passwörter mindestens acht Zeichen lang sein müssen und Folgendes beinhalten:

  • Mindestens ein numerisches Zeichen

  • Mindestens ein Kleinbuchstabe

  • Mindestens ein Buchstabe in Großbuchstaben

  • Mindestens ein Sonderzeichen (nicht alphanumerisch)

Als Nächstes wirst du mit einigen Ja/Nein-Fragen gefragt, ob du einige Änderungen an der Ersteinrichtung vornehmen möchtest. Um maximalen Schutz zu gewährleisten, empfehlen wir, anonyme Benutzer zu entfernen, die Remote-Root-Anmeldung zu deaktivieren und die Testdatenbank zu entfernen (d. h. alle Optionen mit Ja zu beantworten):

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

Remove test database and access to it? (Press y|Y for Yes, any other key
for No) : y

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

Verbinden mit MySQL

Dieser Schritt ist optional, aber wir verwenden ihn, um zu überprüfen, ob wir alle Schritte korrekt ausgeführt haben. Benutze diesen Befehl, um dich mit dem MySQL-Server zu verbinden:

# mysql -u root -p

Es wird eine Eingabeaufforderung für das Passwort des Root-Benutzers angezeigt. Gib das Passwort ein und drücke die Eingabetaste:

Enter password:

Wenn das erfolgreich war, wird die MySQL-Befehlszeile angezeigt:

mysql>

MySQL 8.0 beim Serverstart starten (optional)

Um MySQL so einzustellen, dass es beim Hochfahren des Servers gestartet wird, verwende den folgenden Befehl:

# systemctl enable mysqld

Installation von MariaDB 10.5

Um MariaDB 10.5 auf CentOS 7 zu installieren, musst du ähnliche Schritte ausführen wie bei der Vanilla-MySQL-Distribution.

Root unter Linux werden

Zuerst müssen wir root werden. Siehe die Anweisungen in "MySQL 8.0 installieren".

Installiere das MariaDB Repository

Mit den folgenden Befehlen lädst du das MariaDB-Repository herunter und konfigurierst es für den nächsten Schritt. Beachte, dass wir in den yum Befehlen die Option -y verwenden. Mit dieser Option wird Linux angewiesen, alle nachfolgenden Fragen mit Ja zu beantworten:

# yum install wget -y
# wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
# chmod +x mariadb_repo_setup
# ./mariadb_repo_setup

MariaDB installieren

Wenn das Repository konfiguriert ist, wird mit dem nächsten Befehl die neueste stabile Version von MariaDB und seinen Abhängigkeiten installiert:

# yum install MariaDB-server -y

Das Ende der Ausgabe sieht ähnlich aus wie hier:

Installed:
  MariaDB-compat.x86_64 0:10.5.8-1.el7.centos                                                                                         MariaDB-server.x86_64 0:10.5.8-1.el7.centos

Dependency Installed:
  MariaDB-client.x86_64 0:10.5.8-1.el7.centos MariaDB-common.x86_64
  0:10.5.8-1.el7.centos boost-program-options.x86_64 0:1.53.0-28.el7
  galera-4.x86_64 0:26.4.6-1.el7.centos        libaio.x86_64
  0:0.3.109-13.el7               lsof.x86_64 0:4.87-6.el7
  pcre2.x86_64 0:10.23-2.el7                  perl.x86_64
  4:5.16.3-299.el7_9              perl-Carp.noarch 0:1.26-244.el7
  ...

Replaced:
  mariadb-libs.x86_64 1:5.5.64-1.el7

Complete!

Das "Complete!" am Ende des Protokolls zeigt eine erfolgreiche Installation an.

MariaDB starten

Wenn MariaDB installiert ist, initialisiere den Dienst mit dem Befehl systemctl:

# systemctl start mariadb.service

Du kannst diesen Befehl verwenden, um seinen Status zu überprüfen:

# systemctl status mariadb
  mariadb.service - MariaDB 10.5.8 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled;
   vendor preset: disabled)
...
Feb 07 12:55:04 ip-172-30-150-91.ec2.internal systemd[1]: Started
MariaDB 10.5.8 database server.

MariaDB sichern

Zu diesem Zeitpunkt wird MariaDB im unsicheren Modus ausgeführt. Im Gegensatz zu MySQL 8.0 hat MariaDB ein leeres Root-Passwort, sodass du sofort darauf zugreifen kannst:

# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 44
Server version: 10.5.8-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.

MariaDB [(none)]>

Du kannst mysql_secure_installation ausführen, um MariaDB zu sichern, genauso wie du es für MySQL 8.0 tun würdest (siehe den vorherigen Abschnitt für Details). Es gibt eine kleine Abweichung in der Ausgabe, mit einer zusätzlichen Frage:

Switch to unix_socket authentication [Y/n] y
Enabled successfully!
Reloading privilege tables..
 ... Success!

Wenn du mit Ja antwortest, wird die Verbindung vom TCP/IP- zum Unix-Socket-Modus geändert. Wir werden die verschiedenen Verbindungstypen in "MySQL 5.7 Standarddateien" besprechen .

Installation von Percona Server 8.0

Installiere Percona Server 8.0 auf CentOS 7 mit folgendem Schritt.

Root unter Linux werden

Zuerst musst du root werden. Siehe die Anweisungen in "MySQL 8.0 installieren".

Installiere das Percona Repository

Du kannst das Percona yum Repository installieren, indem du den folgenden Befehl als root oder mit sudo ausführst:

# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

Die Installation erstellt eine neue Repository-Datei, /etc/yum.repos.d/percona-original-release.repo. Aktiviere nun das Percona Server 8.0 Repository mit diesem Befehl:

# percona-release setup ps80

Percona Server 8.0 installieren

Um den Server zu installieren, führe diesen Befehl aus:

# yum install percona-server-server

Percona Server 8.0 mit systemctl initialisieren

Sobald du die Percona Server 8.0 Binärdateien installiert hast, starte den Dienst:

# systemctl start mysql

Und bestätige seinen Status:

# systemctl status mysql
 mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled;
   vendor preset: disabled)
   Active: active (running) since Sun 2021-02-07 13:22:15 UTC; 6s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 14472 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited,
  status=0/SUCCESS)
 Main PID: 14501 (mysqld)
   Status: "Server is operational"
    Tasks: 39 (limit: 5789)
   Memory: 345.2M
   CGroup: /system.slice/mysqld.service
           └─14501 /usr/sbin/mysqld

Feb 07 13:22:14 ip-172-30-92-109.ec2.internal systemd[1]: Starting
MySQL Server...
Feb 07 13:22:15 ip-172-30-92-109.ec2.internal systemd[1]: Started MySQL
Server.

An diesem Punkt sind die Schritte ähnlich wie bei der Vanilla-Installation. Beachte dieAbschnitte über die Beschaffung des temporären Passworts und die Ausführung des Befehls mysql_secure_installation in "Installation von MySQL 8.0".

Installation von MySQL 5.7

Installiere MySQL 5.7 auf CentOS 7 mit den folgenden Schritten.

Root unter Linux werden

Zuerst musst du root werden. Siehe die Anweisungen in "MySQL 8.0 installieren".

Installiere das MySQL 5.7 Repository

Du kannst das MySQL 5.7 yum Repository installieren, indem du den folgenden Befehl als root oder mit sudo ausführst:

# yum localinstall\
    https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm -y

Die Installation erstellt eine neue Repository-Datei, /etc/yum.repos.d/mysql-community.repo.

Installiere die MySQL 5.7 Binärdateien

Um den Server zu installieren, führe diesen Befehl aus:

# yum install mysql-community-server -y

MySQL 5.7 mit systemctl initialisieren

Wenn du die MySQL 5.7 Binärdateien installiert hast, starte den Dienst:

# systemctl start mysqld

Und führe diesen Befehl aus, um seinen Status zu überprüfen:

# systemctl status mysqld

An diesem Punkt sind die Schritte ähnlich wie bei der Installation von MySQL 8.0 vanilla. Beachte dieAbschnitte über die Beschaffung des temporären Passworts und die Ausführung des Befehls mysql_secure_installation in "Installation von MySQL 8.0".

Installation von Percona Server 5.7

Installiere Percona Server 5.7 auf CentOS 7 mit den folgenden Schritten.

Root unter Linux werden

Zuerst musst du root werden. Siehe die Anweisungen in "MySQL 8.0 installieren".

Installiere das Percona Repository

Du kannst das Percona yum Repository installieren, indem du den folgenden Befehl als root oder mit sudo ausführst:

# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

Die Installation erstellt eine neue Repository-Datei, /etc/yum.repos.d/percona-original-release.repo. Benutze diesen Befehl, um das Percona Server 5.7 Repository zu aktivieren:

# percona-release setup ps57

Installiere die Percona Server 5.7 Binärdateien

Um den Server zu installieren, führe diesen Befehl aus:

# yum install Percona-Server-server-57 -y

Percona Server 5.7 mit systemctl initialisieren

Sobald du die Percona Server 5.7 Binärdateien installiert hast, starte den Dienst:

# systemctl start mysql

Und bestätige seinen Status:

# systemctl status mysql

An diesem Punkt sind die Schritte ähnlich wie bei der Installation von MySQL 8.0 vanilla. Beachte dieAbschnitte über die Beschaffung des temporären Passworts und die Ausführung des Befehls mysql_secure_installation in "Installation von MySQL 8.0".

Installation von MySQL auf CentOS 8

Die aktuelle Version von CentOS ist CentOS 8, und baut auf RHEL 8 auf. CentOS genießt normalerweise denselben zehnjährigen Supportzyklus wie RHEL selbst. Nach diesem traditionellen Support-Lebenszyklus würde CentOS 8 im Jahr 2029 auslaufen. Im Dezember 2020 kündigte Red Hat jedoch an, CentOS 8 schon viel früher, nämlich 2021, zu Grabe tragen zu wollen. (Red Hat wird CentOS 7 neben RHEL 7 bis 2024 unterstützen.) Die derzeitigen CentOS-Benutzer müssen entweder auf RHEL selbst oder auf das neuere CentOS Stream-Projekt umsteigen. Einige Community-Projekte sind im Entstehen begriffen, aber zum jetzigen Zeitpunkt ist die Zukunft von CentOS ungewiss.

Wir werden die Installationsschritte hier jedoch mit dir teilen, da viele Benutzer in der Industrie RHEL 8 und Oracle Linux 8 verwenden.

Installation von MySQL 8.0

Die neueste Version von MySQL 8.0 ist und kann aus dem Standard-Repository von AppStream über das MySQL-Modul installiert werden, das die Systeme CentOS 8 und RHEL 8 standardmäßig aktivieren. Es gibt also eine gewisse Abweichung von der traditionellen yum Methode. Werfen wir einen Blick auf die Details.

Root unter Linux werden

Zuerst musst du root werden. Siehe die Anweisungen in "MySQL 8.0 installieren".

Installiere die MySQL 8.0 Binärdateien

Führe den folgenden Befehl aus, um das Paket mysql-server und eine Reihe seiner Abhängigkeiten zu installieren:

# dnf install mysql-server

Wenn du dazu aufgefordert wirst, drücke y und dann die Eingabetaste, um zu bestätigen, dass du fortfahren möchtest:

Output
...
Transaction Summary
=======================================================================
Install  50 Packages
Upgrade   8 Packages

Total download size: 50 M
Is this ok [y/N]: y

MySQL starten

An diesem Punkt hast du MySQL auf deinem Server installiert, aber er ist noch nicht betriebsbereit. Das Paket, das du installiert hast, konfiguriert MySQL so, dass es als systemd Dienst namens mysqld.service läuft. Um MySQL zu starten, musst du den Befehl systemctl verwenden:

# systemctl start mysqld.service

Prüfe, ob der Dienst läuft

Um zu überprüfen, ob der Dienst richtig läuft, führe den folgenden Befehl aus:

# systemctl status mysqld

Wenn du MySQL erfolgreich gestartet hast, zeigt die Ausgabe, dass der MySQL-Dienst aktiv ist:

# systemctl status mysqld
mysqld.service - MySQL 8.0 database server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled;
   vendor preset: disabled)
   Active: active (running) since Sun 2020-06-21 22:57:57 UTC; 6s ago
  Process: 15966 ExecStartPost=/usr/libexec/mysql-check-upgrade
  (code=exited, status=0/SUCCESS)
  Process: 15887 ExecStartPre=/usr/libexec/mysql-prepare-db-dir
  mysqld.service (code=exited, status=0/SUCCESS)
  Process: 15862 ExecStartPre=/usr/libexec/mysql-check-socket
  (code=exited, status=0/SUCCESS)
 Main PID: 15924 (mysqld)
   Status: "Server is operational"
    Tasks: 39 (limit: 23864)
   Memory: 373.7M
   CGroup: /system.slice/mysqld.service
           └─15924 /usr/libexec/mysqld --basedir=/usr

Jun 21 22:57:57 ip-172-30-222-117.ec2.internal systemd[1]: Starting
MySQL 8.0 database server...
Jun 21 22:57:57 ip-172-30-222-117.ec2.internal systemd[1]: Started
MySQL 8.0 database server.

Sicheres MySQL 8.0

Wie bei der Installation von MySQL 8.0 unter CentOS 7 musst du den Befehl mysql_secure_installation ausführen (siehe den entsprechenden Abschnitt in "Installation von MySQL 8.0" für weitere Details). Der Hauptunterschied besteht darin, dass es unter CentOS 8 keintemporäres Passwort gibt. Wenn das Skript also das Root-Passwort abfragt, lass es leer und drücke Enter.

MySQL 8.0 beim Serverstart starten (optional)

Um MySQL so einzustellen, dass es beim Hochfahren des Servers gestartet wird, verwende den folgenden Befehl:

# systemctl enable mysqld

Installation von Percona Server 8.0

Um Percona Server 8.0 auf CentOS 8 zu installieren, musst du zuerst das Repository installieren. Gehen wir die Schritte durch.

Root unter Linux werden

Zuerst musst du root werden. Siehe die Anweisungen in "MySQL 8.0 installieren".

Installiere die Percona Server 8.0 Binärdateien

Führe den folgenden Befehl aus, um das Percona-Repository zu installieren:

# yum install https://repo.percona.com/yum/percona-release-latest.noarh.rpm

Wenn du dazu aufgefordert wirst, drücke y und dann die Eingabetaste, um zu bestätigen, dass du fortfahren möchtest:

Last metadata expiration check: 0:03:49 ago on Sun 07 Feb 2021 01:16:41 AM UTC.
percona-release-latest.noarch.rpm                                                                                                                                                                                                        109 kB/s |  19 kB     00:00
Dependencies resolved.

<snip>

Total size: 19 k
Installed size: 31 k
Is this ok [y/N]: y
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :
  1/1
  Installing       : percona-release-1.0-25.noarch
  1/1
  Running scriptlet: percona-release-1.0-25.noarch
  1/1
* Enabling the Percona Original repository
<*> All done!
* Enabling the Percona Release repository
<*> All done!
The percona-release package now contains a percona-release script that
can enable additional repositories for our newer products. For example, to
enable the Percona Server 8.0 repository use:

  percona-release setup ps80

Note: To avoid conflicts with older product versions, the percona-release setup
command may disable our original repository for some products. For more
information, please visit:

  https://www.percona.com/doc/percona-repo-config/percona-release.html

  Verifying: percona-release-1.0-25.noarch 1/1

Installed:
  percona-release-1.0-25.noarch

Aktiviere das Repository für Percona 8.0

Die Installation erstellt eine neue Repository-Datei in /etc/yum.repos.d/percona-original-release.repo. Aktiviere das Percona Server 8.0 Repository mit diesem Befehl:

# percona-release setup ps80

Der Befehl fordert dich auf, das RHEL 8 Modul für MySQL zu deaktivieren. Du kannst dies jetzt tun, indem du y drückst:

* Disabling all Percona Repositories
On RedHat 8 systems it is needed to disable dnf mysql module to install
Percona-Server
Do you want to disable it? [y/N] y
Disabling dnf module...
Percona Release release/noarch YUM repository
6.4 kB/s | 1.4 kB     00:00
Dependencies resolved.

<snip>

Complete!
dnf mysql module was disabled
* Enabling the Percona Server 8.0 repository
* Enabling the Percona Tools repository
<*> All done!

Oder mach es manuell mit dem folgenden Befehl:

# dnf module disable mysql

Installiere die Percona Server 8.0 Binärdateien

Du bist jetzt bereit, Percona Server 8.0 auf deinem CentOS 8/RHEL 8 Server zu installieren. Um zu vermeiden, dass du noch einmal gefragt wirst, ob du fortfahren willst, füge die -y zur Befehlszeile hinzu:

# yum install percona-server-server -y

Percona Server 8.0 starten und sichern

Nachdem du die Percona Server 8.0 Binärdateien installiert hast, kannst du den mysqld Dienst starten und ihn so einstellen, dass er beim Systemstart startet:

# systemctl enable --now mysqld
# systemctl start mysqld

Prüfe den Dienststatus

Es ist wichtig, dass du sicherstellst, dass du alle Schritte erfolgreich abgeschlossen hast. Verwende diesen Befehl, um den Status des Dienstes zu überprüfen:

# systemctl status mysqld
mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled;
   vendor preset: disabled)
   Active: active (running) since Sun 2021-02-07 01:30:50 UTC; 28s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 12864 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited,
  status=0/SUCCESS)
 Main PID: 12942 (mysqld)
   Status: "Server is operational"
    Tasks: 39 (limit: 5789)
   Memory: 442.6M
   CGroup: /system.slice/mysqld.service
           └─12942 /usr/sbin/mysqld

Feb 07 01:30:40 ip-172-30-92-109.ec2.internal systemd[1]: Starting MySQL Server..
Feb 07 01:30:50 ip-172-30-92-109.ec2.internal systemd[1]: Started MySQL Server.
Tipp

Wenn du die Option, dass MySQL beim Booten startet, deaktivieren möchtest, kannst du das mit dem folgenden Befehl tun:

# systemctl disable mysqld

Installation von MySQL 5.7

Installiere MySQL 5.7 auf CentOS 8 mit den folgenden Schritten.

Root unter Linux werden

Zuerst musst du root werden. Siehe die Anweisungen in "MySQL 8.0 installieren".

Deaktiviere das MySQL-Standardmodul

Systeme wie RHEL 8, Oracle Linux 8 und CentOS 8 aktivieren das MySQL-Modul standardmäßig. Wenn dieses Modul nicht deaktiviert wird, maskiert es Pakete, die von MySQL-Repositories bereitgestellt werden, und verhindert, dass du eine andere Version als MySQL 8.0 installierst. Mit diesen Befehlen kannst du dieses Standardmodul entfernen:

# dnf remove @mysql
# dnf module reset mysql && dnf module disable mysql

Konfiguriere das MySQL 5.7 Repository

Es gibt kein MySQL-Repository für CentOS 8, also verwenden wir stattdessen das CentOS 7-Repository als Referenz. Erstelle eine neue Repository-Datei:

# vi /etc/yum.repos.d/mysql-community.repo

Und füge die folgenden Daten in die Datei ein:

[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=0

[mysql-connectors-community]
name=MySQL Connectors Community
baseurl=http://repo.mysql.com/yum/mysql-connectors-community/el/7/$basearch/
enabled=1
gpgcheck=0

[mysql-tools-community]
name=MySQL Tools Community
baseurl=http://repo.mysql.com/yum/mysql-tools-community/el/7/$basearch/
enabled=1
gpgcheck=0

Installiere die MySQL 5.7 Binärdateien

Wenn das Standardmodul deaktiviert und das Repository konfiguriert ist, führe den folgenden Befehl aus, um das Paket mysql-server und seine Abhängigkeiten zu installieren:

# dnf install mysql-community-server

Wenn du dazu aufgefordert wirst, drücke y und dann die Eingabetaste, um zu bestätigen, dass du fortfahren möchtest:

Output
...
Install  5 Packages

Total download size: 202 M
Installed size: 877 M
Is this ok [y/N]: y

MySQL starten

Du hast die MySQL-Binärdateien auf deinem Server installiert, aber er ist noch nicht betriebsbereit. Das Paket, das du installiert hast, konfiguriert MySQL so, dass es als systemd Dienst namens mysqld.service läuft. Um MySQL zu starten, musst du den Befehl systemctl verwenden:

# systemctl start mysqld.service

Prüfe, ob der Dienst läuft

Um zu überprüfen, ob der Dienst richtig läuft, führe den folgenden Befehl aus:

# systemctl status mysqld

Wenn du MySQL erfolgreich gestartet hast, wird die Ausgabe zeigen, dass der MySQL-Dienst aktiv ist:

# systemctl status mysqld
mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled;
   vendor preset: disabled)
   Active: active (running) since Sun 2021-02-07 18:22:12 UTC; 9s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 14396 ExecStart=/usr/sbin/mysqld --daemonize
  --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS
  (code=exited, status=0/SUCCESS)
  Process: 8137 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited,
  status=0/SUCCESS)
 Main PID: 14399 (mysqld)
    Tasks: 27 (limit: 5789)
   Memory: 327.2M
   CGroup: /system.slice/mysqld.service
           └─14399 /usr/sbin/mysqld --daemonize
           --pid-file=/var/run/mysqld/mysqld.pid

Feb 07 18:22:02 ip-172-30-36-53.ec2.internal systemd[1]: Starting MySQL Server...
Feb 07 18:22:12 ip-172-30-36-53.ec2.internal systemd[1]: Started MySQL Server.

Sicheres MySQL 5.7

An diesem Punkt sind die Schritte ähnlich wie bei der Installation von MySQL 8.0 vanilla. Beachte dieAbschnitte über die Beschaffung des temporären Passworts und die Ausführung des Befehls mysql_secure_installation in "Installation von MySQL 8.0".

MySQL 5.7 beim Serverstart starten (optional)

Um MySQL so einzustellen, dass es beim Hochfahren des Servers gestartet wird, verwende den folgenden Befehl:

# systemctl enable mysqld

Installation von MySQL auf Ubuntu 20.04 LTS (Focal Fossa)

Ubuntu ist eine Linux-Distribution, die auf Debian basiert und hauptsächlich aus freier und quelloffener Software besteht. Offiziell gibt es drei Ubuntu-Editionen: Desktop, Server und Core für IoT-Geräte und -Roboter. Die Version, mit der wir in diesem Buch arbeiten werden, ist die Server-Version.

Installation von MySQL 8.0

Bei Ubuntu ist der Prozess etwas anders, da Ubuntu das apt-Repository verwendet. Gehen wir die Schritte durch.

Root unter Linux werden

Zuerst musst du root werden. Siehe die Anweisungen in "MySQL 8.0 installieren".

Konfiguriere das apt Repository

Unter Ubuntu 20.04 (Focal Fossa) kannst du MySQL über das apt-Paket-Repository installieren. Stelle zunächst sicher, dass dein System auf dem neuesten Stand ist:

# apt update

MySQL 8.0 installieren

Als nächstes installierst du das Paket mysql-server:

# apt install mysql-server -y

Der Befehl apt install installiert MySQL, fordert dich aber nicht auf, ein Passwort zu setzen oder andere Konfigurationsänderungen vorzunehmen. Anders als bei der CentOS-Installation wird MySQL unter Ubuntu im unsicheren Modus initialisiert.

Bei Neuinstallationen von MySQL solltest du das Sicherheitsskript des Datenbankmanagementsystems (DBMS) ausführen. Dieses Skript ändert einige der weniger sicheren Standardoptionen für Remote Root Logins und die Testdatenbank. Wir werden dieses Problem im Sicherungsschritt nach der Initialisierung von MySQL angehen.

MySQL starten

An diesem Punkt hast du MySQL auf deinem Server installiert, aber er ist noch nicht betriebsbereit. Um MySQL zu starten, musst du den Befehl systemctl verwenden:

# systemctl start mysql

Prüfe, ob der Dienst läuft

Um zu überprüfen, ob der Dienst richtig läuft, führe den folgenden Befehl aus:

# systemctl status mysql

Wenn du MySQL erfolgreich gestartet hast, zeigt die Ausgabe, dass der MySQL-Dienst aktiv ist:

mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled;
     vendor preset: enabled)
     Active: active (running) since Sun 2021-02-07 20:19:51 UTC; 22s ago
    Process: 3514 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre
    (code=exited, status=0/SUCCESS)
   Main PID: 3522 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 1164)
     Memory: 332.7M
     CGroup: /system.slice/mysql.service
             └─3522 /usr/sbin/mysqld

Feb 07 20:19:50 ip-172-30-202-86 systemd[1]: Starting MySQL Community Server...
Feb 07 20:19:51 ip-172-30-202-86 systemd[1]: Started MySQL Community Server.

Sicheres MySQL 8.0

An diesem Punkt sind die Schritte ähnlich wie bei der Vanilla-Installation unter CentOS 7 (siehe "Installation von MySQL 8.0"). Allerdings wird MySQL 8.0 unter Ubuntu ungesichert initialisiert, was bedeutet, dass das Root-Passwort leer ist. Um es zu sichern, führe mysql_secure_installation aus:

# mysql_secure_installation

Dies führt dich durch eine Reihe von Eingabeaufforderungen, um einige Änderungen an den Sicherheitsoptionen der MySQL-Installation vorzunehmen, die denen der zuvor beschriebenen CentOS-Version ähneln.

Hier gibt es eine kleine Abweichung, denn in Ubuntu ist es möglich, die Validierungsrichtlinie zu ändern, die die Passwortstärke verwaltet. In diesem Beispiel setzen wir die Überprüfungsrichtlinie auf MEDIUM (1):

Securing 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: 1
Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other
key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Installation von Percona Server 8

Installiere Percona Server 8.0 auf Ubuntu 20.04 LTS mit den folgenden Schritten.

Root unter Linux werden

Zuerst musst du root werden. Siehe die Anweisungen in "MySQL 8.0 installieren".

Installiere den GNU Privacy Guard

Oracle signiert herunterladbare MySQL-Pakete mit GNU Privacy Guard (GnuPG), einer Open-Source-Alternative zum bekannten Pretty Good Privacy (PGP), das von Phil Zimmermann entwickelt wurde. Bei den meisten Linux-Distributionen ist GnuPG standardmäßig installiert, aber in diesem Fall musst du es selbst installieren:

# apt-get install gnupg2 -y

Hole die Repository-Pakete von der Percona-Website

Als Nächstes holst du die Repository-Pakete mit dem Befehl wget aus dem Percona-Repository:

# wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)\
    _all.deb

Installiere das heruntergeladene Paket mit dpkg

Nach dem Download installierst du das Paket mit dem folgenden Befehl:

# dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb

Du kannst dann das Repository überprüfen, das in der Datei /etc/apt/sources.list.d/percona-original-release.list konfiguriert ist.

Aktiviere das Repository

Im nächsten Schritt aktivierst du Percona Server 8.0 im Repository und aktualisierst es:

# percona-release setup ps80
# apt update

Installiere die Percona Server 8.0 Binärdateien

Installiere dann das Paket percona-server-server mit dem Befehl apt-get install:

# apt-get install percona-server-server -y

MySQL starten

An diesem Punkt hast du MySQL auf deinem Server installiert, aber er ist noch nicht betriebsbereit. Um MySQL zu starten, musst du den Befehl systemctl verwenden:

# systemctl start mysql

Prüfe, ob der Dienst läuft

Um zu überprüfen, ob der Dienst richtig läuft, führe den folgenden Befehl aus:

# systemctl status mysql

Zu diesem Zeitpunkt läuft der Percona Server im unsicheren Modus. Wenn du mysql_secure_installation ausführst, wirst du durch eine Reihe von Eingabeaufforderungen geführt, um einige Änderungen an den Sicherheitsoptionen deiner MySQL-Installation vorzunehmen. Diese sind identisch mit denen, die im vorherigen Abschnitt für die Installation von Vanilla MySQL 8.0 beschrieben wurden.

Installation von MariaDB 10.5

Installiere MariaDB 10.5 auf Ubuntu 20.04 LTS mit den folgenden Schritten.

Root unter Linux werden

Zuerst musst du root werden. Siehe die Anweisungen in "MySQL 8.0 installieren".

Aktualisiere das System mit dem apt Paketmanager

Stelle sicher, dass dein System auf dem neuesten Stand ist und installiere das Paket software-properties-common mit den folgendenBefehlen:

# apt update && sudo apt upgrade
# apt -y install software-properties-common

Dieses Paket enthält die gemeinsamen Dateien für Software-Eigenschaften wie das D-Bus-Backend und eine Abstraktion der verwendeten apt-Repositories.

Importiere den MariaDB GPG-Schlüssel

Führe den folgenden Befehl aus, um den Repository-Schlüssel zum System hinzuzufügen:

# apt-key adv --fetch-keys \
    'https://mariadb.org/mariadb_release_signing_key.asc'

Füge das MariaDB-Repository hinzu

Nachdem du den GPG-Schlüssel des Repositorys importiert hast, musst du das apt-Repository hinzufügen, indem du den folgenden Befehl ausführst:

# add-apt-repository \
    'deb [arch=amd64] http://mariadb.mirror.globo.tech/repo/10.5/ubuntu focal main'
Hinweis

Es gibt verschiedene Mirrors, um das MariaDB-Repository herunterzuladen. In diesem Beispiel verwenden wir http://mariadb.mirror.globo.tech.

Installiere die MariaDB 10.5 Binärdateien

Der nächste Schritt ist die Installation des MariaDB Servers:

# apt install mariadb-server mariadb-client

Prüfe, ob der Dienst läuft

Um zu überprüfen, ob der MariaDB-Dienst korrekt läuft, führe den folgenden Befehl aus:

# systemctl status mysql

Zu diesem Zeitpunkt wird MariaDB 10.5 im unsicheren Modus ausgeführt. Wenn du mysql_secure_installation ausführst, wirst du durch eine Reihe von Eingabeaufforderungen geführt, um einige Änderungen an den Sicherheitsoptionen deiner MySQL-Installation vorzunehmen. Diese sind identisch mit denen, die weiter oben in diesem Abschnitt für die Installation von vanilla MySQL 8.0 unter Ubuntu beschrieben wurden.

Installation von MySQL 5.7

Installiere MySQL 5.7 auf Ubuntu 20.04 LTS mit den folgenden Schritten.

Root unter Linux werden

Zuerst musst du root werden. Siehe die Anweisungen in "MySQL 8.0 installieren".

Aktualisiere das System mit dem apt Paketmanager

Du kannst sicherstellen, dass dein System auf dem neuesten Stand ist und das Paket software-properties-common mit dem folgenden Befehl installieren:

# apt update -y && sudo apt upgrade -y

Hinzufügen und Konfigurieren des MySQL 5.7-Repositorys

Füge das MySQL-Repository hinzu, indem du die folgenden Befehle ausführst:

# wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb
# dpkg -i mysql-apt-config_0.8.12-1_all.deb

Wähle bei der Eingabeaufforderung "ubuntu bionic", wie in Abbildung 1-1 gezeigt, und klicke auf OK.

lm2e 0101
Abbildung 1-1. Wähle "ubuntu bionic"

Die nächste Eingabeaufforderung zeigt MySQL 8.0 als Standardeinstellung(Abbildung 1-2). Wenn du diese Option ausgewählt hast, drücke die Eingabetaste.

lm2e 0102
Abbildung 1-2. Wählen Sie die Option MySQL Server & Cluster

Als nächste Option, wie in Abbildung 1-3 dargestellt, wählst du MySQL 5.7 und klickst auf OK.

lm2e 0103
Abbildung 1-3. Wählen Sie die Option MySQL 5.7

Nachdem du zum Hauptbildschirm zurückgekehrt bist, klickst du auf OK, um den Vorgang zu beenden (siehe Abbildung 1-4).

lm2e 0104
Abbildung 1-4. Zum Beenden auf OK klicken

Als nächstes musst du die MySQL-Pakete aktualisieren:

# apt-get update -y

Bestätige die Ubuntu-Richtlinie zur Installation von MySQL 5.7:

# apt-cache policy mysql-server

Überprüfe die Ausgabe, um zu sehen, welche MySQL 5.7 Version verfügbar ist:

# apt-cache policy mysql-server
mysql-server:
  Installed: (none)
  Candidate: 8.0.23-0ubuntu0.20.04.1
  Version table:
     8.0.23-0ubuntu0.20.04.1 500
        500 http://br.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages
        500 http://br.archive.ubuntu.com/ubuntu focal-security/main amd64
        Packages
     8.0.19-0ubuntu5 500
        500 http://br.archive.ubuntu.com/ubuntu focal/main amd64 Packages
     5.7.33-1ubuntu18.04 500
        500 http://repo.mysql.com/apt/ubuntu bionic/mysql-5.7 amd64 Packages

Installiere die MySQL 5.7 Binärdateien

Nachdem du sichergestellt hast, dass die Version MySQL 5.7 verfügbar ist(5.7.33-1ubuntu18.04), installiere sie:

# apt-get install mysql-client=5.7.33-1ubuntu18.04 -y
# apt-get install mysql-community-server=5.7.33-1ubuntu18.04 -y
# apt-get install mysql-server=5.7.33-1ubuntu18.04 -y

Während der Installation wirst du zur Eingabeaufforderung für das Root-Passwort aufgefordert, wie in Abbildung 1-5 dargestellt.

lm2e 0105
Abbildung 1-5. Definiere das Root-Passwort und klicke auf OK

Prüfe, ob der Dienst läuft

Um zu überprüfen, ob der MySQL 5.7-Dienst korrekt läuft, führe den folgenden Befehl aus:

# systemctl status mysql

Zu diesem Zeitpunkt hat MySQL 5.7 ein Passwort für den Root-Benutzer gesetzt. Du musst jedoch noch mysql_secure_installation ausführen, um die Kennwortrichtlinie festzulegen, den Remote-Root-Login und die anonymen Benutzer zu entfernen und die Testdatenbank zu löschen. Weitere Informationen findest du unter "Secure MySQL 8.0".

Installation von MySQL unter macOS Big Sur

MySQL für macOS ist in verschiedenen Formen erhältlich. Da MySQL meist zu Entwicklungszwecken auf macOS installiert wird, zeigen wir nur, wie man es mit dem nativen macOS-Installationsprogramm (der .dmg-Datei ) installiert. Es ist aber auch möglich, MySQL mit dem Tarball auf macOS zu installieren.

Installation von MySQL 8

Als erstes lädst du die MySQL .dmg-Datei von der MySQL-Website herunter.

Tipp

Laut Oracle funktionieren die macOS Catalina-Pakete für Big Sur.

Wenn du das Paket heruntergeladen hast, führe es aus, um den Installationsvorgang zu starten (siehe Abbildung 1-6).

lm2e 0106
Abbildung 1-6. MySQL 8.0.23 .dmg-Paket

Als Nächstes musst du die Ausführung von MySQL autorisieren, wie in Abbildung 1-7 dargestellt.

lm2e 0107
Abbildung 1-7. MySQL 8.0.23 Autorisierungsanfrage

Abbildung 1-8 zeigt den Willkommensbildschirm des Installationsprogramms.

lm2e 0108
Abbildung 1-8. MySQL 8.0.23 Startbildschirm

Abbildung 1-9 zeigt die Lizenzvereinbarung. Auch bei Open-Source-Software ist es notwendig, den Lizenzbedingungen zuzustimmen, sonst kannst du nicht weitermachen.

lm2e 0109
Abbildung 1-9. MySQL 8.0.23 Lizenzvereinbarung

Jetzt kannst du den Speicherort festlegen und die Installation anpassen, wie in Abbildung 1-10 gezeigt.

lm2e 0110
Abbildung 1-10. Anpassung der Installation von MySQL 8.0.23

Du wirst mit der Standardinstallation fortfahren. Nachdem du auf Installieren geklickt hast, wirst du möglicherweise aufgefordert, das macOS-Benutzerkennwort einzugeben, um die Installation mit höheren Rechten auszuführen, wie in Abbildung 1-11 dargestellt.

lm2e 0111
Abbildung 1-11. macOS Autorisierungsanfrage

Nach der Installation von MySQL wirst du bei der Eingabeaufforderung aufgefordert, die Passwortverschlüsselung zu wählen. Du solltest die neuere Authentifizierungsmethode (die Standardoption) verwenden, wie in Abbildung 1-12 gezeigt, die sicherer ist.

lm2e 0112
Abbildung 1-12. MySQL 8.0.23 Passwortverschlüsselung

Der letzte Schritt besteht darin, das Root-Passwort zu erstellen und MySQL zu initialisieren, wie in Abbildung 1-13 dargestellt.

lm2e 0113
Abbildung 1-13. MySQL 8.0.23 Root-Passwort

Du hast jetzt den MySQL-Server installiert, aber er ist nicht standardmäßig geladen (oder gestartet). Um ihn zu starten, öffne die Systemeinstellungen und suche nach dem MySQL-Symbol, wie in Abbildung 1-14 gezeigt.

lm2e 0114
Abbildung 1-14. MySQL in den Systemeinstellungen

Klicke auf das Symbol, um das MySQL-Panel zu öffnen. Du solltest etwas ähnliches sehen wie in Abbildung 1-15.

lm2e 0115
Abbildung 1-15. MySQL-Startoptionen

Neben der offensichtlichen Option, den MySQL-Prozess zu starten, gibt es ein Konfigurationsfenster (mit dem Speicherort der MySQL-Dateien) und eine Option zur Neuinitialisierung der Datenbank (du hast sie bereits während der Installation initialisiert). Starten Sie den MySQL-Prozess. Möglicherweise wirst du erneut nach dem Administrator-Passwort gefragt.

Wenn MySQL läuft, ist es möglich, die Verbindung zu überprüfen und zu bestätigen, dass der MySQL-Server korrekt läuft. Du kannst MySQL Workbench verwenden, um dies zu testen, oder den MySQL-Client mit brew installieren:

$ brew install mysql-client

Nachdem du den MySQL-Client installiert hast, kannst du dich mit dem Passwort verbinden, das du in Abbildung 1-13 festgelegt hast. Führe im Terminal den folgenden Befehl aus:

$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.23 MySQL Community Server - GPL

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.

Type help; or \h for help. Type \c to clear the current input statement.
mysql> SELECT @@version;
+-----------+
| @@version |
+-----------+
| 8.0.23    |
+-----------+
1 row in set (0.00 sec)

Installation von MySQL unter Windows 10

Oracle stellt einen MySQL Installer für Windows zur Verfügung die Installation erleichtern. Beachten Sie, dass der MySQL Installer eine 32-Bit-Anwendung ist, die jedoch MySQL in 32-Bit- und 64-Bit-Binärdateien installieren kann. Um den Installationsprozess zu starten, musst du die Installationsdatei ausführen und die Art der Installation auswählen, wie in Abbildung 1-16 dargestellt.

Wähle den Setup-Typ Entwickler-Standard und klicke auf Weiter. Wir gehen nicht näher auf die anderen Optionen ein, da wir die Verwendung von MySQL für Produktionssysteme nicht empfehlen, vor allem weil das MySQL-Ökosystem für Linux entwickelt wurde.

lm2e 0116
Abbildung 1-16. Anpassung der Windows-Installation von MySQL 8.0.23

Als Nächstes prüft das Installationsprogramm, ob alle Voraussetzungen erfüllt sind(Abbildung 1-17).

lm2e 0117
Abbildung 1-17. Installationsanforderungen

Klicke auf "Ausführen". Es kann notwendig sein, Microsoft Visual C++ zu installieren(Abbildung 1-18).

lm2e 0118
Abbildung 1-18. Microsoft Visual C++ installieren, falls erforderlich

Klicke auf Weiter, und das Installationsprogramm zeigt die Produkte an, die zur Installation bereit sind(Abbildung 1-19).

lm2e 0119
Abbildung 1-19. Klicke auf Ausführen, um die MySQL-Software zu installieren

Klicke auf Ausführen und du gelangst zu dem Bildschirm, auf dem du die MySQL-Eigenschaften konfigurieren kannst. Du kannst die Standardeinstellungen für TCP/IP und den X-Protokoll-Port verwenden, wie in Abbildung 1-20 gezeigt, oder du kannst sie nach Belieben anpassen.

Als Nächstes wählst du die Authentifizierungsmethode aus. Wähle die neuere Version, die sicherer ist, wie in Abbildung 1-21 dargestellt.

lm2e 0120
Abbildung 1-20. Konfigurationsoptionen für Typ und Netzwerk
lm2e 0121
Abbildung 1-21. Passwortverschlüsselung - SHA-256 basierte Passwörter verwenden

Als Nächstes gibst du das Passwort des Root-Benutzers an und gibst an, ob du weitere Benutzer zur MySQL-Datenbank hinzufügen möchtest (siehe Abbildung 1-22).

lm2e 0122
Abbildung 1-22. Benutzer konfigurieren

Wenn die Benutzer konfiguriert sind, definierst du den Namen des Dienstes und den Benutzer, der den Dienst ausführt, wie in Abbildung 1-23 gezeigt.

lm2e 0123
Abbildung 1-23. Konfigurieren des Dienstnamens

Wenn du auf Weiter klickst, beginnt das Installationsprogramm mit der Konfiguration von MySQL. Sobald das MySQL-Installationsprogramm seine Ausführung beendet hat, solltest du etwas wie in Abbildung 1-24 sehen.

lm2e 0124
Abbildung 1-24. Wenn die Installation gut gelaufen ist, gibt es keine Fehler

Jetzt ist dein Datenbankserver betriebsbereit. Da du das Entwicklerprofil ausgewählt hast, führt das Installationsprogramm die Installation des MySQL Routers durch. Der MySQL Router ist für diese Einrichtung nicht unbedingt notwendig und da wir Windows nicht für die Produktion empfehlen, überspringen wir diesen Teil. Die Details des Routers werden wir in "MySQL Router" erläutern.

Jetzt kannst du deinen Server mit MySQL Workbench validieren, wie in Abbildung 1-25 gezeigt. Du solltest eine MySQL-Verbindungsoption sehen.

lm2e 0125
Abbildung 1-25. Die Option MySQL-Verbindung in MySQL Workbench

Wenn du auf die Verbindung doppelklickst, fordert dich Workbench zur Eingabe des Passworts auf, wie in Abbildung 1-26 dargestellt.

lm2e 0126
Abbildung 1-26. Eingabe des Root-Passworts für die Verbindung

Du kannst nun MySQL auf deiner Windows-Plattform verwenden, wie in Abbildung 1-27 dargestellt.

lm2e 0127
Abbildung 1-27. Du kannst jetzt mit dem Testen deiner Umgebung beginnen

Der Inhalt des MySQL-Verzeichnisses

Während der Installation erstellt MySQL alle Dateien, die zum Starten des Servers benötigt werden. MySQL speichert seine Dateien in einem Verzeichnis namens Datenverzeichnis. Datenbankadministratoren (DBAs) bezeichnen dies üblicherweise als datadir, was der Name des MySQL-Parameters ist, der den Pfad zu diesem Verzeichnis speichert. Der Standardspeicherort für Linux-Distributionen ist /var/lib/mysql. Du kannst den Speicherort überprüfen, indem du den folgenden Befehl in der MySQL-Instanz ausführst:

mysql> SELECT @@datadir;
+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)

MySQL 5.7 Standard-Dateien

Die folgende Liste beschreibt kurz die Dateien und Unterverzeichnisse, die sich normalerweise im Datenverzeichnis befinden:

Die REDO-Logdateien

MySQL legt die Redo-Log-Dateien als ib_logfile0 und ib_logfile1 im Datenverzeichnis an. Er schreibt zirkulär in die Redo-Log-Dateien, so dass die Dateien nicht über ihre Konfigurationsgröße hinaus wachsen (konfiguriert durch innodb_log_file_size). Wie in jedem anderen relationalen Datenbankmanagementsystem (RDBMS), das ACID-konform ist, sind die Redo-Dateien von grundlegender Bedeutung für die Dauerhaftigkeit der Daten und die Fähigkeit, sich von einem Absturzszenario zu erholen.

Die Datei auto.cnf

Mit MySQL 5.6 wurde die Datei auto.cnf eingeführt. Sie hat nur einen einzigen [auto] Abschnitt, der eine einzige server_uuid Einstellung und einen Wert enthält. Die server_uuid erstellt eine eindeutige Signatur für den Server, und die Replikationsschicht verwendet sie, um mit verschiedenen Servern zu kommunizieren und Daten zu replizieren.

Warnung

MySQL erstellt bei der Initialisierung automatisch die Datei auto.cnf im data-Verzeichnis und diese Datei sollte nicht geändert werden. Wir erklären die Details in Kapitel 9.

Die *.pem-Dateien

Kurz gesagt, ermöglichen diese Dateien die Verwendung verschlüsselter Verbindungen für die Kommunikation zwischen einem Client und dem MySQL-Server. Verschlüsselte Verbindungen sind ein wesentlicher Bestandteil der Netzwerksicherheitsschicht, um unbefugten Zugriff zu verhindern, während die Daten von der Anwendung zum MySQL-Server übertragen werden. MySQL 5.7 aktiviert SSL standardmäßig und erstellt auch die Zertifikate. Es ist jedoch möglich, Zertifikate von verschiedenen Zertifizierungsstellen (CAs) auf dem Markt zu verwenden.

Das Unterverzeichnis performance_schema

Das MySQL-Leistungsschema ist eine Funktion, mit der die Ausführung des MySQL-Servers während der Laufzeit auf einer niedrigen Ebene überwacht. Wenn wir das Leistungsschema verwenden können, um eine bestimmte Kennzahl zu überwachen, sagen wir, dass MySQL über eine Instrumentierung verfügt. Die Instrumente des Leistungsschemas können zum Beispiel die Anzahl derverbundenen Benutzer anzeigen:

mysql> SELECT * FROM performance_schema.users;
+-----------------+---------------------+-------------------+
| USER            | CURRENT_CONNECTIONS | TOTAL_CONNECTIONS |
+-----------------+---------------------+-------------------+
| NULL            |                  40 |                46 |
| event_scheduler |                   1 |                 1 |
| root            |                   0 |                 1 |
| rsandbox        |                   2 |                 3 |
| msandbox        |                   1 |                 2 |
+-----------------+---------------------+-------------------+
5 rows in set (0.03 sec)
Hinweis

Viele Menschen sind überrascht, wenn sie NULL in der Spalte user sehen. Der Wert NULL wird für interne Threads oder für eine Benutzersitzung verwendet, bei der die Authentifizierung fehlgeschlagen ist. Das Gleiche gilt für die Spalte host in der Tabelle performance_schema.accounts:

mysql> SELECT user, host,
        total_connections AS cxns
    -> FROM performance_schema.accounts
        ORDER BY cxns DESC;
+-----------------+-----------+------+
| user            | host      | cxns |
+-----------------+-----------+------+
| NULL            | NULL      |   46 |
| rsandbox        | localhost |    3 |
| msandbox        | localhost |    2 |
| event_scheduler | localhost |    1 |
| root            | localhost |    1 |
+-----------------+-----------+------+
5 rows in set (0.00 sec)

Die Instrumentierung gibt es zwar schon seit MySQL 5.6, aber erst mit MySQL 5.7 wurden viele Verbesserungen vorgenommen und sie wurde zu einem grundlegenden Bestandteil der DBA-Werkzeuge, um Probleme auf MySQL-Ebene zu untersuchen und zu beheben.

Die Datei ibtmp1

Wenn die Anwendung temporäre Tabellen erstellen muss oder MySQL eine interne temporäre Tabelle auf der Festplatte verwenden muss, erstellt MySQL diese in einem gemeinsamen temporären Tablespace. Standardmäßig wird eine sich automatisch erweiternde Datendatei namens ibtmp1 erstellt, die etwas größer als 12 MB ist (ihre Größe wird durch den Parameterinnodb_temp_data_file_path gesteuert).

Die Datei ibdata1

Die Datei ibdata1 ist wahrscheinlich die bekannteste Datei im MySQL-Ökosystem. Bei MySQL 5.7 und älter enthält sie Daten für das InnoDB-Datenwörterbuch, den Doublewrite-Buffer, den Change-Buffer und die Undo-Logs. Er kann auch Tabellen- und Indexdaten enthalten, wenn wir die Optioninnodb_file_per_table deaktivieren. Wenn innodb_file_per_table aktiviert ist, hat jede Benutzertabelle einenTablespace und eine eigene Datei. Beachte, dass es möglich ist, mehrere ibdata-Dateien im MySQL-Datenverzeichnis zu haben.

Hinweis

In MySQL 8.0 wurden einige dieser Komponenten aus ibdata1 entfernt und in separate Dateien ausgelagert. Die verbleibenden Komponenten sind die Änderungspuffertabelle und die Indexdaten, wenn Tabellenim System-Tablespaceerstellt werden (durch Deaktivieren der innodb_file_per_table).

Die Datei mysql.sock

Dies ist eine Unix-Socket-Datei, die der Server für die Kommunikation mit lokalen Clients verwendet. Diese Datei existiert nur, wenn MySQL läuft. Das Entfernen oder manuelle Erstellen der Datei kann zu Problemen führen.

Hinweis

Ein Unix-Socket ist ein Mechanismus zur Kommunikation zwischen Prozessen, der den bidirektionalen Datenaustausch zwischen Prozessen ermöglicht, die auf demselben Rechner laufen. IP-Sockets (hauptsächlich TCP/IP-Sockets) sind ein Mechanismus, der die Kommunikation zwischen Prozessen über das Netzwerk ermöglicht.

Du kannst dich mit zwei Methoden mit dem MySQL-Server unter Linux verbinden: das TCP-Protokoll oder ein Socket. Wenn sich die Anwendung und MySQL auf demselben Server befinden, kannst du aus Sicherheitsgründen Remote-TCP-Verbindungen deaktivieren. Es gibt zwei Möglichkeiten, dies in MySQL Server zu tun: Setze die bind-address auf 127.0.0.1 anstelle des Standardwerts * (der TCP/IP-Verbindungen von jedem akzeptiert), oder du änderst den Parameterskip-networking , der Netzwerkverbindungen zu MySQL deaktiviert.

Das Unterverzeichnis mysql

Das Verzeichnis mysql entspricht dem MySQL-Systemschema, das die Informationen des MySQL-Servers enthält, während er läuft. Es enthält zum Beispiel Informationen über Benutzer und ihre Berechtigungen, Zeitzonentabellen und Replikation. Du kannst die Dateien, die nach ihren jeweiligen Tabellennamen benannt sind, mit dem Befehl ls einsehen:

# cd /var/lib/mysql
# ls -l mysql/

-rw-r-----. 1 vinicius.grippa percona    8820 Feb 20 15:51 columns_priv.frm
-rw-r-----. 1 vinicius.grippa percona       0 Feb 20 15:51 columns_priv.MYD
-rw-r-----. 1 vinicius.grippa percona    4096 Feb 20 15:51
columns_priv.MYI
-rw-r-----. 1 vinicius.grippa percona    9582 Feb 20 15:51 db.frm
-rw-r-----. 1 vinicius.grippa percona     976 Feb 20 15:51 db.MYD
-rw-r-----. 1 vinicius.grippa percona    5120 Feb 20 15:51 db.MYI
-rw-r-----. 1 vinicius.grippa percona      65 Feb 20 15:51 db.opt
-rw-r-----. 1 vinicius.grippa percona    8780 Feb 20 15:51 engine_cost.frm
-rw-r-----. 1 vinicius.grippa percona   98304 Feb 20 15:51 engine_cost.ibd
...
-rw-r-----. 1 vinicius.grippa percona   10816 Feb 20 15:51 user.frm
-rw-r-----. 1 vinicius.grippa percona    1292 Feb 20 15:51 user.MYD
-rw-r-----. 1 vinicius.grippa percona    4096 Feb 20 15:51 user.MYI

MySQL 8.0 Standard-Dateien

MySQL 8.0 brachte einige Änderungen im Kern der Daten Verzeichnisstruktur. Einige dieser Änderungen hängen mit der Implementierung des neuen Datenwörterbuchs zusammen, andere mit der Verbesserung der Datenbankverwaltung. Die folgende Liste beschreibt die neuen Dateien und Änderungen:

Die Undo-Tablespace-Dateien

MySQL (InnoDB) verwendet Undo-Dateien, um die Transaktionen, die zurückgenommen werden müssen, rückgängig zu machen und isolierte Transaktionen zu gewährleisten, wenn ein konsistenter Lesevorgang durchgeführt werden muss.

Ab MySQL 8.0 wurden die Undo-Log-Dateien vom System-Tablespace(ibdata1) getrennt und im Datenverzeichnis abgelegt. Es ist auch möglich, einen anderen Speicherort festzulegen, indem du den Parameterinnodb_undo_directory änderst.

Die .dblwr-Dateien (eingeführt in Version 8.0.20)

Der Doublewrite-Puffer ist dafür zuständig, Seiten aus dem Pufferpool auf die Festplatte zu schreiben, bevor MySQL die Seiten in die Datendateien schreibt. Die Doublewrite-Dateinamen haben das folgende Format: #ib_<Seitengröße>_<Dateinummer>.dblwr (zum Beispiel #ib_16384_0.dblwr, #ib_16384_0.dblwr). Es ist möglich, den Speicherort dieser Dateien zu ändern, indem du den Parameterinnodb_doublewrite_dir änderst.

Die Datei mysql.ibd (eingeführt in Version 8.0)

In MySQL 5.7 speicherten Wörterbuch- und Systemtabellen Daten und Metadaten im Verzeichnis mysql innerhalb des datadir. In MySQL 8.0 werden alle Daten in der Datei mysql.ibd gespeichert und durch die InnoDB-Mechanismen geschützt, um die Konsistenz zu gewährleisten.

Verwenden der Befehlszeilenschnittstelle

Das mysql-Binary ist eine einfache SQL-Shell mit der Möglichkeit, Eingabezeilen zu bearbeiten . Sie ist einfach zu benutzen (wir haben sie schon ein paar Mal während der Installation benutzt). Um es aufzurufen, führst du den folgenden Befehl aus:

# mysql

Wir können seine Funktionalität erweitern, indem wir Abfragen in ihm ausführen:

# mysql -uroot -pseKret -e "SHOW ENGINE INNODB STATUS\G"

Außerdem können wir fortgeschrittenere Befehle ausführen und sie mit anderen Befehlen verknüpfen, um komplexere Aufgaben zu erledigen. Wir können zum Beispiel einen Dump aus einerDatenbank extrahieren, ihn über das Netzwerk senden und ihn in derselben Befehlszeile auf einem anderen MySQL-Server wiederherstellen:

# mysql -e "SHOW MASTER STATUS\G" && nice -5 mysqldump \
    --all-databases --single-transaction -R --master-data=2 --flush-logs \
    --log-error=/tmp/donor.log --verbose=TRUE | ssh mysql@192.168.0.1 mysql \
    1> /tmp/receiver.log 2>&1

Mit MySQL 8.0 wurde die MySQL Shell eingeführt, die weitaus leistungsfähiger ist als ihre Vorgängerin. MySQL Shell unterstützt die Sprachen JavaScript, Python und SQL und bietet Entwicklungs- und Verwaltungsfunktionen für den MySQL-Server. In "MySQL Shell" gehen wir näher darauf ein.

Docker verwenden

Mit dem Aufkommen der Virtualisierung und ihrer Popularisierung mit Cloud-Diensten sind viele Plattformen entstanden, darunter auch Docker. Docker wurde 2013 ins Leben gerufen und ist eine Lösung, die eine portable und flexible Möglichkeit zur Bereitstellung von Software bietet. Durch die Nutzung von Linux-Funktionen wie cgroups und Namensräumen im Kernel können Ressourcen isoliert werden.

Docker ist nützlich für DBAs, die oft eine bestimmte Version von MySQL, MariaDB oder Percona Server for MySQL installieren müssen, um einige Experimente durchzuführen. Mit Docker ist es möglich, eine MySQL-Instanz in Sekundenschnelle bereitzustellen, um einige Tests durchzuführen. Sobald du die Tests abgeschlossen hast, kannst du die Instanz zerstören und die Ressourcen des Betriebssystems für andere Aufgaben freigeben. Die Bereitstellung einer virtuellen Maschine (VM), die Installation von Paketen und die Konfiguration der Datenbank sind bei der Verwendung von Docker einfacher.

Docker installieren

Ein Vorteil der Verwendung von Docker ist, dass die Befehle auf allen Betriebssystemen gleich sind, sobald der Dienst ausgeführt wird. Da die Befehle gleich sind, ist die Lernkurve für die Verwendung von Docker schneller, als wenn du verschiedene Linux-Versionen wie CentOS und Ubuntu lernst.

Die Installation von Docker ist in mancher Hinsicht ähnlich wie die Installation von MySQL. Unter Windows und macOS installierst du einfach die Binärdateien, und danach ist der Dienst einsatzbereit. Bei Linux-basierten Betriebssystemen ohne grafische Oberfläche muss das Repository konfiguriert werden.

Installation von Docker auf CentOS 7

Die CentOS-Pakete für Docker sind in der Regel älter als die Pakete, die für RHEL und in den offiziellen Docker-Repositories verfügbar sind. Zum Zeitpunkt der Erstellung dieses Buches ist die Docker-Version, die von den regulären CentOS-Repositories bereitgestellt wird, 1.13.1, während dieUpstream-Stable-Version 20.10.3 ist. Für die Zwecke dieses Buches gibt es keinen Unterschied, aber wir empfehlen, für Produktionsumgebungen immer die neueste Version zu verwenden.

Führe den folgenden Befehl aus, um das Docker-Paket aus dem Standard-Repository von CentOS zu installieren:

# yum install docker -y

Wenn du Docker aus dem Upstream-Repository installieren möchtest, um sicherzustellen, dass du die neueste Version verwendest, befolge diese Schritte:

  1. Installiere yum-utils, um den Befehl yum-config-manager zu aktivieren:

    # yum install yum-utils -y
  2. Verwende yum-config-manager, um das docker-ce Repository hinzuzufügen:

    # yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
  3. Installiere die notwendigen Pakete:

    # yum install docker-ce docker-ce-cli containerd.io -y
  4. Starte den Docker-Dienst:

    # systemctl start docker
  5. Aktiviere den Docker-Dienst, damit er nach einem Neustart des Systems automatisch gestartet wird:

    # systemctl enable --now docker
  6. Um zu überprüfen, ob der Docker-Dienst läuft, führe den Befehl systemctl status aus:

    # systemctl status docker
  7. Um zu überprüfen, ob die Docker Engine richtig installiert ist, kannst du den hello-world-Container ausführen:

    # docker run hello-world

Installation von Docker unter Ubuntu 20.04 (Focal Fossa)

Um die neueste Docker-Version aus dem Upstream-Repository zu installieren, musst du zunächst alle älteren Versionen von Docker (genannt docker, docker.io oder docker-engine) entfernen. Deinstalliere sie mit diesem Befehl:

# apt-get remove -y docker docker-engine docker.io containerd runc

Nachdem das Standard-Repository entfernt wurde, kannst du den Installationsprozess starten:

  1. Stelle sicher, dass Ubuntu mit diesem Befehl auf dem neuesten Stand ist:

    # apt-get update -y
  2. Installiere Pakete, damit apt ein Repository über HTTPS verwenden kann:

    # apt-get install -y \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg-agent \
        software-properties-common
  3. Als nächstes fügst du den offiziellen GPG-Schlüssel von Docker hinzu:

    # curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo \
        apt-key add -
  4. Wenn der Schlüssel vorhanden ist, füge das Docker Stable Repository hinzu:

    # add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       $(lsb_release -cs) \
       stable"
  5. Verwende nun den Befehl apt, um die Docker-Pakete zu installieren:

    # apt-get install -y docker-ce docker-ce-cli containerd.io
  6. Ubuntu wird den Dienst für dich starten, aber du kannst das mit diesem Befehl überprüfen:

    # systemctl status docker
  7. Um den Docker-Dienst beim Neustart des Betriebssystems automatisch zu starten, verwende:

    # systemctl enable --now docker
  8. Überprüfe die Docker-Version, mit der du installiert hast:

    # docker --version
  9. Um zu überprüfen, ob die Docker Engine richtig installiert ist, kannst du den hello-world-Container ausführen:

    # docker run hello-world

Einsetzen des MySQL-Containers

Sobald du die Docker Engine installiert hast und sie läuft, ist der nächste Schritt die Bereitstellung des MySQL-Docker-Containers.

Warnung

Wir haben die folgenden Anweisungen entwickelt, um eine Testinstanz schnell und einfach zum Laufen zu bringen; verwende sie nicht für einenProduktionseinsatz!

Um die neueste MySQL-Version mit Docker zu installieren, führe diesen Befehl aus:

# docker run --name mysql-latest \
  -p 3306:3306 -p 33060:33060 \
  -e MYSQL_ROOT_HOST=% -e
  MYSQL_ROOT_PASSWORD='learning_mysql' \
  -d mysql/mysql-server:latest

Die Docker Engine startet die neueste Version der MySQL-Instanz und ist mit dem angegebenen Root-Passwort von überall aus erreichbar. Die Installation von MySQL mit Docker bedeutet, dass du keinen Zugang zu den Werkzeugen, Dienstprogrammen oder Standardbibliotheken hast, die auf einem herkömmlichen Host (Bare Metal oder VM) verfügbar sind. Du musst diese Werkzeuge entweder separat installieren oder die Befehle verwenden, die mit dem Docker-Image geliefert werden, wenn du sie brauchst.

Als nächstes verbindest du dich mit dem MySQL-Client mit dem MySQL-Container:

# docker exec -it mysql-latest mysql -uroot -plearning_mysql

Da du den TCP-Port 3306 im Container mit dem Parameter -p 3306:3306 auf den Port 3306 auf dem Docker-Host gemappt hast, kannst du dich von jedem verfügbaren MySQL-Client (Workbench, MySQL Shell), der den Host (Hostname oder IP) und diesen Port erreichen kann, mit der MySQL-Datenbank verbinden.

Schauen wir uns ein paar Befehle an, um den Container zu verwalten.

Um den MySQL-Docker-Container zu stoppen, führe aus:

# docker stop mysql-latest

Versuche nicht, den Container mit docker run neu zu starten. Verwende stattdessen dies:

# docker start mysql-latest

Um ein Problem zu untersuchen, z.B. wenn der Container nicht startet, kannst du mit diesem Befehl auf die Logs zugreifen:

# docker logs mysql-latest

Um den Docker-Container zu entfernen, den du erstellt hast, führe aus:

# docker stop mysql-latest
# docker rm mysql-latest

Um zu überprüfen, welche und wie viele Docker-Container auf dem Host laufen, verwende:

# docker ps

Es ist möglich, die MySQL-Parametrisierung mithilfe von Kommandozeilenoptionen für die Docker Engine anzupassen. Um die Größe des InnoDB-Pufferpools und die Flush-Methode zu konfigurieren, führst du Folgendes aus:

# docker run --name mysql-latest \
  -p 3306:3306 -p 33060:33060  \
  -e MYSQL_ROOT_HOST=% -e
  MYSQL_ROOT_PASSWORD='strongpassword' \
  -d mysql/mysql-server:latest \
  --innodb_buffer_pool_size=256M \
  --innodb_flush_method=O_DIRECT

Wenn du eine andere als die neueste MySQL-Version verwenden möchtest, überprüfe zunächst, ob sie in Docker Hub verfügbar ist. Nehmen wir an, du möchtest MySQL 5.7.31 verwenden. Der erste Schritt besteht darin, in der offiziellen Liste der MySQL-Docker-Images in Docker Hub nachzusehen, ob sie vorhanden ist.

Sobald du seine Existenz bestätigt hast, führe ihn mit dem folgenden Befehl aus:

# docker run --name mysql-5.7.31 \
  -p 3307:3306 -p 33061:33060  \
  -e MYSQL_ROOT_HOST=% -e \
  MYSQL_ROOT_PASSWORD='learning_mysql' \
  -d mysql/mysql-server:5.7.31

Es ist möglich, mehrere MySQL-Docker-Instanzen gleichzeitig zu betreiben, aber ein mögliches Problem sind TCP-Port-Konflikte. Im vorherigen Beispiel haben wir verschiedene Host-Ports für den mysql-5.7.31-Container zugewiesen (3307 und 33061). Außerdem muss der Name des Containers eindeutig sein.

Bereitstellung von MariaDB- und Percona Server-Containern

Du befolgst die gleichen Schritte, die im vorherigen Abschnitt für Bereitstellung eines MySQL-Containers beschrieben wurden, um einen MariaDB- oder Percona Server-Container bereitzustellen. Der Hauptunterschied besteht darin, dass sie unterschiedliche Docker-Images verwenden und ihre eigenen offiziellen Repositories haben.

Um einen MariaDB-Container bereitzustellen, führe aus:

# docker run --name maria-latest \
  -p 3308:3306 \
  -e MYSQL_ROOT_HOST=% -e \
  MYSQL_ROOT_PASSWORD='learning_mysql' \
  -d mariadb:latest

Und für Percona Server, führe aus:

# docker run --name ps-latest \
  -p 3309:3306 -p 33063:33060 \
  -e MYSQL_ROOT_HOST=% -e \
  MYSQL_ROOT_PASSWORD='learning_mysql' \
  -d percona/percona-server:latest \
  --innodb_buffer_pool_size=256M \
  --innodb_flush_method=O_DIRECT
Hinweis

Wir ordnen unterschiedliche Ports für MariaDB (-p 3308:3306) und Percona (-p 3309:3306) zu, da wir alle Container auf demselben Host bereitstellen:

# docker ps
CONTAINER ID            IMAGE
5e487dd41c3e            percona/percona-server:latest

COMMAND                 CREATED           STATUS
"/docker-entrypoint..." About a minute ago Up 51 seconds
"docker-entrypoint..."  2 minutes ago      Up 2 minutes

PORTS                   NAMES
0.0.0.0:3309->3306/tcp, ps-latest
0.0.0.0:33063->33060/tcp
f5a217f1537b            mariadb:latest
0.0.0.0:3308->3306/tcp  maria-latest

Wenn du einen einzelnen Container bereitstellst, kannst du Port 3306 oder jeden anderen Port verwenden, den du verwenden möchtest.

Sandkästen verwenden

In der Softwareentwicklung ist eine Sandbox eine Testumgebung, die Codeänderungen isoliert und Experimente und Tests ermöglicht, bevor sie in der Produktion eingesetzt wird. DBAs nutzen Sandboxen vor allem zum Testen neuer Softwareversionen, für Leistungstests und zur Fehleranalyse, und die in MySQL vorhandenen Daten sind Einwegartikel.

Hinweis

Im Zusammenhang mit MySQL-Datenbanken hört man häufig die Begriffe Master und Slave. Die Ursprünge dieser Begriffe sind eindeutig negativ. Oracle, Percona und MariaDB haben daher beschlossen, diese Begriffe zu ändern und stattdessen Quelle und Replikat zu verwenden. In diesem Buch werden wir beide Begriffe verwenden, weil du auf beide Begriffe stoßen wirst, aber sei dir bewusst, dass diese Unternehmen in den kommenden Versionen die folgende Terminologie einführen werden:

Alte

Neu

Meister

Quelle

Sklave

Replikat

Schwarze Liste

Blockliste

Whitelist

allowlist

2018 stellte Giuseppe Maxia den DBdeployer vor, ein Tool, das eine einfache und schnelle Möglichkeit bietet, MySQL und seine Forks zu verteilen. Es unterstützt verschiedene MySQL-Topologien wie Master/Slave (Quelle/Replikat), Master/Master (Quelle/Quelle), Galera Cluster und Group Replication.

Installieren von DBdeployer

Das Tool wurde in der Sprache Go entwickelt und funktioniert mit macOS und Linux (Ubuntu und CentOS), und es werden eigenständige ausführbare Dateien bereitgestellt. Hol dir die neueste Version hier:

# wget https://github.com/datacharmer/dbdeployer/releases/download/v1.58.2/ \
    dbdeployer-1.58.2.linux.tar.gz
# tar -xvf dbdeployer-1.58.2.linux.tar.gz
# mv dbdeployer-1.58.2.linux /usr/local/bin/dbdeployer

Wenn du dein Verzeichnis /usr/local/bin/ in der Variable $PATH hast, solltest du jetzt in der Lage sein, die Befehle dbdeployer auszuführen:

# dbdeployer --version
dbdeployer version 1.58.2

DBdeployer verwenden

Der erste Schritt bei der Verwendung von DBdeployer besteht darin, die MySQL-Binärdatei herunterzuladen, die du ausführen möchtest, und sie in das Verzeichnis zu entpacken, in dem du deine Binärdateien speicherst. Wir werden Linux - Generic tarballs verwenden, da sie mit den meisten Linux-Distributionen kompatibel sind, und wir werden unsere Binärdateien im Verzeichnis /opt/mysql speichern:

# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/ \
    mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz
# mkdir /opt/mysql
# dbdeployer --sandbox-binary=/opt/mysql/ unpack \
    mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz

Der Befehl unpack entpackt und verschiebt die Dateien in das angegebene Verzeichnis. Die erwartete Ausgabe dieses Vorgangs ist:

# dbdeployer --sandbox-binary=/opt/mysql/ unpack
mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz
Unpacking tarball mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz to
/opt/mysql/8.0.11
.........100.........200........289
Renaming directory /opt/mysql/mysql-8.0.11-linux-glibc2.12-x86_64 to
/opt/mysql/8.0.11

Wir können nun den folgenden Befehl verwenden, um eine neue eigenständige MySQL-Sandbox mit der neu extrahierten Binärdatei zu erstellen:

# dbdeployer --sandbox-binary=/opt/mysql/ deploy single 8.0.11

Und wir können beobachten, wie DBdeployer MySQL initialisiert:

# dbdeployer --sandbox-binary=/opt/mysql/ deploy single 8.0.11
Creating directory /root/sandboxes
Database installed in $HOME/sandboxes/msb_8_0_11
run 'dbdeployer usage single' for basic instructions'
. sandbox server started

Bestätige mit dem Befehl ps, dass MySQL läuft:

# ps -ef | grep mysql
root      4249     1  0 20:18 pts/0    00:00:00 /bin/sh bin/mysqld_safe
--defaults-file=/root/sandboxes/msb_8_0_11/my.sandbox.cnf
root      4470  4249  1 20:18 pts/0    00:00:00 /opt/mysql/8.0.11/bin/mysqld
--defaults-file=/root/sandboxes/msb_8_0_11/my.sandbox.cnf
--basedir=/opt/mysql/8.0.11 --datadir=/root/sandboxes/msb_8_0_11/data
--plugin-dir=/opt/mysql/8.0.11/lib/plugin --user=root
--log-error=/root/sandboxes/msb_8_0_11/data/msandbox.err
--pid-file=/root/sandboxes/msb_8_0_11/data/mysql_sandbox8011.pid
--socket=/tmp/mysql_sandbox8011.sock --port=8011
root      4527  3836  0 20:18 pts/0    00:00:00 grep --color=auto mysql

Jetzt können wir uns mit dem Befehl use von DBdeployer mit MySQL verbinden:

# cd sandboxes/msb_8_0_11/
# ./use

oder mit den standardmäßigen Root-Anmeldedaten:

# mysql -uroot -pmsandbox -h 127.0.0.1 -P 8011
Hinweis

Die Portinformationen haben wir aus dem vorherigen Befehl ps. Erinnere dich daran, dass es zwei Möglichkeiten gibt, sich mit MySQL zu verbinden: über TCP/IP oder über einen Socket. Wir können auch den Speicherort der Socket-Datei aus der Ausgabe des Befehls ps entnehmen und uns damit verbinden, wie hier gezeigt:

# mysql -uroot -pmsandbox -S/tmp/mysql_sandbox8011.sock

Wenn wir eine Replikat-Umgebung mit einer Quell-/Replikat-Topologie einrichten wollen, können wir das mit der folgenden Befehlszeile tun:

# dbdeployer --sandbox-binary=/opt/mysql/ deploy replication 8.0.11

Und wir werden drei mysqld Prozesse laufen haben:

# ps -ef | grep mysql
root      4673     1  0 20:26 pts/0    00:00:00 /bin/sh bin/mysqld_safe
--defaults-file=/root/sandboxes/rsandbox_8_0_11/master/my.sandbox.cnf
root      4942  4673  1 20:26 pts/0    00:00:00
/opt/mysql/8.0.11/bin/mysqld
...
--pid-file=/root/sandboxes/rsandbox_8_0_11/master/data/mysql_sandbox201
12.pid --socket=/tmp/mysql_sandbox20112.sock --port=20112

root      5051     1  0 20:26 pts/0    00:00:00 /bin/sh bin/mysqld_safe
--defaults-file=/root/sandboxes/rsandbox_8_0_11/node1/my.sandbox.cnf
root      5320  5051  1 20:26 pts/0    00:00:00
/opt/mysql/8.0.11/bin/mysqld
--defaults-file=/root/sandboxes/rsandbox_8_0_11/node1/my.sandbox.cnf
...
--pid-file=/root/sandboxes/rsandbox_8_0_11/node1/data/mysql_sandbox2011
3.pid --socket=/tmp/mysql_sandbox20113.sock --port=20113

root      5415     1  0 20:26 pts/0    00:00:00 /bin/sh bin/mysqld_safe
--defaults-file=/root/sandboxes/rsandbox_8_0_11/node2/my.sandbox.cnf
root      5684  5415  1 20:26 pts/0    00:00:00
/opt/mysql/8.0.11/bin/mysqld
...
--pid-file=/root/sandboxes/rsandbox_8_0_11/node2/data/mysql_sandbox2011
4.pid --socket=/tmp/mysql_sandbox20114.sock --port=20114

Eine weitere Topologie, die DBdeployer konfigurieren kann, ist die Gruppenreplikation. Für dieses Beispiel definieren wir eine base-port. Damit weisen wir DBdeployer an, unsere Server ab Port 49007 zu konfigurieren:

# dbdeployer deploy --topology=group replication --sandbox-binary=/opt/mysql/\
    8.0.11 --base-port=49007

Sehen wir uns nun ein Beispiel für den Einsatz von Galera Cluster mit Percona XtraDB Cluster 5.7.32 an. Wir geben die base-port an und wollen unsere Knoten mit der Optionlog-slave-updates konfigurieren:

# wget https://downloads.percona.com/downloads/Percona-XtraDB-Cluster-57/\
    Percona-XtraDB-Cluster-5.7.32-31.47/binary/tarball/Percona-XtraDB-Cluster-\
    5.7.32-rel35-47.1.Linux.x86_64.glibc2.17-debug.tar.gz
# dbdeployer --sandbox-binary=/opt/mysql/ unpack\
    Percona-XtraDB-Cluster-5.7.32-rel35-47.1.Linux.x86_64.glibc2.17-debug.tar.gz
# dbdeployer deploy --topology=pxc replication\
    --sandbox-binary=/opt/mysql/ 5.7.32 --base-port=45007 -c log-slave-updates

Wie wir gesehen haben, ist es möglich, die MySQL-Parameter anzupassen. Eine interessante Option ist die Aktivierung der MySQL-Replikation mit globalen Transaktionsbezeichnern(GTIDs) (wir werden in Kapitel 13 näher auf GTIDs eingehen):

# dbdeployer deploy replication --sandbox-binary=/opt/mysql/ 5.7.32 --gtid

Unser letztes Beispiel zeigt, dass es möglich ist, mehrere Standalone-Versionen auf einmal einzusetzen - hier erstellen wir fünf Standalone-Instanzen:

# dbdeployer deploy multiple --sandbox-binary=/opt/mysql/ 5.7.32 -n 5

Die vorangegangenen Beispiele sind nur ein kleiner Ausschnitt aus den Möglichkeiten von DBdeployer. Die vollständige Dokumentation ist auf GitHub verfügbar. Eine andere Möglichkeit, das Universum der Möglichkeiten zu verstehen, ist die Verwendung von --help in der Kommandozeile:

# dbdeployer --help
dbdeployer makes MySQL server installation an easy task.
Runs single, multiple, and replicated sandboxes.

Usage:
  dbdeployer [command]

Available Commands:
  admin           sandbox management tasks
  cookbook        Shows dbdeployer samples
  defaults        tasks related to dbdeployer defaults
  delete          delete an installed sandbox
  delete-binaries delete an expanded tarball
  deploy          deploy sandboxes
  downloads       Manages remote tarballs
  export          Exports the command structure in JSON format
  global          Runs a given command in every sandbox
  help            Help about any command
  import          imports one or more MySQL servers into a sandbox
  info            Shows information about dbdeployer environment samples
  sandboxes       List installed sandboxes
  unpack          unpack a tarball into the binary directory
  update          Gets dbdeployer newest version
  usage           Shows usage of installed sandboxes
  versions        List available versions

Flags:
      --config string           configuration file (default
                                "/root/.dbdeployer/config.json")
  -h, --help                    help for dbdeployer
      --sandbox-binary string   Binary repository (default
                                "/root/opt/mysql")
      --sandbox-home string     Sandbox deployment directory (default
                                "/root/sandboxes")
      --shell-path string       Which shell to use for generated
                                scripts (default "/usr/bin/bash")
      --skip-library-check      Skip check for needed libraries (may
                                cause nasty errors)
      --version                 version for dbdeployer

Use "dbdeployer [command] --help" for more information about a command.

Upgrade des MySQL-Servers

Wenn die häufigste Frage, die auftaucht, die nach der Replikation ist, die zweithäufigste ist, wie man eine MySQL-Instanz aktualisiert. Wenn das Verfahren nicht gut getestet ist, bevor es in der Produktion durchgeführt wird, ist die Wahrscheinlichkeit eines Problems hoch. Es gibt zwei Arten von Upgrades, die du durchführen kannst:

  • Ein Major Upgrade in MySQL wäre ein Versionswechsel von 5.6 auf 5.7 oder 5.7 auf 8.0. Ein solches Upgrade ist schwieriger und komplexer als ein Minor Upgrade, weil die Änderungen an der Architektur umfangreicher sind. Eine wesentliche Änderung in MySQL 8.0 war zum Beispiel die Änderung des Datenwörterbuchs, das jetzt transaktional ist und von InnoDB gekapselt wird.

  • Ein kleineres Upgrade wäre der Wechsel von MySQL 5.7.29 auf 5.7.30 oder von MySQL 8.0.22 auf MySQL 8.0.23. In den meisten Fällen musst du die neue Version über den Paketmanager deiner Distribution installieren. Ein Minor-Upgrade ist einfacher als ein Major-Upgrade, da es keine Änderungen an der Architektur beinhaltet. Die Änderungen konzentrieren sich darauf, Fehler zu beheben, die Leistung zu verbessern und den Code zu optimieren.

Um mit der Planung eines Upgrades zu beginnen, wähle zunächst zwischen zwei Strategien. Das sind die in der Dokumentation empfohlenen Strategien, die auch wir verwenden:

In-place Upgrade

Dazu wird MySQL heruntergefahren, die alten MySQL-Binärdateien oder -Pakete durch die neuen ersetzt, MySQL im bestehenden Datenverzeichnis neu gestartet und mysql_upgrade ausgeführt.

Hinweis

Seit MySQL 8.0.16 ist die mysql_upgrade-Binärdatei veraltet und der MySQL-Server selbst führt ihre Funktionalität aus (du kannst es dir als "Server-Upgrade" vorstellen). MySQL hat diese Änderung zusammen mit dem Data-Dictionary-Upgrade (DD-Upgrade) eingeführt, einem Prozess zur Aktualisierung der Data-Dictionary-Tabellendefinitionen. Die Vorteile des neuen Prozesses sind:

  • Schnellere Upgrades

  • Einfacher Prozess

  • Bessere Sicherheit

  • Deutliche Reduzierung der Upgrade-Schritte

  • Leichter zu automatisieren

  • Keine Neustarts

  • Plug and Play

Logisches Upgrade

Dazu müssen die Daten im SQL-Format aus der alten MySQL-Version mit einem Backup- oder Exportprogramm wie mysqldump oder mysqlpump exportiert, die neue MySQL-Version installiert und die SQL-Daten auf die neue MySQL-Version übertragen werden. Mit anderen Worten: Bei diesem Prozess werden das gesamte Datenverzeichnis und die Benutzerdaten neu erstellt. Ein logisches Upgrade dauert normalerweise länger als ein In-Place-Upgrade.

Unabhängig von der von dir gewählten Strategie ist es wichtig, eine Rollback-Strategie für den Fall festzulegen, dass etwas schief geht. Die Rollback-Strategie hängt von dem gewählten Upgrade-Plan ab. Die Größe der Datenbank und die vorhandene Topologie (z. B. Replikate oder Galera Cluster) beeinflussen diese Entscheidung.

Hier sind einige zusätzliche Punkte, die du bei der Planung eines Upgrades berücksichtigen solltest:

  • Ein Upgrade von MySQL 5.7 auf 8.0 wird unterstützt. Allerdings wird das Upgrade nur zwischen GA-Versionen unterstützt. Für MySQL 8.0 ist es erforderlich, dass du ein Upgrade von einer MySQL 5.7 GA-Version (5.7.9 oder höher) durchführst. Upgrades von Nicht-GA-Versionen von MySQL 5.7 werden nicht unterstützt.

  • Es wird empfohlen, auf die neueste Version zu aktualisieren, bevor du auf die nächste Version aktualisierst. Aktualisiere zum Beispiel auf die neueste Version von MySQL 5.7, bevor du auf MySQL 8.0 aktualisierst.

  • Upgrades, bei denen Versionen übersprungen werden, werden nicht unterstützt. Ein direktes Upgrade von MySQL 5.6 auf 8.0 wird zum Beispiel nicht unterstützt.

Hinweis

Unserer Erfahrung nach ist der Wechsel von MySQL 5.6 auf MySQL 5.7 das Upgrade, das die meisten Leistungsprobleme verursacht, vor allem wenn die Anwendung abgeleitete Tabellen verwendet (siehe "Verschachtelte Abfragen in der FROM-Klausel"). MySQL 5.7 hat die Systemvariableoptimizer_switch geändert und die Einstellungderived_merge standardmäßig aktiviert, was die Abfrageleistung beeinträchtigen kann.

Eine weitere komplizierte Änderung ist, dass MySQL 5.7 standardmäßig eine Netzwerkverschlüsselung (SSL) implementiert. Anwendungen, die in MySQL 5.6 noch nicht mit SSL arbeiteten, können einen erheblichen Leistungsabfall erleiden.

Mit MySQL 5.7 wurde der sync_binlog Standard auf den synchronen Modus. Dieser Modus ist der sicherste, kann aber aufgrund der höheren Anzahl von Schreibvorgängen auf der Festplatte die Leistung beeinträchtigen.

Lass uns ein Beispiel für ein Upgrade von MySQL 5.7 Upstream auf MySQL 8.0 Upstream mit der In-Place-Methode durchgehen:

  1. Beende den MySQL-Dienst. Führe einen sauberen Shutdown mit systemctl durch:

    # systemctl stop mysqld
  2. Entferne die alten Binärdateien:

      # yum erase mysql-community -y

    Dieser Vorgang entfernt nur die Binärdateien und berührt nicht das datadir (siehe "Der Inhalt des MySQL-Verzeichnisses").

  3. Befolge die regulären Schritte für den Installationsprozess (siehe "Installation von MySQL unter Linux"). Um zum Beispiel MySQL 8.0 Community Version auf CentOS 7 mit yum zu verwenden:

    # yum-config-manager --enable mysql80-community
  4. Installiere die neuen Binärdateien:

    # yum install mysql-community-server -y
  5. Starte den MySQL-Dienst:

    # systemctl start mysqld

In den Protokollen können wir sehen, dass MySQL das Datenwörterbuch aktualisiert hat und dass wir jetzt MySQL 8.0.21 verwenden:

# tail -f /var/log/mysqld.log
2020-08-09T21:20:10.356938Z 2 [System] [MY-011003] [Server] Finished
populating Data Dictionary tables with data.
2020-08-09T21:20:11.734091Z 5 [System] [MY-013381] [Server] Server
upgrade from '50700' to '80021' started.
2020-08-09T21:20:17.342682Z 5 [System] [MY-013381] [Server] Server
upgrade from '50700' to '80021' completed.
...
2020-08-09T21:20:17.463685Z 0 [System] [MY-010931] [Server]
/usr/sbin/mysqld: ready for connections. Version: '8.0.21'  socket:
'/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server - GPL.
Hinweis

Wir empfehlen dir dringend, vor dem Upgrade von MySQL die Versionshinweise zu lesen. Sie enthalten eine Zusammenfassung der vorgenommenen Änderungen und der Fehlerbehebungen. Die Versionshinweise sind für MySQL Upstream, Percona Server und MariaDB verfügbar.

Eine häufige Frage ist, ob es sicher ist, auf die neueste Hauptversion zu aktualisieren. Die Antwort ist: Es kommt darauf an. Wie bei jedem neuen Produkt in der Branche profitieren die Early Adopters von den neuen Funktionen, aber sie sind auch Tester und können neue Fehler entdecken und davon betroffen sein. Als MySQL 8.0 veröffentlicht wurde, lautete unsere Empfehlung, drei kleinere Versionen abzuwarten, bevor man einen Wechsel in Betracht zieht. Die goldene Regel dieses Buches lautet: Teste alles im Voraus, bevor du den nächsten Schritt ausführst. Wenn du genau das aus diesem Buch lernst, betrachten wir unsere Mission als erfüllt.

Get MySQL lernen, 2. Auflage now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.