c'est un peu un mystère pour moi. La seule façon de me connecter à MySQL est de l'appeler via "127.0.0.1" ... par exemple, mon script de connexion PHP ne fonctionnera PAS avec localhost
J'utilise Mac OS X Lion, apache2 intégré, MySQL, PHP, phpMyAdmin
mysqladmin:
count 0
debug-check FALSE
debug-info TRUE
force FALSE
compress FALSE
character-sets-dir (No default value)
default-character-set auto
host (No default value)
no-beep FALSE
port 0
relative FALSE
socket (No default value)
sleep 0
ssl FALSE
ssl-ca (No default value)
ssl-capath (No default value)
ssl-cert (No default value)
ssl-cipher (No default value)
ssl-key (No default value)
ssl-verify-server-cert FALSE
user (No default value)
verbose FALSE
vertical FALSE
connect-timeout 43200
shutdown-timeout 3600
plugin-dir (No default value)
default-auth (No default value)
ping localhost
et voyez ce qu'il dit.Réponses:
MySQL essaiera de se connecter à la socket unix si vous lui dites de se connecter à "localhost". Si vous lui dites de se connecter à 127.0.0.1, vous le forcez à se connecter à la prise réseau. Vous avez donc probablement configuré MySQL pour n'écouter que le socket réseau et non le socket du système de fichiers.
Ce qui ne va pas exactement avec votre socket Unix est difficile à dire. Mais je vous recommande de lire cette page sur le guide de référence MySQL. Cela devrait vous aider.
MISE À JOUR: Basé sur la question mise à jour: Le paramètre "socket" devrait être quelque chose comme ceci: "/var/lib/mysql/mysql.sock". Cette page du Manuel de référence contient plus d'informations.
Voici le début de mon fichier /etc/my.cnf:
Votre fichier doit être similaire. Ensuite, votre problème devrait être résolu. N'oubliez pas de redémarrer le serveur MySQL avant de le tester.
la source
Vous pouvez avoir activé IPv6, son hôte local très possible se résout en hôte local ipv6, qui n'est pas défini dans votre configuration msql.
ive a également eu un problème où j'ai dû ajouter 'localhost' à la place de '127.0.0.1' aux sous-réseaux autorisés pour cet utilisateur, je ne comprends pas pourquoi (j'utilisais ipv4 et c'était il y a un certain temps) mais ça vaut le coup d'essayer.
la source
Pour moi, le php intégré d'OSX est configuré pour utiliser un socket Unix différent de mysql de homebrew. Ainsi, il ne peut pas se connecter via localhost qui utilise cette socket.
Je l'ai corrigé avec un hack rapide en associant le chemin de socket configuré par php pour pointer vers celui que mysql utilise réellement.
Les commandes de diagnostic suivantes ont été très utiles.
Vérifiez les chemins de socket par défaut utilisés par php et mysql:
Connectez-vous à l'aide d'une prise spécifiée:
Déterminez le type de socket que le client mysql utilise pour se connecter:
la source
Pourriez-vous vérifier
mysql/conf/my.conf
(la structure du répertoire devrait être à peu près la même sur OSx) pour voir si elleskip-networking
n'est pas commentée? Si c'est le cas, ajoutez un#
devant la ligne et redémarrez le serveur mysql.J'ai eu un problème similaire il y a quelque temps (bien que ce ne soit pas sous OSx), donc j'ai pensé que ça valait le coup.
la source
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 .
Attention, selon le pilote que vous utilisez, vous devrez peut-être spécifier pdo_mysql.default_socket = !
Afin de vérifier votre répertoire actuel, exécutez la commande suivante dans mysql:
la source
L'hôte local est-il défini dans votre
/private/etc/hosts
fichier?la source
/private
? Jamais vu ça auparavantJ'ai pu recréer vos mêmes symptômes sur ma boîte de test, j'espère que cela vous aidera.
Dans MySQL, les utilisateurs sont définis en deux parties (nom et hôte). Par défaut, MySQL aura 3 utilisateurs root:
Le champ du mot de passe sera soit vide (pas de mot de passe), soit un hachage sera stocké. Si vous définissez le mot de passe pour un utilisateur spécifique, il ne met pas automatiquement à jour tous, car MySQL les voit comme des utilisateurs différents.
Par exemple:
mettra à jour le mot de passe pour
'root'@'127.0.0.1'
, mais pas'root'@'localhost'
ou'root'@'localhost.localdomain'
Jetez un oeil à la
skip_name_resolve
variable:Par défaut
skip_name_resolve
estOFF
, et va tenter de résoudre toutes les adresses IP aux noms d' hôtes. Par exemple, si vous vous connectez en tant que'root'@'127.0.0.1'
, MySQL changera vous connecter en tant que'root'@'localhost'
.Si c'est le cas
ON
, MySQL verra et se connectera'root'@'127.0.0.1'
et en'root'@'localhost'
tant qu'utilisateurs séparés. Et ils peuvent ou non avoir des mots de passe différents, selon la façon dont ils ont été définis.Donc, tout d'abord, je vérifierais les différences de mot de passe:
mysql> SELECT host,user,password FROM mysql.user WHERE user='root';
Si tel est le cas, vous pouvez les corriger ou poursuivre l'enquête.
Ensuite, je vérifierais
skip_name_resolve
:mysql> show variables like 'skip_name_resolve';
Si c'est le cas
ON
, je saurais où il est placé (par exemple/etc/my.cnf
) et le supprimer, à moins qu'il ne soit nécessaire.J'espère que ceci vous aidera!
la source
J'avais ce problème et je ne pouvais pas le comprendre. J'ai tout essayé en vain.
J'ai trouvé que j'avais un .netrc dans / root / qui contenait des informations.
Je l'ai supprimé et le problème a disparu.
Capable de se connecter à mysql en utilisant mysql -uroot -p sans problème maintenant.
Je sais que c'est un vieux post mais j'espère que cela aide quelqu'un.
la source
Pour moi, changer les autorisations pour qu'elles soient publiquement lisibles sur le répertoire parent de mysql.sock a résolu le problème:
la source
Pour les personnes qui utilisent CageFS avec CloudLinux:
J'ai recréé
/var/lib/mysql
parce que je reconstruisais le serveur MySQL à partir de zéro ...qui a démonté le chemin de cagefs. Je sais que ce n'est pas lié, mais j'utilisais cPanel et CloudLinux. Je n'ai pas pu vérifier pourquoi la connexion socket ne fonctionne pas, et finalement, j'ai réalisé.
ajouter
/var/lib/mysql
à/etc/cagefs/cagefs.mp
(s'il existe déjà, passer à l'étape suivante) et exécuterrésolu le problème
la source
/etc/cagefs/cagefs.mp
cours mais fonctionnaitcagefsctl --remount-all
corrigé. Merci mec!vous devez le définir dans / etc / hosts privé je pense ... ou simplement utiliser 127.0.0.1 parce que c'est la même chose de toute façon, juste un alias.
la source