MySQL für Hoster
Diese Seite ist für Systemadministratoren bei einem Hosting-Anbieter, die MySQL-Datenbanken für Exponential-Websites bereitstellen. Sie beantwortet: wo MySQL steht, wie Sie die Datenbank und den Benutzer einer Website anlegen, was der Treiber vom Server braucht, wie Sie Replikate nutzen und wie Sie sichern. MySQL ist die sechste in der offiziellen Reihenfolge: unterstützt und in der CI des Projekts getestet, nur deshalb zuletzt, weil das Projekt für neue Websites zuerst die anderen empfiehlt. Quellen: Datenbankunterstützung und Kapitel 9.3.
Inhalt
- Wo MySQL steht
- Versionen und Erweiterung
- Eine Datenbank pro Website anlegen
- Einstellungen und Installation
- Replikate und persistente Verbindungen
- Backups
- Probleme und ihre Ursachen
- Checkliste
- Verwandte Seiten
Wo MySQL steht
- Der Treiber
eZMySQLiDBaufmysqliist der, für den die meisten Erweiterungen von Drittanbietern ursprünglich geschrieben wurden; MySQL ist daher die sichere Wahl für einen Kunden mit älteren Erweiterungen, die eigenes SQL enthalten. - Es teilt den Treiber mit MariaDB (MariaDB für Hoster); für einen Hoster werden beide gleich bereitgestellt.
- Die CI des Projekts führt ihre Datenbanktests bei jedem Push gegen MySQL 8.0 aus (Testabdeckung).
Versionen und Erweiterung
| Element | Wert |
|---|---|
| Untergrenze des Assistenten | 4.1.1 (keine Empfehlung) |
| Praktisches Minimum | ein Release, das Ihr Hersteller noch unterstützt, mit utf8mb4 und InnoDB |
| Funktionierend gesehen | 8.0 in der CI |
| PHP-Erweiterung | mysqli (php-mysqlnd in der RHEL-Familie, php<version>-mysql unter Debian und Ubuntu) |
| Namen in den Installern | Assistent „MySQL Improved“; exp:install --db=mysql (auch mysqli); Kickstarter Type=mysqli |
Eine Datenbank pro Website anlegen
CREATE DATABASE <customer> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER '<customer>'@'localhost' IDENTIFIED BY '<a strong password>';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER,
LOCK TABLES, CREATE TEMPORARY TABLES
ON <customer>.* TO '<customer>'@'localhost';Es ist kein globales Recht nötig. Der Installer legt InnoDB-Tabellen an, wenn der Server InnoDB anbietet, und
Transaktionen brauchen es. Die MySQL-Update-Dateien eines Upgrades beginnen mit SET default_storage_engine=InnoDB;
(Kapitel 9.3).
Einstellungen und Installation
[DatabaseSettings]
DatabaseImplementation=ezmysqli
Server=localhost
# empty: 3306
Port=
User=<customer>
Password=<the password>
Database=<customer>
# a Unix socket instead of host and port, e.g. /var/lib/mysql/mysql.sock
Socket=disabled
Charset=utf-8
UsePersistentConnection=disabled
ConnectRetries=0EXP_INSTALL_DB_PASSWORD='<the password>' php bin/php/console exp:install --apply --db=mysql \
--db-host=127.0.0.1 --db-name=<customer> --db-user=<customer> --allow-root-userHinweis Der Verbindungszeichensatz
utf-8wird als MySQLsutf8gesendet, drei Byte pro Zeichen; Zeichen außerhalb der Basic Multilingual Plane, etwa Emoji, können daher nicht durch die Verbindung gehen, auch wenn die Tabellenutf8mb4sind. Kunden, die sie brauchen, sollten das wissen, bevor sie MySQL oder MariaDB wählen (Zeichensätze).
Replikate und persistente Verbindungen
- Lese-Replikate.
UseSlaveServer=enabledmitSlaveServerArray[],SlaveServerPort[],SlaverServerUser[],SlaverServerPassword[]undSlaverServerDatabase[](die Schlüssel heißen wirklichSlaver...) schickt Lesezugriffe an ein Replikat, das pro Anfrage zufällig gewählt wird; Schreibzugriffe gehen anServer. Durch die Replikationsverzögerung kann eine Seite Inhalte zeigen, die einige Sekunden alt sind. - Persistente Verbindungen.
UsePersistentConnection=enabledhält eine Verbindung pro PHP-Prozess (der Treiber stellt dem Hostp:voran). Unter den persistenten Workern von Velocity hält jeder Worker seine Verbindung ohnehin. Bemessen Sie das Verbindungslimit des Servers für die Anzahl der PHP-Prozesse aller Websites, die ihn nutzen.
Backups
mysqldump --single-transaction -u <customer> -p <customer> > <customer>.sql
mysql -u <customer> -p <customer> < <customer>.sql--single-transaction ergibt einen konsistenten Dump von InnoDB-Tabellen, ohne sie zu sperren. Ein vollständiges Backup
enthält außerdem var/storage, settings/override und settings/siteaccess
(Backup und Wiederherstellung).
Probleme und ihre Ursachen
| Symptom | Ursache |
|---|---|
| Die Fehlerseite, dass die Datenbank nicht erreichbar ist | falscher Host, Benutzer, falsches Passwort oder falsche Datenbank; seit PHP 8.1 wirft mysqli eine Ausnahme, und der Treiber macht daraus eZDBNoConnectionException |
Text mit ? an der Stelle von Buchstaben mit Akzent | die Verbindung ist auf den Standardzeichensatz des Servers zurückgefallen; setzen Sie AlwaysLog[]=warning und suchen Sie in var/log/warning.log nach „could not set the connection charset“ |
| Der Assistent lehnt den Zeichensatz der Datenbank ab | die Datenbank ist nicht UTF-8; legen Sie sie in utf8mb4 neu an |
| Langsame Abfragen | [DatabaseSettings] QueryAnalysisOutput=enabled mit SQLOutput=enabled zeigt die Analyse von MySQL in der Debug-Ausgabe |
Checkliste
- To do: Ein unterstütztes MySQL-Release mit InnoDB.
- To do: Eine Datenbank pro Website in
utf8mb4, ein Benutzer mit den Rechten oben. - To do:
mysqliim Web-PHP und im PHP der Kommandozeile. - To do: Das Verbindungslimit des Servers für die PHP-Prozesse aller Websites auf dem Server bemessen.
- To do: Backups mit
mysqldump --single-transactiongeplant und eine Wiederherstellung getestet.
Verwandte Seiten
- Datenbanken in der offiziellen Reihenfolge und MariaDB für Hoster
- Datenbankunterstützung: MySQL
- Kapitel 9.3: MySQL und MariaDB
- Datenbank-Backups je Engine
- 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.