Einer der häufigsten Fehler bei der Verwendung von PHP für Datenbankverbindungen, insbesondere bei der Verwendung von MySQLI_Connect () oder PDO, um eine Verbindung zu Datenbanken herzustellen, ist:
Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server
Diese Fehlermeldung bedeutet, dass der Datenbankserver die Verbindungsanforderung aus dem aktuellen Client -Host ablehnt, vor allem, da die Berechtigungskonfiguration auf dem Datenbankserver nicht zulässt, dass die Client -IP -Adresse eine Verbindung herstellt.
In diesem Artikel wird detailliert erklärt, wie dieses Problem behoben und behoben werden kann.
Wenn ein MySQL -Server Benutzern eine Verbindung herstellen kann, überprüft er nicht nur den Benutzernamen und das Kennwort, sondern überprüft auch die Host -Adresse, aus der die Verbindung stammt. Das heißt, auch wenn der Benutzername und das Kennwort korrekt sind, wird er abgelehnt, wenn der Verbindungshost nicht autorisiert ist.
Standardmäßig ermöglicht MySQL nur Localhost (native) Verbindungen, und Remote -Verbindungen erfordern zusätzliche Konfiguration.
In welchem Hostnamen oder IP wird beim Anschließen übergeben? Normalerweise im PHP -Code wie diesen geschrieben:
$mysqli = new mysqli('db.m66.net', 'user', 'password', 'database');
Stellen Sie sicher, dass der Hostname hier der richtige IP- oder Domänenname für den Datenbankserver ist.
Um das Problem "Host nicht zugelassen zu verbinden" zu beheben, müssen Sie den angegebenen Client -Host auf dem MySQL -Server autorisieren.
Unter der Annahme, dass Ihr Datenbank -Benutzername DBUSER ist, müssen Sie Verbindungen vom Remote -Host -IP 123.123.123.123 zulassen:
GRANT ALL PRIVILEGES ON database.* TO 'dbuser'@'123.123.123.123' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
Wenn Sie alle Hostverbindungen zulassen möchten (nicht für Produktionsumgebungen empfohlen), können Sie den % Wildcard -Charakter verwenden:
GRANT ALL PRIVILEGES ON database.* TO 'dbuser'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
MySQL ist standardmäßig an 127.0.0.1 gebunden, und nur der native Zugriff ist eingeschränkt.
Öffnen Sie die MySQL -Konfigurationsdatei (normalerweise /etc/mysql/my.cnf oder /etc/mysql/mysql.conf.d/mysqld.cnf ) und finden Sie diese Zeile:
bind-address = 127.0.0.1
Ändern Sie es in:
bind-address = 0.0.0.0
Starten Sie dann den MySQL -Dienst neu:
sudo service mysql restart
Stellen Sie sicher, dass die Server -Firewall den externen Zugriff auf MySQL Standard Port 3306 ermöglicht.
Verwenden Sie beispielsweise UFW :
sudo ufw allow 3306/tcp
Unter der Annahme der Datenbankserver -Adresse lautet db.m66.net das Beispiel für den Verbindungscode:
<?php
$host = 'db.m66.net';
$user = 'dbuser';
$password = 'password';
$dbname = 'database';
$mysqli = new mysqli($host, $user, $password, $dbname);
if ($mysqli->connect_error) {
die('Verbindung ist fehlgeschlagen: (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
echo 'Verbindung erfolgreich!';
$mysqli->close();
?>
Bestätigen Sie, dass der Benutzername und das Passwort korrekt sind.
Bestätigen Sie, dass die PHP- und MySQL -Server -Netzwerke interoperabel sind und Sie Ping- oder Telnet db.m66.net 3306 zum Testen verwenden können.
Überprüfen Sie die Datenbankbenutzerberechtigungen, um sicherzustellen, dass der Benutzer die Berechtigung hat, auf die angegebene Datenbank zuzugreifen.
Weitere Informationen finden Sie im MySQL -Fehlerprotokoll.