web-dev-qa-db-fra.com

Impossible de se connecter à MySQL en utilisant 'localhost' mais en utilisant '127.0.0.1' ça va?

Mon fichier/etc/hosts ressemble à ceci:

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

J'ai découvert lors de la construction du serveur que, même si je pouvais cingler localhost avec succès, dans certains fichiers de configuration pour des services comme Postfix et Apache et Dovecot, je devais spécifier 127.0.0.1 au lieu de localhost afin de les faire fonctionner.

J'ai également dû modifier les fichiers de configuration de certains sites Web pilotés par une base de données, qui utilisaient localhost pour se connecter à MySQL.

J'ai essayé diverses modifications du fichier hosts, mais rien de ce que j'ai essayé jusqu'à présent n'a aidé.

Le serveur exécute Ubuntu 12.04.02 LTS. Selinux n'est pas installé et la situation ci-dessus persiste même après avoir défini les stratégies par défaut d'IPtables pour les accepter et les vider.

12
Peter Snow

Une chose que vous pourriez vérifier est (qui vous oblige à vous connecter à la console MySQL) - vérifiez que vous avez les autorisations pour vous connecter à root via localhost.

mysql -h 127.0.0.1 -u root -p

- Une fois connecté avec succès -

mysql> select user,Host from mysql.user;
+------+--------------------------------+
| user | Host                           |
+------+--------------------------------+
| root | 127.0.0.1                      | 
| root | ::1                            |
| root | localhost                      | <-- Make sure you have a localhost entry for root
+------+--------------------------------+
3 rows in set (0.00 sec)

Il suffit de le jeter là-bas, juste au cas où ce serait le problème.

15
drewrockshard

La plupart des clients MySQL sont étranges dans le fait que si vous spécifiez l'hôte en tant que localhost, ils l'aliasent vers une connexion socket au lieu d'une connexion TCP. Vos options sont soit de coller avec 127.0.0.1 ou, si le client le prend en charge (comme le binaire CLI mysql le fait avec le --protocol flag), forcez-le à utiliser TCP au lieu d'un socket unix.

8
EEAA

Vous pouvez vérifier l'autorisation comme ceci:

[learner@localhost ~]$ Sudo netstat -npa | grep mysqld  
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      6284/mysqld         
unix  2      [ ACC ]     STREAM     LISTENING     233040 6284/mysqld         /var/lib/mysql/mysql.sock

Si cela écoute sur 0 0.0.0.0:* cela signifie que tout le monde peut accéder à ce mysql.

vous pouvez modifier la liaison pour cela dans le fichier my.conf. Dans Linux, le chemin par défaut pour cela est:

[learner@localhost ~]$ Sudo vi /etc/my.cnf

Ajoutez ces lignes dans le fichier my.conf pour autoriser l'IP que vous souhaitez.

bind-address = 127.0.0.1   
bind-address = 0.0.0.0
1
a_learner

Une chose à noter si les subventions sont correctes est que si vous utilisez MariaDB, il y a eu un bogue qui a causé ce comportement exact dans les versions 10.0.1 et 5.5.30 https://mariadb.atlassian.net/browse/MDEV- 4356

1
Scott Mcintyre

J'ai résolu ce problème en créant un lien symbolique, Sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock. Mais je dois d'abord créer un dossier /var/run/mysqld/ car le dossier n'existait pas initialement.

0
saharul

PHP essaie toujours d'utiliser l'emplacement de socket par défaut. Ce problème peut apparaître si vous avez déplacé le dossier MariaDB/MySQL de / var/lib/mysql vers un autre emplacement. Afin de résoudre le problème, vous devez définir l'emplacement du nouveau socket dans le fichier / etc/php.ini.

mysqli.default_socket =/newDBLocation/mysql/mysql.sock
0
joelschmid