PDOEXCeption SQLSTATE [HY000] [2002] Geen bestand of directory

Ik geloof dat ik mijn (zeer eenvoudige) site met succes heb ingezet, maar zodra ik verbinding heb gemaakt met ssh om enkele opdrachten (zoals php artisan migrateof php artisan db:seed) Ik krijg een foutmelding:

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

Op een gegeven moment moet de migratie hebben gewerkt, omdat mijn tafels er zijn – maar dit verklaart niet waarom het nu niet voor mij werkt.


Antwoord 1, Autoriteit 100%

Het foutbericht geeft aan dat een MySQL-verbinding via socket wordt geprobeerd (die niet wordt ondersteund).

In de context van Laravel (Artisan) wil u waarschijnlijk een andere / de juiste omgeving gebruiken. Bijv.: php artisan migrate --env=production(of welke omgeving). Zie hier .


Antwoord 2, Autoriteit 473%

Laravel 4: Wijzig “host” in de app/config/database.phpbestand van “localhost” naar “127.0.0.1”

Laravel 5 +: Wijzig “db_host” in de .envbestand van “localhost” naar “127.0.0.1”

Ik had exact hetzelfde probleem. Geen van de bovenstaande oplossingen werkte voor mij. Ik heb het probleem opgelost door de “host” in het bestand /App/config/database.php van “localhost” naar “127.0.0.1” te wijzigen.

Niet zeker waarom “localhost” niet standaard werkt, maar ik vond dit antwoord in een vergelijkbare vraag opgelost in een Symfony2-bericht. https://stackoverflow.com/a/9251924/1231563

update:
Sommige mensen hebben gevraagd waarom deze oplossing werkt, dus ik heb een beetje onderzoek gedaan naar het onderwerp. Het lijkt alsof ze verschillende verbindingstypes gebruiken, zoals uitgelegd in dit bericht https://stackoverflow.com/a/9715164/1231563

Het probleem dat zich hier voordeed, is dat “localhost” een UNIX-socket gebruikt en de database niet in de standaardmap kan vinden. “127.0.0.1” gebruikt echter TCP (Transmission Control Protocol), wat in wezen betekent dat het via het “lokale internet” op uw computer loopt, wat in dit geval veel betrouwbaarder is dan de UNIX-socket.


Antwoord 3, autoriteit 66%

Ik heb hetzelfde probleem en ik gebruik Mac OS X 10.10 Yosemite. Ik heb de Apache Server en PHP ingeschakeld die al bij het besturingssysteem worden geleverd. Toen heb ik zojuist de mCrypt-bibliotheek geconfigureerd om aan de slag te gaan. Daarna, toen ik met modellen en DB werkte, kreeg ik de fout:

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

De reden die ik heb gevonden is dat PHP en MySQL zelf geen verbinding kunnen maken.
Om dit probleem op te lossen, volg ik de volgende stappen:

  1. Open een terminal en maak verbinding met de mysql met:

    mysql -u root -p
    
  2. Het zal u om het bijbehorende wachtwoord vragen. Zodra u de mysql-prompt krijgt, typt u het volgende commando:

    mysql> show variables like '%sock%'
    
  3. Je krijgt zoiets als dit:

    +-----------------------------------------+-----------------+
    | Variable_name                           | Value           |
    +-----------------------------------------+-----------------+
    | performance_schema_max_socket_classes   | 10              |
    | performance_schema_max_socket_instances | 322             |
    | socket                                  | /tmp/mysql.sock |
    +-----------------------------------------+-----------------+
    
  4. Behoud de waarde van de laatste rij:

    /tmp/mysql.sock
    
  5. Zoek in uw laravelprojectmap naar het bestand database.phpdaar waar u de DB-verbindingsparameters configureert. Voeg in het gedeelte mysqlde volgende regel toe aan het einde:

    'unix_socket' => '/tmp/mysql.sock'
    
  6. Je moet zoiets hebben als dit:

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

Sla nu gewoon de wijzigingen op en laad de pagina opnieuw en het moet werken!


Antwoord 4, autoriteit 34%

Ik heb de [PDOException] SQLSTATE[HY000] [2002] No such file or directoryFout voor een andere reden. Ik was net klaar met het bouwen van een gloednieuwe lampstapel op Ubuntu 12.04 met Apache 2.4.7, PHP V5.5.10 en MySQL 5.6.16. Ik bewoog mijn sites terug en vuurde ze op. Maar ik kon mijn gebaseerde site van Laravel 4.2.x niet laden vanwege de [PDOException]hierboven. Dus ik heb php -i | grep pdoen zag deze regel:

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

Maar in mijn /etc/my.cnf is het sokbestand eigenlijk in /var/run/mysqld/mysqld.sock.

Dus opende ik mijn php.ini en stel de waarde in voor pdo_mysql.default_socket:

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

Dan, ik heb Apache opnieuw opgestart en gecontroleerd php -i | grep pdo:

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

die het voor mij opgelost.


Antwoord 5, Autoriteit 29%

