Je reçois cette erreur lorsque j'essaie de me connecter à la base de données mysql à l'aide de php mysqli class. En utilisant le code suivant:
$db = new MySQLi("localhost","kamil","*****");
if (mysqli_connect_errno())
{
echo "An error occured. Please try again later.";
exit();
}
le mot de passe est * pour la sécurité.
J'ai créé l'utilisateur kamil
avec tous les privilèges sur l'adresse IP externe et sur l'hôte local. Quand je cours: select user,Host from mysql.user
_ il affiche correctement ces deux utilisateurs.
J'ai fait des recherches et utilisé ce repère: https://stackoverflow.com/a/2183134/1839439 pour voir à quoi il se connecte. En fait, il est seulement capable de se connecter à 127.0.0.1
et 127.0.0.1:3306
qui est localhost, cependant, lorsque je fournis localhost
, cette erreur est supprimée.
Ma question est pourquoi cela me permet-il seulement de me connecter à la base de données en utilisant l'adresse IP de l'hôte local et non le nom ou l'adresse IP externe. Ai-je besoin d'un hôte différent si je veux pouvoir utiliser mysql sur un site Web ou si je peux utiliser 127.0.0.1
?
EDIT: hosts
fichier
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 raspberrypi
| kamil | 109.255.177.28 |
| kamil | localhost |
Lorsque vous utilisez uniquement "localhost", la bibliothèque cliente MySQL essaie d'utiliser un socket de domaine Unix pour la connexion au lieu d'une connexion TCP/IP. L'erreur indique que le socket, appelé MySQL
, ne peut pas être utilisé pour établir la connexion, probablement parce qu'il n'existe pas (numéro d'erreur 2).
Depuis le documentation MySQL :
Sous Unix, les programmes MySQL traitent le nom d’hôte localhost de manière particulière, d’une manière probablement différente de ce que vous attendiez par rapport aux autres programmes basés sur le réseau. Pour les connexions à localhost, les programmes MySQL tentent de se connecter au serveur local en utilisant un fichier de socket Unix. Cela se produit même si une option --port ou -P est donnée pour spécifier un numéro de port. Pour vous assurer que le client établit une connexion TCP/IP au serveur local, utilisez --Host ou -h pour spécifier une valeur de nom d'hôte de 127.0.0.1, ou l'adresse IP ou le nom du serveur local. Vous pouvez également spécifier explicitement le protocole de connexion, même pour localhost, en utilisant l'option --protocol = TCP.
Il y a plusieurs façons de résoudre ce problème.
127.0.0.1
au lieu de localhost
lorsque vous vous connectez. Le socket Unix pourrait toutefois être plus rapide et plus sûr à utiliser.php.ini
: ouvre le fichier de configuration MySQL my.cnf
pour trouver où MySQL crée le socket et définir le mysqli.default_socket
sur ce chemin. Sur mon système, c'est /var/run/mysqld/mysqld.sock
.Configurez le socket directement dans le script PHP lors de l’ouverture de la connexion. Par exemple:
$db = new MySQLi('localhost', 'kamil', '***', '', 0,
'/var/run/mysqld/mysqld.sock')
S'il s'agit d'un problème PHP, vous pouvez simplement modifier le fichier de configuration php.ini où qu'il se trouve et mettre à jour les paramètres de PORT/SOCKET-PATH, etc. pour le connecter. au serveur.
Dans mon cas, j’ai ouvert le fichier php.ini et
mysql.default_socket = /var/run/mysqld/mysqld.sock
mysqli.default_socket = /var/run/mysqld/mysqld.sock
Et cela a fonctionné tout de suite. Je dois admettre que j'ai retenu l'allusion de la réponse acceptée par @Joni
Si 'localhost' ne fonctionne pas mais 127.0.0.1. Assurez-vous que votre fichier d'hôtes local pointe vers le bon emplacement. (/ etc/hosts pour linux/mac, C:\Windows\System32\drivers\etc\hosts pour Windows).
Assurez-vous également que votre utilisateur est autorisé à se connecter à la base de données que vous essayez de sélectionner.
Veuillez vérifier le fichier suivant
%SystemRoot%\system32\drivers\etc\Host
Il manque probablement une ligne qui lie le nom d'hôte avec ip à une ligne qui les lie ensemble
127.0.0.1 localhost
Si la ligne donnée est manquante. Ajouter la ligne dans le fichier
Pourriez-vous également consulter la table des utilisateurs de votre base de données MySQL et nous indiquer la valeur de la colonne Hôte pour l'utilisateur que vous utilisez? Vous devez avoir les privilèges utilisateur pour l'hôte "127.0.0.1" et "localhost" et utiliser%, car il s'agit d'un caractère sauvage pour le nom d'hôte générique.