Einrichten einer entfernten Datenbank zur Optimierung der Site-Leistung mit MySQL unter Ubuntu 18.04

Einführung

Wenn Ihre Anwendung oder Website wächst, kann es vorkommen, dass Sie aus Ihrer aktuellen Serverkonfiguration herausgewachsen sind. Wenn Sie Ihren Webserver und das Datenbank-Backend auf demselben Computer hosten, ist es möglicherweise eine gute Idee, diese beiden Funktionen zu trennen, damit jede auf ihrer eigenen Hardware ausgeführt werden kann und die Last der Beantwortung der Anforderungen Ihrer Besucher aufteilt.

In diesem Handbuch wird erläutert, wie Sie einen Remote-MySQL-Datenbankserver konfigurieren, mit dem Ihre Webanwendung eine Verbindung herstellen kann. Wir werden WordPress als Beispiel verwenden, um etwas zum Arbeiten zu haben, aber die Technik ist auf jede Anwendung, die von MySQL unterstützt wird, weithin anwendbar.

Voraussetzungen

Bevor Sie mit diesem Tutorial beginnen, benötigen Sie:

  • Zwei Ubuntu 18.04 Server. Jeder Benutzer sollte einen Nicht-Root-Benutzer mit Sudo-Berechtigungen und einer aktivierten UFW-Firewall haben, wie in unserem Tutorial zuInitial Server Setup with Ubuntu 18.04beschrieben. Auf einem dieser Server wird Ihr MySQL-Backend gehostet, und in diesem Handbuch wird es alsdatabase server bezeichnet. Der andere stellt eine Remoteverbindung zu Ihrem Datenbankserver her und fungiert als Webserver. Ebenso werden wir es im Verlauf dieses Handbuchs alsweb server bezeichnen.

  • Nginx und PHP habenon your web server installiert. Unser TutorialHow To Install Linux, Nginx, MySQL, PHP (LEMP stack) in Ubuntu 18.04 führt Sie durch den Prozess. Beachten Sie jedoch, dass Sie Schritt 2 dieses Tutorials überspringen sollten, das sich auf die Installation von MySQL konzentriert, da Sie MySQL auf Ihrem Datenbankserver installieren.

  • MySQL haton your database server installiert. Folgen SieHow To Install MySQL on Ubuntu 18.04, um dies einzurichten.

  • Optional (aber dringend empfohlen) werden TLS / SSL-Zertifikate von Let's Encrypton your web server installiert. Sie müssen einen Domainnamen erwerben undDNS records set up for your serverhaben, aber die Zertifikate selbst sind kostenlos. Unser LeitfadenHow To Secure Nginx with Let’s Encrypt on Ubuntu 18.04 zeigt Ihnen, wie Sie diese Zertifikate erhalten.

[[Schritt-1 - Konfigurieren von MySQL zum Abhören von Remoteverbindungen]] == Schritt 1 - Konfigurieren von MySQL zum Abhören von Remoteverbindungen

Das Speichern der eigenen Daten auf einem separaten Server ist eine gute Möglichkeit, die Leistung nach Erreichen der Leistungsgrenze einer Ein-Computer-Konfiguration ordnungsgemäß zu erweitern. Es bietet auch die grundlegende Struktur, die erforderlich ist, um den Lastenausgleich und die Erweiterung Ihrer Infrastruktur zu einem späteren Zeitpunkt noch weiter voranzutreiben. Nach der Installation von MySQL müssen Sie einige Konfigurationswerte ändern, um Verbindungen von anderen Computern zuzulassen.

Die meisten Konfigurationsänderungen des MySQL-Servers können in der Dateimysqld.cnfvorgenommen werden, die standardmäßig im Verzeichnis/etc/mysql/mysql.conf.d/gespeichert ist. Öffnen Sie diese Datei auf Ihremdatabase server mit Root-Rechten in Ihrem bevorzugten Editor. Hier verwenden wirnano:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Diese Datei ist in Abschnitte unterteilt, die durch Beschriftungen in eckigen Klammern ([ und]) gekennzeichnet sind. Suchen Sie den Abschnitt mit der Bezeichnungmysqld:

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
[mysqld]
. . .

