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

12

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 trouvé lors de la construction du serveur que, même si je pouvais envoyer une requête ping à 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.1plutôt que localhostpour 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 localhostse connectaient à MySQL.

J'ai essayé diverses modifications du hostsfichier, 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.

Peter Snow
la source

Réponses:

15

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 rootvia 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.

drewrockshard
la source
J'ai l'impression que vous êtes sur la bonne voie. Je l'ai fait et je peux voir que bien que root et quelques autres utilisateurs aient été créés pour localhost, ceux créés par le panneau de contrôle d'hébergement pour les utilisateurs sont tous pour 127.0.0.1(sauf un qui l'est %). Je pense que cela en révèle probablement assez pour que je puisse y remédier, donc j'accepterai probablement votre réponse dans peu de temps.
Peter Snow
Merci pour l'aide! je voudrais ajouter qu'un redémarrage du serveur mysql est requis après la mise à jour de la table mysql.user pour que la modification prenne effet.
missovic10
Bien qu'accepté, ce n'est généralement pas (jamais?) Le problème, pour mysql. Voir la réponse d'EEAA à la place (mysql interprète localhostcomme socketau lieu de TCP).
ToolmakerSteve
8

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 de rester avec 127.0.0.1ou, si le client le prend en charge (comme le binaire mysql CLI le fait avec l' --protocolindicateur), de le forcer à utiliser TCP au lieu d'un socket Unix.

EEAA
la source
Merci EEAA. Le problème est que des choses comme le programme d'installation de Joomla échouent. Si vous spécifiez 127.0.0.1au lieu de localhostdans le champ du nom d'hôte lors de l'installation, les chemins d'installation se gâchent, ce qui me donne d'autres erreurs, mais la spécification de localhost ne parvient pas à connecter la base de données! Qu'est-ce qui a causé cette situation? Pourquoi je l'ai?
Peter Snow
3
@PeterSnow Configurez un socket de domaine Unix dans votre configuration MySQL.
Michael Hampton
Merci @MichaelHampton J'ai cherché pendant la dernière demi-heure et je ne trouve pas comment configurer cela. Pouvez-vous m'indiquer un article ou me donner une idée s'il vous plaît? J'ai socket = /var/run/mysqld/mysqld.socken my.cnfet le fichier existe, détenu par mysql avec les autorisations 777. Merci.
Peter Snow
@PeterSnow Avez-vous redémarré mysqld après avoir fait ce changement?
EEAA
Actuellement, j'essaie de l'utiliser via le script d'installation de Joomla. La page http demande le nom d'hôte. Si je choisis 127.0.0.1cela fonctionne (mais le script utilise l'entrée plus tard et échoue car il attend un nom résoluble comme localhost), mais si j'utilise localhost, la connexion, pour créer la base de données, échoue.
Peter Snow
1

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
a_learner
la source
Merci a_learner, pour l'information, même si j'ai déjà accepté une réponse.
Peter Snow
0

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
joelschmid
la source
0

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.

saharul
la source
-1

Vous avez besoin d'un mysql.sock dans / tmp

ln -s /var/lib/mysql/mysql.sock mysql.sock

devrait bien fonctionner après cela.

William
la source