Het antwoord van @Stuyam loste het probleem “NOY of DISTRIAD” voor mij op

Kort antwoord: wijzig “host” in het bestand /App/config/database.php van “localhost” naar “127.0.0.1”

Maar toen had ik een fout “Connection geweigerd”. Als iemand hetzelfde probleem had, was mijn oplossing hiervoor om het app / config / lokaal / database.php-bestand bij te werken, zodat de poort 8889 is:

'mysql' => array(
        'driver'    => 'mysql',
        'host'      => '127.0.0.1',
        'port'      => '8889',
        'database'  => 'databaseName',
        'username'  => 'root',
        'password'  => 'root',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

Antwoord 6, Autoriteit 17%

Als u Laravel Homestead gebruikt, moet u ervoor zorgen dat u de opdrachten op de server belt.

homestead ssh

Simpelweg CD op de juiste map en vuur uw opdracht daar.


Antwoord 7, Autoriteit 16%

In mijn geval had ik helemaal geen probleem, ik ben net vergeten de MySQL-service te starten …

sudo service mysqld start

Antwoord 8, Autoriteit 13%

Het werkte nadat ik van DB_HOST=localhostnaar DB_HOST=127.0.0.1bij .NV-bestand


Antwoord 9, Autoriteit 13%

Mysql.Sock Path toevoegen in database.php-bestand zoals hieronder voorbeeld

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

EAMPLE

'mysql' => [
        'driver' => 'mysql',
        'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '8889'),

Antwoord 10, Autoriteit 12%

Memberker gebruiker inschakelen Optie Laat netwerktoegang tot MySQL


Antwoord 11, Autoriteit 12%

Dit komt omdat PDO “Localhost” -host speciaal behandelt:

Opmerking: alleen Unix: als de hostnaam is ingesteld op “localhost”, dan is de
verbinding met de server wordt gemaakt via een domeinsocket. Als PDO_MYSQL is
gecompileerd tegen libmysqlclient en vervolgens de locatie van het socketbestand
is bij libmysqlclient op locatie gecompileerd. Als PDO_MYSQL is gecompileerd
tegen mysqlnd kan een standaard socket worden ingesteld via de
pdo_mysql.default_socket instelling.

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

Als u localhost wijzigt in 127.0.0.1, wordt het gebruik van TCP “geforceerd”.

Opmerking: mysqli_connect werkt prima met localhost.


Antwoord 12, autoriteit 8%

Voortbouwend op het antwoord van @dcarrith …

In plaats van de configuratiebestanden te bewerken, heb ik een alias gemaakt op de locatie die PHP zoekt en die verbinding maakt met de echte mysql.sock. (bron)

Voer gewoon deze twee opdrachten uit (herstarten is niet nodig):

mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock

Antwoord 13, autoriteit 7%

Stap 1

Zoek het pad naar je unix_socket, voer daarvoor netstat -ln | grep mysql

Je zou zoiets als dit moeten krijgen

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

Stap 2

Neem dat en voeg het toe aan je unix_socketparameter

'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' <-----
            ),
        ),

Hopelijk helpt het !!


Antwoord 14, autoriteit 5%

Ik gebruik MAMP Pro en had hetzelfde probleem toen ik probeerde te migreren (db-tabellen maken). Ik heb ook een paar van deze genoemde suggesties geprobeerd, maar deed het niet voor mij.

Dus, eenvoudig (na een uur googlen), heb ik twee dingen toegevoegd aan de /config/database.php.

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

Werkt nu prima!


Antwoord 15, autoriteit 4%

Ik had dit probleem toen ik mijn applicatie draaide met docker-containers.

De oplossing was de naam van de MySQL-servicecontainer die ik gebruikte in docker_compose.ymlop DB_HOST. In mijn geval was het db:

DB_HOST=db

Hopelijk helpt het.


Antwoord 16, autoriteit 3%

Controleer uw poort zorgvuldig. In mijn geval was het 8889 en ik gebruik 8888.
verander “DB_HOST” van “localhost” naar “127.0.0.1” en vice versa


Antwoord 17, autoriteit 3%

Ik had soortgelijke problemen bij het openen van mijn Drupal-website. Ik heb het opgelost door de opdrachtregel te openen en mijn MySQL-server of -service opnieuw te starten:

service mysqld restart

Dit zou moeten werken. Als dit niet het geval is, start u uw lokale webserver opnieuw op:

service httpd restart

Dat zou genoeg moeten zijn. Ik hoop dat het ook voor andere omgevingen werkt. Merk op dat deze commando’s over het algemeen superuser-privileges vereisen.


Antwoord 18, autoriteit 2%

Ik kwam dit probleem tegen bij het uitvoeren van PHPUnit in Elixir/Gulp en Homestead als mijn Vagrant-omgeving.

In mijn geval heb ik het .env-bestand bewerkt van DB_HOST=localhostnaar DB_HOST=192.168.10.10waarbij 192.168.10.10het IP is van mijn Vagrant/Homestead-host.


