web-dev-qa-db-fra.com

Que doit contenir mysqld.sock, pourquoi ne l'ai-je pas?

Est-ce que quelqu'un sait pourquoi mon fichier socket /var/run/mysqld/mysqld.sock Ne serait pas sur mon ordinateur lorsque j'installer (ou réinstaller) MySQL 5.1?

En ce moment, lorsque j'essaie de démarrer un serveur avec mysqld, j'obtiens des erreurs comme Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect, mais la création d'un fichier vierge avec ce nom (comme suggéré sur les forums ubuntu) n'a pas réussi.

J'avais à la fois mysql et postgres qui fonctionnaient bien jusqu'à ce que je passe à natty il y a peu de temps; J'ai passé des heures à parcourir les deux bases de données pour essayer de comprendre ce qui se passe. Je peux abandonner les postgres, mais je ne peux pas travailler sans une copie de travail de mysql.

La partie la plus étrange: j'utilise Kubuntu, et ma compréhension est que KDE utilise mysql pour stocker les autorisations des utilisateurs, etc. Je ne rencontre aucun problème d'autorisations bizarre; puis-je prendre cela pour signifier que (en quelque sorte?) MySQL fonctionne réellement?

Peut-être que ces fichiers socket vivent dans un endroit différent dans natty? Serait-il plus facile de réinstaller simplement le système d'exploitation? À ce stade, je suis ouvert à toutes les suggestions qui cesseront de me faire perdre mon temps.

24
egbutter

Un fichier socket ne contient pas réellement de données, il les transporte. Il s'agit d'un type de fichier spécial et inhabituel créé avec des appels/commandes système spéciaux. Ce n'est pas un fichier ordinaire.

C'est comme un canal que le serveur et les clients peuvent utiliser pour se connecter et échanger des demandes et des données. De plus, il n'est utilisé que localement. Son importance est simplement comme un lieu de rendez-vous convenu dans le système de fichiers.

La création d'un ancien fichier ordinaire et son placement à cet emplacement peuvent en fait interférer avec la création du serveur ... et ainsi empêcher les clients locaux de se connecter au serveur.

Ma recommandation est de supprimer tout fichier que vous placez à l'emplacement. Le fichier socket spécial est créé par le serveur.

19
Paul

Lorsque vous spécifiez Host=localhost, le client mysql essaiera de se connecter au serveur mysql en utilisant un canal nommé unix qui nécessite un .sock fichier.

Cela peut être contourné en spécifiant Host = 127.0.0.1. Cela obligera le client mysql à utiliser TCP pour se connecter au serveur.

Extrait de documentation MySQL :

mysql --Host=127.0.0.1 --port=3306 --user=your_uname --password=your_pass
21
sccott

Une socket est un pseudo-fichier spécial utilisé pour la transmission de données par lecture et écriture, pas pour le stockage de données.

Le fichier socket est créé au démarrage du service et supprimé à la fin du service. L'emplacement du fichier est défini dans /etc/my.cnf ainsi:

[mysqld]
socket=/var/run/mysql/mysql.sock
14
Michael

Dans mon cas, exécuter mysqld_safe a créé un nouveau mysqld.sock fichier.

$ cd /etc/init.d/
$ mysqld_safe

Vous ne recevrez probablement pas d'invite, mais si vous redémarrez votre session, un fichier mysqld.sock sera quelque part. Trouvez-le avec

$ Sudo find / -type s | grep mysqld.sock
8
aviggiano

J'ai eu le même problème avec le mysqld.sock manquant. Je suis allé dans le répertoire contenant mysql, à savoir /usr/bin dans mon cas. Ensuite, j'ai émis la commande

mysql mysql --Host=localhost --password=whatever --port=3306

Le double mysql n'est pas une faute de frappe mais plutôt mysql est une base de données qui sera toujours là dans une nouvelle installation MySQL. Je ne sais pas si --Host, --password ou --port sont nécessaires mais comme cela a fonctionné pour moi en utilisant ces paramètres, je les inclue. Une fois que MySQL est apparu, je suis entré dans la table utilisateur pour définir le mot de passe de root. Une fois MySQL lancé, le fichier socket manquant a été créé. J'espère que cela aide quelqu'un puisque j'ai eu du mal pendant des jours.

2
James

Si vous utilisez nginx php-fastcgi et que vous avez une erreur 502 Bad Gateway, vous devez regarder votre configuration d'hôte virtuel sur le fichier de configuration nginx. Vous devez définir ou corriger le fastcgi_pass paramètre.The fastcgi_pass est la variable pour définir la connexion socket entre nginx et php CGI.

Un autre problème est que le script de démarrage binaire pourrait manquer les entrées suivantes (importantes) ouvertes avec: nano /usr/bin/php-fastcgi

SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid

Le contenu complet de mon script de démarrage/usr/bin/php-fastcgi:

#!/bin/bash

FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid
CHILDREN=6
PHP5=/usr/bin/php5-cgi

/usr/bin/spawn-fcgi -s $SOCKET -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5
1
Aysad Kozanoglu