Suchen Sie in diesem Abschnitt nach einem Parameter namensbind-address. Dies teilt der Datenbanksoftware mit, welche Netzwerkadresse auf Verbindungen überwacht werden soll.

Standardmäßig ist dies auf127.0.0.1 eingestellt, was bedeutet, dass MySQL so konfiguriert ist, dass nur nach lokalen Verbindungen gesucht wird. Sie müssen dies ändern, um auf die IP-Adresse vonexternalzu verweisen, unter der Ihr Server erreichbar ist.

Wenn sich beide Server in einem Rechenzentrum mit privaten Netzwerkfunktionen befinden, verwenden Sie die private Netzwerk-IP Ihres Datenbankservers. Andernfalls können Sie die öffentliche IP-Adresse verwenden:

/etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
. . .
bind-address = db_server_ip

Da Sie über das Internet eine Verbindung zu Ihrer Datenbank herstellen, wird empfohlen, dass Sie verschlüsselte Verbindungen benötigen, um Ihre Daten zu schützen. Wenn Sie Ihre MySQL-Verbindung nicht verschlüsseln, kann jeder im Netzwerksniffvertrauliche Informationen zwischen Ihrem Web- und Datenbankserver erhalten. Fügen Sie zum Verschlüsseln von MySQL-Verbindungen die folgende Zeile nach der gerade aktualisierten Zeilebind-addresshinzu:

/etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
. . .
require_secure_transport = on
. . .

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Wenn Sienano verwenden, drücken Sie dazuCTRL+X,Y und dannENTER.

Damit SSL-Verbindungen funktionieren, müssen Sie einige Schlüssel und Zertifikate erstellen. MySQL wird mit einem Befehl geliefert, der diese automatisch einrichtet. Führen Sie den folgenden Befehl aus, der die erforderlichen Dateien erstellt. Außerdem können sie vom MySQL-Server gelesen werden, indem die UID desmysql-Benutzers angegeben wird:

sudo mysql_ssl_rsa_setup --uid=mysql

Starten Sie die Datenbank neu, um zu erzwingen, dass MySQL seine Konfiguration aktualisiert und die neuen SSL-Informationen liest:

sudo systemctl restart mysql

Führen Sie den folgenden Befehlnetstataus, um zu bestätigen, dass der Server jetzt die externe Schnittstelle überwacht.

sudo netstat -plunt | grep mysqld
Outputtcp        0      0 db_server_ip:3306     0.0.0.0:*               LISTEN      27328/mysqld

netstat druckt Statistiken über das Netzwerksystem Ihres Servers. Diese Ausgabe zeigt uns, dass ein Prozess namensmysqld andb_server_ip an Port3306, dem Standard-MySQL-Port, angehängt ist, um zu bestätigen, dass der Server die entsprechende Schnittstelle überwacht.

Öffnen Sie als Nächstes diesen Port in der Firewall, um Datenverkehr zuzulassen:

sudo ufw allow mysql

Dies sind alle Konfigurationsänderungen, die Sie an MySQL vornehmen müssen. Als Nächstes wird beschrieben, wie eine Datenbank und einige Benutzerprofile eingerichtet werden, von denen eines für den Remotezugriff auf den Server verwendet wird.

