PDOException SQLSTATE[HY000] [2002] Aucun fichier ou répertoire

je crois que j'ai déployé avec succès mon site (très basique) sur fortrabbit, mais dès que je me connecte à SSH pour exécuter certaines commandes (comme php artisan migrate ou php artisan db:seed ) je reçois un message d'erreur:

[PDOException]
SQLSTATE[HY000] [2002] No such file or directory

à un moment donné, la migration doit avoir fonctionné, parce que mes tables sont là - mais cela n'explique pas pourquoi cela ne fonctionne pas pour moi maintenant.

213
demandé sur stuyam 2013-12-22 01:34:24

28 réponses

le message d'erreur indique qu'une connexion MySQL via socket est essayée (qui n'est pas supportée).

dans le contexte de Laravel (artisan), vous voulez probablement utiliser un environnement différent / le bon. Par exemple: php artisan migrate --env=production (ou n'importe quel environnement). Voir ici .

90
répondu ukautz 2013-12-22 19:08:55

Laravel 4: changer "host" dans le fichier app/config/database.php de "localhost" à "127.0.0.1 "

Laravel 5: Changement "DB_HOST" dans le .env fichier de "localhost" à "127.0.0.1"

j'ai eu exactement le même problème. Aucune des deux solutions n'a fonctionné pour moi. J'ai résolu le problème en changeant le "host" dans le dossier /app/config/database.fichier php de "localhost" à "127.0.0.1".

Je ne sais pas pourquoi" localhost " ne fonctionne pas par défaut mais j'ai trouvé cette réponse dans une question similaire résolue dans un article de symfony2. https://stackoverflow.com/a/9251924/1231563

mise à Jour: Certaines personnes ont demandé pourquoi ce correctif fonctionne donc, j'ai fait un peu de recherche sur le sujet. Il semble qu'ils utilisent différents types de connexion, comme expliqué dans ce post https://stackoverflow.com/a/9715164/1231563

le problème qui s'est posé ici est que" localhost " utilise une socket UNIX et ne peut pas trouver la base de données dans le répertoire standard. Toutefois "127.0.0.1" utilise TCP (Transmission Control Protocol), ce qui signifie essentiellement qu'il fonctionne à travers "l'internet local" sur votre ordinateur étant beaucoup plus fiable que la socket UNIX dans ce cas.

515
répondu stuyam 2017-05-23 12:02:56

j'ai le même problème et J'exécute Mac OS X 10.10 Yosemite. J'ai activé le serveur Apache et PHP qui est déjà fourni avec le système D'exploitation. Puis j'ai configuré la bibliothèque mCrypt pour commencer. Après cela, quand je travaillais avec des modèles et DB j'ai eu l'erreur:

[PDOException]
SQLSTATE[HY000] [2002] No such file or directory

la raison pour laquelle j'ai trouvé est juste parce que PHP et MySQL ne peuvent pas se connecter eux-mêmes. Pour corriger ce problème, je vais suivre les étapes suivantes:

  1. ouvrir un terminal et se connecter à la mysql avec:

    mysql -u root -p

  2. Il vous demandera de passe. Ensuite, une fois que vous obtenez le mysql promt taper la commande suivante:

    mysql> show variables like '%sock%'

  3. , Vous obtiendrez quelque chose comme ceci:

    +-----------------------------------------+-----------------+ | Variable_name | Value | +-----------------------------------------+-----------------+ | performance_schema_max_socket_classes | 10 | | performance_schema_max_socket_instances | 322 | | socket | /tmp/mysql.sock | +-----------------------------------------+-----------------+

  4. conserver la valeur de la dernière ligne:

    /tmp/mysql.sock

  5. dans votre dossier de projet laravel, recherchez la base de données .php fichier vous pouvez configurer les paramètres de connexion DB. Dans la section mysql ajouter la ligne suivante à la fin:

    'unix_socket' => '/tmp/mysql.sock'

  6. vous devez avoir quelque chose comme ceci:

'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'SchoolBoard', 'username' => 'root', 'password' => 'venturaa', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'unix_socket' => '/tmp/mysql.sock', ),

maintenant il suffit de sauvegarder les modifications, et de recharger la page et cela doit fonctionner! J'espère que ça pourrait être utile!

64
répondu Alex Ventura 2015-03-06 18:13:27

j'ai rencontré l'erreur [PDOException] SQLSTATE[HY000] [2002] No such file or directory pour une raison différente. Je venais de terminer la construction d'une nouvelle pile de lampes sur Ubuntu 12.04 avec Apache 2.4.7, PHP v5.5.10 et MySQL 5.6.16. J'ai remonté mes sites et je les ai mis en route. Mais je ne pouvais pas charger mon Laravel 4.2.site basé sur x en raison de la [PDOException] ci-dessus. Donc, j'ai coché php -i | grep pdo et j'ai remarqué cette ligne:

pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock

Mais, dans mon /etc/my.cnf le fichier des chaussettes est en fait dans /var/run/mysqld/mysqld.sock .

donc, j'ai ouvert mon php.ini et définir la valeur pour pdo_mysql.default_socket :

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock

puis, j'ai redémarré apache et vérifié php -i | grep pdo :

pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock

qui l'a réparé pour moi.

42
répondu dcarrith 2014-03-20 03:51:08

la réponse de @stuyam résolu Le" Pas de tel fichier ou répertoire " problème pour moi

brève réponse: changer "host" dans le fichier /app/config/database.fichier php de "localhost" à "127.0.0.1"

mais j'ai eu une erreur" connexion refusée". Si quelqu'un avait le même problème, ma solution pour cela était de mettre à jour l'application/config/local/base de données.fichier php donc le port est 8889:

'mysql' => array(
        'driver'    => 'mysql',
        'host'      => '127.0.0.1',
        'port'      => '8889',
        'database'  => 'databaseName',
        'username'  => 'root',
        'password'  => 'root',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),
39
répondu Marlow 2016-06-29 20:53:52

si vous utilisez Laravel Homestead, assurez-vous d'appeler les commandes sur le serveur.

homestead ssh

ensuite, il vous suffit de cd dans le répertoire de droite et d'y lancer votre commande.

20
répondu Koen B. 2015-03-03 15:04:42

Mamp utilisateur d'activer l'option Autoriser l'accès réseau à MYSQL

enter image description here

15
répondu George John 2016-02-23 09:38:07

ajouter mysql.chemin des chaussettes dans la base de données.fichier php comme ci-dessous exemple

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',

exemple

'mysql' => [
        'driver' => 'mysql',
        'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '8889'),
13
répondu RaviNila 2016-05-14 05:50:13

Dans mon cas, je n'ai eu aucun problème, tout juste oublié de démarrer le service mysql...

sudo service mysqld start

12
répondu Carlos ABS 2015-03-31 13:01:04

Étape 1

trouvez le chemin vers votre unix_socket, pour ce faire, lancez netstat -ln | grep mysql

, Vous devriez obtenir quelque chose comme ceci

unix  2      [ ACC ]     STREAM     LISTENING     17397    /var/run/mysqld/mysqld.sock

l'Étape 2

prenez ça et ajoutez-le dans votre unix_socket param

'mysql' => array(
            'driver'    => 'mysql',
            'host'      => '67.25.71.187',
            'database'  => 'dbname',
            'username'  => 'username',
            'password'  => '***',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'unix_socket'    => '/var/run/mysqld/mysqld.sock' <-----
            ),
        ),

Espère que cela aide !!

10
répondu kyo 2017-02-28 20:16:32

c'est parce que L'AOP traite l'hôte "localhost" spécialement:

Remarque: Unix uniquement: Lorsque le nom d'hôte est "localhost", puis le connexion au serveur se fait via une socket de domaine. Si PDO_MYSQL est compilé avec libmysqlclient puis l'emplacement du fichier socket est compilé à l'emplacement de libmysqlclient. Si PDO_MYSQL est compilé contre mysqlnd, une socket par défaut peut être positionnée à travers le pdo_mysql.default_socket réglage.

(de http://php.net/manual/en/ref.pdo-mysql.connection.php )

changer localhost en 127.0.0.1 va" forcer " l'utilisation de TCP.

Note: mysqli_connect fonctionne très bien avec localhost.

9
répondu Thomas Decaux 2018-03-27 09:04:53

basé sur la réponse de @dcarrith ...

au lieu d'éditer les fichiers de configuration, j'ai créé un alias dans L'emplacement que PHP cherche qui se connecte au vrai mysql.chaussette. ( source )

lancez simplement ces deux commandes (Pas de redémarrage nécessaire):

mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock
8
répondu Justin 2017-04-13 12:13:50

je tourne sur MAMP Pro et j'ai eu ce problème similaire en essayant de migrer (créer des tables db). J'ai essayé quelques-unes de ces suggestions, mais je ne l'ai pas fait pour moi.

donc, simplement (après une heure de recherche sur Google), j'ai ajouté deux choses au fichier /config/database.php.

'port' => '1234',
'unix_socket' => '/path/to/my/socket/mysqld.sock'

fonctionne bien maintenant!

7
répondu anoraq 2015-07-18 10:50:17

à partir de Laravel 5 Le nom d'utilisateur et le mot de passe de la base de données va dans le .fichier env qui existe dans le répertoire du projet, par exemple

DB_HOST=127.0.0.1
DB_DATABASE=db1
DB_USERNAME=user1
DB_PASSWORD=pass1

comme vous pouvez le voir, ces variables d'environnement supplantent les chaînes' forge 'ici, donc les changer n'a pas d'effet:

    'mysql' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'forge'),
        'username'  => env('DB_USERNAME', 'forge'),
        'password'  => env('DB_PASSWORD', ''),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],

plus d'informations ici https://mattstauffer.co/blog/laravel-5.0-environment-detection-and-environment-variables

2
répondu malhal 2015-03-15 00:00:16

j'ai rencontré ce problème en exécutant PHPUnit dans Elixir/Gulp, et Homestead comme mon environnement Vagabond.

Dans mon cas, j'ai édité .fichier de configuration de DB_HOST=localhost à DB_HOST=192.168.10.10192.168.10.10 est l'IP de mon Errance/Homestead hôte.

2
répondu 2015-09-26 17:10:27

Vérifiez votre port avec soin . Dans mon cas, c'était 8889 et j'utilise 8888. remplacer "DB_HOST" de "localhost" par "127.0.0.1" et vice versa

2
répondu ischool.pk 2018-03-04 13:44:11

Il a travaillé, après je change de DB_HOST=localhost à DB_HOST=127.0.0.1 .fichier env

2
répondu NuOne T Attygalle 2018-09-19 06:01:12

si vous utilisez Laravel Homestead, voici les paramètres

(y compris Vagrant-machine virtuelle)

.bash-profil

alias vm="ssh vagrant@127.0.0.1 -p 2222"

de la base de données.php

    'mysql' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', '127.0.0.1'),
        'database'  => env('DB_DATABASE', 'homestead'),
        'username'  => env('DB_USERNAME', 'homestead'),
        'password'  => env('DB_PASSWORD', 'secret'),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],

