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