[[Schritt 2 - Einrichten einer WordPress-Datenbank und Remote-Anmeldeinformationen] == Schritt 2 - Einrichten einer WordPress-Datenbank und Remote-Anmeldeinformationen

Obwohl MySQL selbst jetzt eine externe IP-Adresse überwacht, sind derzeit keine remote-fähigen Benutzer oder Datenbanken konfiguriert. Erstellen wir eine Datenbank für WordPress und ein Benutzerpaar, das darauf zugreifen kann.

Beginnen Sie mit der Verbindung zu MySQL als MySQL-Benutzer vonroot:

sudo mysql

[.Hinweis]##

Note: Wenn Sie die Kennwortauthentifizierung aktiviert haben, wie inStep 3 of the prerequisite MySQL tutorial beschrieben, müssen Sie stattdessen den folgenden Befehl verwenden, um auf die MySQL-Shell zuzugreifen:

mysql -u root -p

Nachdem Sie diesen Befehl ausgeführt haben, werden Sie nach dem Kennwort für MySQLrootgefragt. Nach der Eingabe erhalten Sie eine neue Eingabeaufforderung fürmysql>.

Erstellen Sie an der MySQL-Eingabeaufforderung eine Datenbank, die von WordPress verwendet wird. Es kann hilfreich sein, dieser Datenbank einen erkennbaren Namen zu geben, damit Sie sie später leichter identifizieren können. Hier nennen wir eswordpress:

CREATE DATABASE wordpress;

Nachdem Sie Ihre Datenbank erstellt haben, müssen Sie als Nächstes ein Benutzerpaar erstellen. Wir erstellen einen lokalen Benutzer sowie einen Remote-Benutzer, der an die IP-Adresse des Webservers gebunden ist.

Erstellen Sie zunächst Ihren lokalen Benutzerwpuser und lassen Sie dieses Konto nur mit lokalen Verbindungsversuchen übereinstimmen, indem Sielocalhost in der Deklaration verwenden:

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

Gewähren Sie diesem Konto dann vollen Zugriff auf diewordpress-Datenbank:

GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';

Dieser Benutzer kann jetzt alle Vorgänge in der Datenbank für WordPress ausführen, dieses Konto kann jedoch nicht remote verwendet werden, da es nur Verbindungen vom lokalen Computer abbildet. Erstellen Sie vor diesem Hintergrund ein Begleitkonto, das Verbindungen ausschließlich von Ihrem Webserver entspricht. Dazu benötigen Sie die IP-Adresse Ihres Webservers.

Bitte beachten Sie, dass Sie eine IP-Adresse verwenden müssen, die dasselbe Netzwerk verwendet, das Sie in der Dateimysqld.cnfkonfiguriert haben. Dies bedeutet, dass Sie, wenn Sie in dermysqld.cnf-Datei eine private Netzwerk-IP angegeben haben, die private IP Ihres Webservers in die folgenden beiden Befehle aufnehmen müssen. Wenn Sie MySQL für die Nutzung des öffentlichen Internets konfiguriert haben, sollten Sie dies mit der öffentlichen IP-Adresse des Webservers abgleichen.

CREATE USER 'remotewpuser'@'web_server_ip' IDENTIFIED BY 'password';

Vergeben Sie nach dem Erstellen Ihres Remote-Kontos die gleichen Berechtigungen wie für Ihren lokalen Benutzer:

GRANT ALL PRIVILEGES ON wordpress.* TO 'remotewpuser'@'web_server_ip';

Zuletzt müssen Sie die Berechtigungen löschen, damit MySQL sie verwenden kann:

FLUSH PRIVILEGES;

Beenden Sie dann die MySQL-Eingabeaufforderung, indem Sie Folgendes eingeben:

exit

Nachdem Sie eine neue Datenbank und einen remote-aktivierten Benutzer eingerichtet haben, können Sie testen, ob Sie von Ihrem Webserver aus eine Verbindung zur Datenbank herstellen können.

[[Schritt 3 - Testen von Remote- und lokalen Verbindungen] == Schritt 3 - Testen von Remote- und lokalen Verbindungen

Bevor Sie fortfahren, sollten Sie sicherstellen, dass Sie sowohl vom lokalen Computer (Ihrem Datenbankserver) als auch von Ihrem Webserver aus eine Verbindung zu Ihrer Datenbank herstellen können.

Testen Sie zunächst die lokale Verbindung von Ihremdatabase serveraus, indem Sie versuchen, sich mit Ihrem neuen Konto anzumelden:

mysql -u wpuser -p

Wenn Sie dazu aufgefordert werden, geben Sie das Kennwort ein, das Sie für dieses Konto eingerichtet haben.

Wenn Sie eine MySQL-Eingabeaufforderung erhalten, war die lokale Verbindung erfolgreich. Sie können den Vorgang wieder beenden, indem Sie Folgendes eingeben:

exit

Melden Sie sich als Nächstes beiweb serveran, um Remoteverbindungen zu testen:

ssh sammy@web_server_ip

Sie müssen einige Client-Tools für MySQL auf Ihrem Webserver installieren, um auf die entfernte Datenbank zugreifen zu können. Aktualisieren Sie zunächst Ihren lokalen Paket-Cache, falls Sie dies in letzter Zeit noch nicht getan haben:

sudo apt update

Installieren Sie dann die MySQL-Client-Dienstprogramme:

sudo apt install mysql-client

Stellen Sie anschließend mit der folgenden Syntax eine Verbindung zu Ihrem Datenbankserver her:

mysql -u remotewpuser -h db_server_ip -p

Auch hier müssen Sie sicherstellen, dass Sie die richtige IP-Adresse für den Datenbankserver verwenden. Wenn Sie MySQL für die Überwachung des privaten Netzwerks konfiguriert haben, geben Sie die private Netzwerk-IP Ihrer Datenbank ein. Andernfalls geben Sie die öffentliche IP-Adresse Ihres Datenbankservers ein.

Sie werden nach dem Passwort für Ihrremotewpuser-Konto gefragt. Nachdem Sie es eingegeben haben und alles wie erwartet funktioniert, sehen Sie die MySQL-Eingabeaufforderung. Stellen Sie mit dem folgenden Befehl sicher, dass die Verbindung SSL verwendet:

status

Wenn die Verbindung tatsächlich SSL verwendet, zeigt die ZeileSSL:dies an, wie hier gezeigt:

Output--------------
mysql  Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using  EditLine wrapper

Connection id:      52
Current database:
Current user:       [email protected]
SSL:         Cipher in use is DHE-RSA-AES256-SHA
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server version:     5.7.18-0ubuntu0.16.04.1 (Ubuntu)
Protocol version:   10
Connection:     203.0.113.111 via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:       3306
Uptime:         3 hours 43 min 40 sec

Threads: 1  Questions: 1858  Slow queries: 0  Opens: 276  Flush tables: 1  Open tables: 184  Queries per second avg: 0.138
--------------

Nachdem Sie überprüft haben, ob Sie eine Remoteverbindung herstellen können, schließen Sie die Eingabeaufforderung:

exit

Damit haben Sie den lokalen Zugriff und den Zugriff vom Webserver überprüft, jedoch nicht, dass andere Verbindungen abgelehnt werden. Versuchen Sie für eine zusätzliche Überprüfung, dasselbe von einem dritten Server aus zu tun, für den Sienotein bestimmtes Benutzerkonto konfiguriert haben, um sicherzustellen, dass diesem anderen Servernotder Zugriff gewährt wird.

Beachten Sie, dass Sie möglicherweise die MySQL-Client-Dienstprogramme wie oben beschrieben installieren müssen, bevor Sie den folgenden Befehl ausführen, um die Verbindung herzustellen:

mysql -u wordpressuser -h db_server_ip -p

Dies sollte nicht erfolgreich abgeschlossen werden und einen Fehler zurückgeben, der ungefähr so ​​aussieht:

OutputERROR 1130 (HY000): Host '203.0.113.12' is not allowed to connect to this MySQL server

Dies wird erwartet, da Sie keinen MySQL-Benutzer erstellt haben, der eine Verbindung von diesem Server herstellen darf, und auch gewünscht, da Sie sicherstellen möchten, dass Ihr Datenbankserver nicht autorisierten Benutzern den Zugriff auf Ihren MySQL-Server verweigert.

Nachdem Sie Ihre Remoteverbindung erfolgreich getestet haben, können Sie mit der Installation von WordPress auf Ihrem Webserver fortfahren.

[[Schritt 4 - Installation von WordPress]] == Schritt 4 - Installation von WordPress

Um die Funktionen Ihres neuen Remote-fähigen MySQL-Servers zu demonstrieren, installieren und konfigurieren wir WordPress - das beliebte Content-Management-System - auf Ihrem Webserver. Dazu müssen Sie die Software herunterladen und extrahieren, Ihre Verbindungsinformationen konfigurieren und anschließend die webbasierte Installation von WordPress ausführen.

Laden Sie auf Ihrenweb server die neueste Version von WordPress in Ihr Home-Verzeichnis herunter:

cd ~
curl -O https://wordpress.org/latest.tar.gz

Extrahieren Sie die Dateien, wodurch ein Verzeichnis mit dem Namenwordpress in Ihrem Home-Verzeichnis erstellt wird:

tar xzvf latest.tar.gz

WordPress enthält eine Beispielkonfigurationsdatei, die wir als Ausgangspunkt verwenden. Erstellen Sie eine Kopie dieser Datei und entfernen Sie-sample aus dem Dateinamen, damit sie von WordPress geladen wird:

cp ~/wordpress/wp-config-sample.php ~/wordpress/wp-config.php

Wenn Sie die Datei öffnen, müssen Sie zunächst einige geheime Schlüssel anpassen, um die Sicherheit Ihrer Installation zu erhöhen. WordPress bietet einen sicheren Generator für diese Werte, damit Sie nicht versuchen müssen, selbst gute Werte zu finden. Diese werden nur intern verwendet, daher schadet es nicht der Benutzerfreundlichkeit, hier komplexe, sichere Werte zu haben.

Geben Sie Folgendes ein, um sichere Werte aus dem WordPress-Generator für geheime Schlüssel abzurufen:

curl -s https://api.wordpress.org/secret-key/1.1/salt/

Dadurch werden einige Schlüssel für Ihre Ausgabe gedruckt. Sie werden diese vorübergehend zu Ihrerwp-config.php-Datei hinzufügen:

[.warning] #Warning! Es ist wichtig, dass Sie jedes Mal Ihre eigenen eindeutigen Werte anfordern. Do not kopiert die hier gezeigten Werte!
#

Outputdefine('AUTH_KEY',         'L4|2Yh(giOtMLHg3#] DO NOT COPY THESE VALUES %G00o|te^5YG@)');
define('SECURE_AUTH_KEY',  'DCs-k+MwB90/-E(=!/ DO NOT COPY THESE VALUES +WBzDq:7U[#Wn9');
define('LOGGED_IN_KEY',    '*0kP!|VS.K=;#fPMlO DO NOT COPY THESE VALUES +&[%8xF*,18c @');
define('NONCE_KEY',        'fmFPF?UJi&(j-{8=$- DO NOT COPY THESE VALUES CCZ?Q+_~1ZU~;G');
define('AUTH_SALT',        '@qA7f}2utTEFNdnbEa DO NOT COPY THESE VALUES t}Vw+8=K%20s=a');
define('SECURE_AUTH_SALT', '%BW6s+d:7K?-`C%zw4 DO NOT COPY THESE VALUES 70U}PO1ejW+7|8');
define('LOGGED_IN_SALT',   '-l>F:-dbcWof%4kKmj DO NOT COPY THESE VALUES 8Ypslin3~d|wLD');
define('NONCE_SALT',       '4J(<`4&&F (WiK9K#] DO NOT COPY THESE VALUES ^ZikS`es#Fo:V6');

Kopieren Sie die empfangene Ausgabe in Ihre Zwischenablage und öffnen Sie die Konfigurationsdatei in Ihrem Texteditor:

nano ~/wordpress/wp-config.php

Suchen Sie den Abschnitt, der die Dummy-Werte für diese Einstellungen enthält. Es wird ungefähr so ​​aussehen:

/wordpress/wp-config.php

. . .
define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');
. . .

Löschen Sie diese Zeilen und fügen Sie die Werte ein, die Sie über die Befehlszeile kopiert haben.

Geben Sie als Nächstes die Verbindungsinformationen für Ihre entfernte Datenbank ein. Diese Konfigurationszeilen befinden sich oben in der Datei genau über der Stelle, an der Sie Ihre Schlüssel eingefügt haben. Denken Sie daran, dieselbe IP-Adresse zu verwenden, die Sie zuvor in Ihrem Test der entfernten Datenbank verwendet haben:

/wordpress/wp-config.php

. . .
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'remotewpuser');

/** MySQL database password */
define('DB_PASSWORD', 'password');

/** MySQL hostname */
define('DB_HOST', 'db_server_ip');
. . .

Fügen Sie abschließend an einer beliebigen Stelle in der Datei die folgende Zeile hinzu, die WordPress anweist, eine SSL-Verbindung zu unserer MySQL-Datenbank herzustellen:

/wordpress/wp-config.php

define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);