Terminal

vm

vagrant@homestead:~/Code/projectFolder  php artisan migrate:install
1
répondu ErcanE 2015-06-21 22:22:04

tentative de connexion à localhost:

SQLSTATE[HY000] [2002] No such file or directory

tentative de se connecter à 127.0.0.1:

SQLSTATE[HY000] [2002] Connection refused

OK, il suffit de commenter / supprimer le paramètre suivant de my.cnf (sur OS X 10.5: /opt/local/etc/mysqlxx/my.cnf ) pour obtenir:

[mysqld]
# skip-networking

bien sûr, arrêter et démarrer le serveur MySQL.

1
répondu Anna Logg 2015-09-28 13:28:05

Si quelqu'un cherche encore la réponse, il suffit de consulter votre .fichier env. Pour une raison quelconque laravel créer un .env.exemple de fichier, donc toutes ces réponses n'ont pas fonctionné pour moi. J'ai résolu mon problème renamming .env.exemple pour .env

1
répondu Alberto 2015-12-13 01:20:23

cela m'est arrivé parce que MySQL ne courait pas. MySQL échouait à démarrer parce que j'avais un répertoire /usr/local/etc/my.cnf.d/ manquant.

cela était requis par mon fichier de configuration /usr/local/etc/my.cnf en tant que glob include ( include /usr/local/etc/my.cnf.d/*.cnf ).

tournant mkdir /usr/local/etc/my.cnf.d , puis commençant MySQL, a corrigé le problème.

1
répondu james2doyle 2016-12-14 18:32:31

lors de l'utilisation D'un VirtualMachine assurez-vous que vous SSH dans cette machine et naviguez vers votre dossier D'application et appelez la commande php artisan migrate à partir de là.

0
répondu cmac 2015-04-08 07:22:14

j'ai eu des problèmes d'accès à mon site drupal et j'ai eu un problème exactement comme celui que j'ai résolu en moins de 2 heures. Essayez sur votre ligne de commande et redémarrez votre serveur ou service mysql. Tapez ceci lorsque vous êtes connecté en tant que root ou super user, - service mysqld restart

ça devrait marcher. S'il ne redémarre pas votre serveur web local, - Service httpd restart

ça devrait suffire. Espérons que cela fonctionne pour d'autres environnements. Acclamation.

0
répondu RAWGIT 2015-07-01 08:26:06

dans le cas de mai, j'avais simplement utilisé

vagrant up

au lieu de

homestead up

pour mon installation larvaire de forge à homestead. Je suppose que cela signifiait que le site était servi, mais le serveur MySQL n'a jamais été lancé. Lorsque j'ai utilisé cette dernière commande pour lancer ma boîte vagabonde, l'erreur a disparu.

0
répondu Ben Wilson 2015-08-12 23:50:31

toutes ces réponses semblent lourdes...

je viens de créer un fichier .env ; j'ai édité mon fichier bootstrap/app.php , et j'ai décommenté la ligne suivante...

Dotenv::load(__DIR__.'/../');

Espérons que cela aide quelqu'un

0
répondu MrMesees 2016-04-05 23:57:29

[c'est périmé, les informations de la base de données sont stockées .env maintenant] Plus facile de résoudre le problème en éditant le

app/config/local/database.php

:)

changez ici la configuration de la base de données et ça devrait marcher

0
répondu Mahmood 2016-05-28 02:33:59

dans mon cas, j'exécutais php artisan migrate sur mon terminal mac, quand j'ai eu besoin de SSH dans vagrant et l'exécuter à partir de là. Espérons que l'aide à quelqu'un le mal de tête.

0
répondu Brad 2018-06-06 17:53:00

C'est la bonne réponse pour moi. J'ai désactivé l'option pdo_mysql.default_socket dans mon php.initialisez et définissez l'hôte de la base de données à 127.0.0.1 .

0
répondu user3866731 2018-06-07 09:18:17