Antwoord 19

Vanaf Laravel 5 komen de gebruikersnaam en het wachtwoord van de database in het .env-bestand dat bestaat in de projectdirectory, bijvoorbeeld

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

Zoals je kunt zien, overschrijven deze omgevingsvariabelen de ‘forge’-tekenreeksen hier, dus het wijzigen ervan heeft geen effect:

   '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,
    ],

Meer informatie vindt u hier https://mattstauffer.co/ blog/laravel-5.0-environment-detectie-en-environment-variables


Antwoord 20

Poging om verbinding te maken met localhost:

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

Poging om verbinding te maken met 127.0.0.1:

SQLSTATE[HY000] [2002] Connection refused

OK, reageer alleen de volgende instelling van My.cnf (op OS X 10.5: /opt/local/etc/mysqlxx/my.cnf) om te verkrijgen:

[mysqld]
# skip-networking

Natuurlijk, stop en start MySQL Server.


Antwoord 21

Ik had hetzelfde probleem met Docker en MySQL Service Name dbin Docker_compose.yml-bestand:

Ik heb het volgende toegevoegd in de .envbestand:

DB_HOST=db

U moet ook verzekeren dat uw host wordt ontdekt in de PHP-app.

Het was omdat PHP niet uitvond welke host om te gebruiken om verbinding te maken.


Antwoord 22

Ik heb hetzelfde probleem in Ubuntu 18.04 met NGINX. Door de onderstaande stappen te volgen, is mijn probleem fixd:

Eerste open terminal en ga naar MySQL CLI. Om MySQL Socket Locatie te controleren, schrijf ik de volgende opdracht.

mysql> show variables like '%sock%'

Ik heb zoiets als de onderstaande:

+-----------------------------------------+-----------------------------+
| Variable_name                           | Value                       |
+-----------------------------------------+-----------------------------+
| mysqlx_socket                           | /var/run/mysqld/mysqlx.sock |
| performance_schema_max_socket_classes   | 10                          |
| performance_schema_max_socket_instances | -1                          |
| socket                                  | /var/run/mysqld/mysqld.sock |
+-----------------------------------------+-----------------------------+
4 rows in set (0.00 sec)

Let in de map Laravel Project, zoek naar het bestand database.php in de FIGN-map. In het gedeelte MySQL heeft I Unix_Socket volgens de bovenstaande tabel gewijzigd.

'mysql' => array(
        'driver'    => 'mysql',
        'host'      => '127.0.0.1',
        'database'  => 'database_name',
        'username'  => 'username',
        'password'  => 'password',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'unix_socket' => '/var/run/mysqld/mysqld.sock',
    ),

Sla nu gewoon wijzigingen op en herlaad de pagina en het werkte.


Antwoord 23

Als u Laravel Homestead gebruikt,
Hier zijn instellingen

(inclusief vaag-virtuele machine)

.Bash-profiel

alias vm="ssh [email protected] -p 2222"

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

Antwoord 24

Als iemand nog steeds op zoek is naar het antwoord, kijk dan in je .env-bestand. Om de een of andere reden maakt laravel een .env.example-bestand, dus al deze antwoorden werkten niet voor mij. Ik heb mijn probleem opgelost door .env.example te hernoemen naar .env


Antwoord 25

Dit is mij overkomen omdat MySQL niet actief was. MySQL startte niet omdat ik een /usr/local/etc/my.cnf.d/directory had.

Dit werd vereist door mijn /usr/local/etc/my.cnfconfiguratiebestand als glob include (include /usr/local/etc/my.cnf.d/*.cnf).

Door mkdir /usr/local/etc/my.cnf.duit te voeren en vervolgens MySQL te starten, werd het probleem opgelost.


Antwoord 26

In mijn geval draaide ik php artisan migreren op mijn mac-terminal, toen ik naar zwerver moest sshten en het vanaf daar moest uitvoeren. Ik hoop dat dat iemand de hoofdpijn helpt.


Antwoord 27

In mijn geval moest ik de bootstrap/cache-map verwijderen en het opnieuw proberen.

Mijn hoogtepunt was na een servermigratie.


Antwoord 28

Als je een VirtualMachine gebruikt, zorg er dan voor dat je naar die machine ssht en naar je App-map navigeert en vanaf daar de opdracht php artisan migreren oproept.


Antwoord 29

In sommige gevallen had ik gewoon

. gebruikt

vagrant up

in plaats van

homestead up

voor mijn smidse larvale setup met behulp van homestead. Ik neem aan dat dit betekende dat de site werd bediend, maar dat de MySQL-server nooit is opgestart. Toen ik het laatste commando gebruikte om mijn zwerverbox te starten, verdween de fout.


Antwoord 30

Al deze antwoorden lijken zwaar tillen…

Ik heb zojuist een .env-bestand gemaakt; heb mijn bestand bootstrap/app.phpbewerkt en de volgende regel verwijderd…

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

Ik hoop dat dit iemand helpt

Other episodes