Speichern und schließen Sie die Datei.

Kopieren Sie anschließend die Dateien und Verzeichnisse im Verzeichnis~/wordpressin das Dokumentstammverzeichnis von Nginx. Beachten Sie, dass dieser Befehl das Flag-aenthält, um sicherzustellen, dass alle vorhandenen Berechtigungen übertragen werden:

sudo cp -a ~/wordpress/* /var/www/html

Danach müssen Sie nur noch den Dateibesitz ändern. Ändern Sie den Besitz aller Dateien im Dokumentstamm inwww-data, den Standard-Webserverbenutzer von Ubuntu:

sudo chown -R www-data:www-data /var/www/html

Damit ist WordPress installiert und Sie können die webbasierte Setup-Routine ausführen.

[[Schritt-5 - Einrichten von WordPress über das Webinterface]] == Schritt 5 - Einrichten von Wordpress über das Webinterface

WordPress hat einen webbasierten Einrichtungsprozess. Während Sie es durcharbeiten, werden ein paar Fragen gestellt und alle benötigten Tabellen in Ihrer Datenbank installiert. In diesem Abschnitt werden die ersten Schritte zum Einrichten von WordPress erläutert, das Sie als Ausgangspunkt für die Erstellung Ihrer eigenen benutzerdefinierten Website verwenden können, die ein Remote-Datenbank-Backend verwendet.

Navigieren Sie zu dem Domainnamen (oder der öffentlichen IP-Adresse), der Ihrem Webserver zugeordnet ist:

http://example.com

Sie sehen einen Sprachauswahlbildschirm für das WordPress-Installationsprogramm. Wählen Sie die entsprechende Sprache und klicken Sie sich durch zum Hauptinstallationsbildschirm:

WordPress install screen

Nachdem Sie Ihre Informationen übermittelt haben, müssen Sie sich mit dem gerade erstellten Konto bei der WordPress-Administrationsoberfläche anmelden. Sie werden dann zu einem Dashboard weitergeleitet, in dem Sie Ihre neue WordPress-Site anpassen können.

Fazit

Wenn Sie diesem Tutorial folgen, richten Sie eine MySQL-Datenbank ein, um SSL-geschützte Verbindungen von einer Remote-Wordpress-Installation zu akzeptieren. Die in diesem Handbuch verwendeten Befehle und Techniken gelten für alle Webanwendungen, die in einer beliebigen Programmiersprache geschrieben wurden. Die spezifischen Implementierungsdetails unterscheiden sich jedoch. Weitere Informationen finden Sie in der Dokumentation zu Ihrer Anwendung oder Sprache.