Lektion 3.3: Datenbankserver für eine Website
Wenn eine Website einen Datenbankserver braucht, legen Hosting-Mitarbeitende die Datenbank, ihren Benutzer und seine Rechte an und übergeben dem Installationsprogramm die Verbindung. Diese Lektion zeigt die Schritte für PostgreSQL und MariaDB (und MySQL, das denselben Treiber verwendet), die Rechte, die genügen, und die Probleme, denen Support-Mitarbeitende danach begegnen. MongoDB und Oracle behandeln eigene Seiten für Hoster.
Hinweis Verwenden Sie einen Datenbankserver auf der eigenen virtuellen Maschine der Person. Legen Sie im Kurs nie Datenbanken oder Benutzer auf einem gemeinsam genutzten Server eines Kunden an.
Auf einen Blick
| Kurs | Hosting und Betrieb |
| Modul | Modul 3: Datenbanken |
| Dauer | 45 Minuten (15 Präsentation, 30 Übung) |
| Niveau | Fortgeschrittene |
| Zielgruppe | Systemadministratoren und Support-Mitarbeitende im Hosting |
| Voraussetzungen | Lektion 3.2; PostgreSQL oder MariaDB auf der virtuellen Maschine der Person installiert, mit der PHP-Erweiterung pgsql oder mysqli |
Lernziele
Nach dieser Lektion können die Teilnehmenden:
- eine PostgreSQL-Datenbank anlegen, die dem Benutzer der Website gehört, oder eine MariaDB-Datenbank in
utf8mb4mit Rechten pro Datenbank; - mit
exp:install --db=...eine Website darauf installieren, ohne das Passwort in die Shell-History zu schreiben; - erklären, warum
pgcryptound die Sequenzen von PostgreSQL wichtig sind; - die üblichen Probleme erkennen: die Seite „database cannot be reached“,
?statt Buchstaben mit Akzenten, doppelte Schlüssel nach einem Import.
Hinweise für Trainer
So präsentieren Sie es
Quelle: Kapitel 9, Abschnitte 9.3 und 9.4, PostgreSQL für Hoster und MariaDB für Hoster.
- PostgreSQL (5 Minuten).
createuser --pwprompt, danncreatedb --owner=... --encoding=UTF8 --template=template0. Der Eigentümer ist wichtig: Ab PostgreSQL 15 dürfen gewöhnliche Benutzer keine Tabellen im Schemapubliceiner Datenbank anlegen, die ihnen nicht gehört.pgcryptostelltdigest()bereit; das Installationsprogramm legt es an, wenn der Server es mitbringt (ab PostgreSQL 13 eine vertrauenswürdige Erweiterung). Nach einem Import mit expliziten IDs bleiben die Sequenzen zurück; korrigieren Sie sie mitsetval. - MariaDB und MySQL (5 Minuten). Legen Sie die Datenbank in
utf8mb4an; vergeben SieSELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES, CREATE TEMPORARY TABLESnur auf dieser Datenbank. Kein globales Recht ist nötig. Das Installationsprogramm legt InnoDB-Tabellen an, wenn der Server es anbietet. - Installieren (3 Minuten). Übergeben Sie das Passwort in
EXP_INSTALL_DB_PASSWORD, damit es nicht in der Shell-History landet. - Andere Datenbanksysteme (2 Minuten). MongoDB braucht PHP 8.2, eine Composer-Bibliothek und Indizes; Oracle
braucht
oci8und ist meist die eigene Datenbank des Kunden. Verweisen Sie auf ihre Seiten für Hoster.
Häufige Fragen
Können Lesezugriffe an ein Replikat gehen? Bei MySQL und MariaDB schickt UseSlaveServer=enabled mit den
Replikatlisten Lesezugriffe an ein pro Anfrage zufällig gewähltes Replikat; Schreibzugriffe gehen an Server. Durch
die Replikationsverzögerung kann eine Seite Inhalte zeigen, die einige Sekunden alt sind.
Warum kommen Buchstaben mit Akzenten als ? zurück? Die Verbindung ist auf einen anderen Zeichensatz
zurückgefallen. Schalten Sie [DebugSettings] AlwaysLog[]=warning ein, laden Sie eine Seite und suchen Sie in
var/log/warning.log nach „could not set the connection charset“.
Der Assistent lehnt den Zeichensatz der Datenbank ab. Sie wurde in latin1 oder einem anderen Ein-Byte-Zeichensatz
angelegt; legen Sie sie in utf8mb4 neu an.
PostgreSQL lehnt die Verbindung ab. Prüfen Sie listen_addresses in postgresql.conf und pg_hba.conf.
Stolperfallen
- Passwörter am Beamer. Verwenden Sie für die Schulungsdatenbank ein Wegwerf-Passwort und zeigen Sie nie ein echtes.
- Alles vergeben. Teilnehmende, die
GRANT ALL ON *.*gewohnt sind, sollen sehen, dass Rechte pro Datenbank genügen. - In eine vorhandene Schulungsdatenbank installieren.
exp:installinstalliert in die angegebene Datenbank; verwenden Sie für die Übung eine neue, leere Datenbank.
Praktische Übung
Verwenden Sie Ihre eigene virtuelle Maschine mit PostgreSQL (Schritte 1 bis 4) oder MariaDB (Schritte 1a bis 4a) und eine frische Kopie des Codes für eine zweite Schulungsinstallation.
PostgreSQL: Legen Sie den Benutzer und die Datenbank an (geben Sie auf Nachfrage ein Schulungspasswort ein):
sudo -u postgres createuser --pwprompt exptraining sudo -u postgres createdb --owner=exptraining --encoding=UTF8 --template=template0 exptraining1a. MariaDB: Führen Sie im Client
mariadbals Administrator aus:CREATE DATABASE exptraining CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'exptraining'@'localhost' IDENTIFIED BY '<a training password>'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES, CREATE TEMPORARY TABLES ON exptraining.* TO 'exptraining'@'localhost';Sehen Sie sich den Installationsbefehl mit
--helpan und suchen Sie die Werte für--db:php bin/php/console exp:install --help.Installieren Sie, mit dem Passwort in der Umgebung:
read -rs EXP_INSTALL_DB_PASSWORD; export EXP_INSTALL_DB_PASSWORD php bin/php/console exp:install --apply --db=pgsql --db-host=127.0.0.1 --db-name=exptraining --db-user=exptraining3a. MariaDB: dasselbe mit
--db=mariadb.PostgreSQL: Prüfen Sie, dass
pgcryptovorhanden ist:psql -h 127.0.0.1 -U exptraining -d exptraining -c '\dx'.4a. MariaDB: Prüfen Sie das Tabellenformat einer Tabelle:
mariadb -u exptraining -p -e "SHOW TABLE STATUS FROM exptraining LIKE 'ezcontentobject'\G".Starten Sie die Website mit
php bin/php/console exp:velocity startund öffnen Sie sie.Öffnen Sie in der Administration Setup, Systeminformationen und prüfen Sie die Karte Database.
Führen Sie
unset EXP_INSTALL_DB_PASSWORDaus und prüfen Sie, dasshistory | tail -5kein Passwort zeigt.
Erwartetes Ergebnis
- Die Installation läuft durch und die Website antwortet.
- Schritt 4 listet
pgcryptoauf, oder Schritt 4a zeigtEngine: InnoDB. - Schritt 6 zeigt PostgreSQL oder MariaDB mit der Serverversion und
UTF8oderutf8mb4. - Schritt 7: Das Passwort erscheint nicht in der Shell-History.
- Der Trainer prüft das, indem er jede Person bittet, Datenbanksystem und Zeichensatz der Karte Database laut vorzulesen.
Quiz
- Warum muss der PostgreSQL-Benutzer Eigentümer der Datenbank der Website sein?
- Welche MariaDB-Rechte braucht der Benutzer der Website?
A.
ALL PRIVILEGES ON *.*B.SUPERC. Rechte pro Datenbank einschließlichLOCK TABLESundCREATE TEMPORARY TABLESD. nur Leserechte - Wofür wird
pgcryptogebraucht? - Nach einem Import mit expliziten IDs schlagen Einfügungen in PostgreSQL mit einem doppelten Schlüssel fehl. Was ist falsch?
- Wie übernimmt
exp:installdas Datenbankpasswort, ohne es in der Shell-History zu zeigen?
Antworten
- Ab PostgreSQL 15 dürfen gewöhnliche Benutzer keine Tabellen im Schema
publiceiner Datenbank anlegen, die ihnen nicht gehört. - C. Kein globales Recht ist nötig (Datenbank und Benutzer anlegen).
- Der Treiber berechnet MD5 mit
digest(), das auspgcryptokommt. - Die Sequenzen sind hinter ihren Tabellen zurückgeblieben; korrigieren Sie sie mit
setval. - Aus der Umgebungsvariablen
EXP_INSTALL_DB_PASSWORD.
Weiterführende Informationen
- PostgreSQL für Hoster
- MariaDB für Hoster und MySQL für Hoster
- MongoDB für Hoster und Oracle für Hoster
- Datenbanken und Benutzer in Hosting-Panels
Verwandte Seiten
- Modul 3: Datenbanken
- Hosting und Betrieb: Kursüberblick
- Trainer: hier beginnen
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.