PDOException SQLSTATE[HY000] [2002] No such file or directory
Asked Answered
M

38

457

I believe that I've successfully deployed my (very basic) site to fortrabbit, but as soon as I connect to SSH to run some commands (such as php artisan migrate or php artisan db:seed) I get an error message:

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

At some point the migration must have worked, because my tables are there - but this doesn't explain why it isn't working for me now.

Malvaceous answered 21/12, 2013 at 21:34 Comment(3)
Possible duplicate of PHP - MySQL connection not working: 2002 No such file or directoryKibe
sometimes it just because you havent installed mysql yetProthalamium
For me it was setting 'host' => 'mysql', in config/database.php and commenting unix_socket parameter.Nehru
P
168

The error message indicates that a MySQL connection via socket is tried (which is not supported).

In the context of Laravel (artisan), you probably want to use a different / the correct environment. Eg: php artisan migrate --env=production (or whatever environment). See here.

Provencher answered 22/12, 2013 at 19:8 Comment(5)
This was the solution to my problem, one of the developers at our company doesn't use Homestead and connects to mysql via socket. I removed the socket config within my app/database.php file. Problem solvedIntra
I just had to enable mysqli.so extension in php.iniMagyar
I had to add "'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock'" to config/database.phpCollencollenchyma
hello community , i am getting this error even though i am not using laravel can you look at the problem here it is #60796832Springhouse
This also happens when you use socket as MySQL endpoint, and the MySQL service simply does not run.Kanishakanji
P
877

One of simplest reasons for this error is that a MySQL server is not running. So verify that first. In case it's up, proceed to other recommendations:

Laravel 4: Change "host" in the app/config/database.php file from "localhost" to "127.0.0.1"

Laravel 5+: Change "DB_HOST" in the .env file from "localhost" to "127.0.0.1"

I had the exact same problem. None of the above solutions worked for me. I solved the problem by changing the "host" in the /app/config/database.php file from "localhost" to "127.0.0.1".

Not sure why "localhost" doesn't work by default but I found this answer in a similar question solved in a symfony2 post. https://stackoverflow.com/a/9251924

Update: Some people have asked as to why this fix works so I have done a little bit of research into the topic. It seems as though they use different connection types as explained in this post https://stackoverflow.com/a/9715164

The issue that arose here is that "localhost" uses a UNIX socket and can not find the database in the standard directory. However "127.0.0.1" uses TCP (Transmission Control Protocol), which essentially means it runs through the "local internet" on your computer being much more reliable than the UNIX socket in this case.

Perth answered 8/4, 2014 at 4:7 Comment(23)
strange that it was the solution for me too, but i am able to connect from the command line with mysql --host=localhost - that works, but not from PDO.Eighth
I would love to know WHY localhost doesn't work and 127.0.0.1 does??Literate
This worked for me on a MAMP system running a php file on the command line (terminal). It worked as a webpage, but not as a command line file until I changed localhost to '127.0.0.1'Observe
Also see @Marlow 's answer where he adds a port to the config array.Balefire
@Literate I think that is because localhost tries to use socket, while 127.0.0.1 uses TCP.Hundredweight
thanks, this worked for me after changing DB_HOST in the .env to 127.0.0.1 instead of localhost.Jesuit
If you're using Homestead you need to check your Homestead.yaml file for the correct ip address. In the most recent versions of Homestead the default is 192.168.10.10, so using 127.0.0.1 will result in the same error.Lemnos
@SamuelFullman (and other MAMP users) -- For me, I had to add the port number (8889) to the host, i.e., 127.0.0.1:8889. Oddly, the IP address does NOT work for me when accessing my app via web browser, but localhost does -- and vice versa for CLI. :/Isham
@Isham it depends on the port specified in your MAMP preferences, if you go to preferences you can click the button to set the default MAMP port to port 80 and therefore don't need to set a port number to 127.0.0.1. However, if you do have another port set like 8889, you will have to append that like 127.0.0.1:8889. I usually set it to the default port 80 because it is easier. But good catch :)Perth
worked as magic , I also want to assure that the port of mysql have to be 8889Badman
Also try to clear laravel cashe by (php artisan config:clear)Badman
This worked for me too but what if i changed the ip in Homestead.yaml file to 127.0.0.1, would i run into any troubles with homestead?Protuberant
@Picrasma that is actually what it should be set at, I updated the answer because it should be at 127.0.0.1 because that runs locally in the homestead vmPerth
thankyou so much, was trying to fix this for days! (running xampp on mac)Assumptive
A Unix socket file is used if you do not specify a host name or if you specify the special host name localhost. dev.mysql.com/doc/refman/5.7/en/can-not-connect-to-server.htmlDropforge
This worked for me, but only after I shut down the Laravel server, and ran 'php artisan serve' again.Gustatory
@Gustatory whenever you change an env you have to restart Laravel before it will take effect.Perth
Using MAMP Pro - I had to check "Allow network access to MySQL" to make it work.Preconcert
Same solution for Yii2 projects!Erl
changing the HOST parameter in .env worked perfectly on Laravel 5.6Openmouthed
“the "local internet" on your computer being much more reliable than the UNIX socket” AFAIK this is not about reliability but configuration (at least in my case): The access through UNIX socket can be forbidden while TCP works.Foti
in .env set: DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=null DB_DATABASE=yourdatabase DB_USERNAME=youruder DB_PASSWORD=yourpasswordBoser
I deployed laravel project with sail and in my case I had to change localhost/127.0.0.1 to mysql containers name (e.g. myproject_mysql), the funny thing is: migrations and other php artisan database related commands will run only from container, or you have to change env DB_HOST to 127.0.0.1 again before running migrations.Holystone
P
168

The error message indicates that a MySQL connection via socket is tried (which is not supported).

In the context of Laravel (artisan), you probably want to use a different / the correct environment. Eg: php artisan migrate --env=production (or whatever environment). See here.

Provencher answered 22/12, 2013 at 19:8 Comment(5)
This was the solution to my problem, one of the developers at our company doesn't use Homestead and connects to mysql via socket. I removed the socket config within my app/database.php file. Problem solvedIntra
I just had to enable mysqli.so extension in php.iniMagyar
I had to add "'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock'" to config/database.phpCollencollenchyma
hello community , i am getting this error even though i am not using laravel can you look at the problem here it is #60796832Springhouse
This also happens when you use socket as MySQL endpoint, and the MySQL service simply does not run.Kanishakanji
N
115

I got the same problem and I'm running Mac OS X 10.10 Yosemite. I have enabled the Apache Server and PHP that already comes with the OS. Then I just configured the mCrypt library to get started. After that when I was working with models and DB I got the error:

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

The reason I found is just because PHP and MySQL can't get connected themselves. To get this problem fixed, I follow the next steps:

  1. Open a terminal and connect to the mysql with:

    mysql -u root -p
    
  2. It will ask you for the related password. Then once you get the mysql promt type the next command:

    mysql> show variables like '%sock%'
    
  3. You will get something like this:

    +-----------------------------------------+-----------------+
    | Variable_name                           | Value           |
    +-----------------------------------------+-----------------+
    | performance_schema_max_socket_classes   | 10              |
    | performance_schema_max_socket_instances | 322             |
    | socket                                  | /tmp/mysql.sock |
    +-----------------------------------------+-----------------+
    
  4. Keep the value of the last row:

    /tmp/mysql.sock
    
  5. In your laravel project folder, look for the database.php file there is where you configure the DB connection parameters. In the mysql section add the next line at the end:

    'unix_socket' => '/tmp/mysql.sock'
    
  6. You must have something like this:

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

Now just save changes, and reload the page and it must work!

Newcomer answered 6/3, 2015 at 18:13 Comment(15)
The most "straight to issue" solution. Thanx, this fixed me on running Laravel with MAMP proSemaphore
Thanks for this. This worked for me. Using OSX 10.10.5 MAMP ProBrenna
This worked for me as well with MAMP pro and OS X 10.11.x. Ended up being: /Applications/MAMP/tmp/mysql/mysql.sockDethrone
+1. Using "127.0.0.1" in the config instead of "localhost" as Yamartino said in his answer works well but it's quicker with a socket and this answer solves the problem. It's a shame mysql treats "localhost" in such a peculiar way when unix_socket is defined though...Heedless
@GregFerrell Yeah that's true but well... I hope it could be usefulNewcomer
Worked fine on Linux vps, laravel 5!Rodgers
This works like a charm! any idea as to why PHP and MySQL can't communicate?Nailbiting
@Nailbiting I'm not sure but I think it's because of the installation paths of MySQL or for PHP that may varies depending on OS or PHP distributions, I guess!Newcomer
I did everything you said, but had no succes :( actually nothing changed... i'm using docker compose and I have a few docker instances running.. does that change anything?Mitchiner
@GabrielAugusto absolutely that changes a lot since docker instances are isolated from each other and they need special configuration to access a db or a shared db server between docker instances. So I recommend you to digging a bit more into Docker and DB servers. Because that is out of the scope of this answer.Newcomer
This was the solution to the problemCallimachus
Thanks for the answer, worked for me as well. For better maintenance I suggest leaving the config/database.php alone and adding DB_SOCKET = path.to.mysql.lock to the .env fileIs
MySQL treating localhost in a "peculiar way" is because sockets are essentially files, and permissions/everything-security-related can be configured to work much effectively through them, without resolving to TCP. For that reason when you do sudo mysql -u root you don't even need to provide a root password, as sudo acts as root user and grants you root access. Thus, the connections via sockets are more elegant.Donniedonnish
@ShahriyarImanov thanks for the clarification and the constructive comment.Newcomer
if you have tried every other solution with no success, then this solution is your last resort. it worked for me, particularly on Laravel 5.8 on OS XDrury
D
53

I encountered the [PDOException] SQLSTATE[HY000] [2002] No such file or directory error for a different reason. I had just finished building a brand new LAMP stack on Ubuntu 12.04 with Apache 2.4.7, PHP v5.5.10 and MySQL 5.6.16. I moved my sites back over and fired them up. But, I couldn't load my Laravel 4.2.x based site because of the [PDOException] above. So, I checked php -i | grep pdo and noticed this line:

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

But, in my /etc/my.cnf the sock file is actually in /var/run/mysqld/mysqld.sock.

So, I opened up my php.ini and set the value for pdo_mysql.default_socket:

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

Then, I restarted apache and checked php -i | grep pdo:

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

That fixed it for me.

Dimitris answered 20/3, 2014 at 3:51 Comment(2)
This was the fix that worked for me , the problem was that I installed two versions of mysql and removed one , the 127.0.0.1 change didn't work or adding the sock in the config , thanks ! @DimitrisFetter
This helped me find my problem - which was that I was using OSX bundled php, not the MAMP php binary. So make sure you are using the right version of php that points to the correct php.ini, etc. Definite "doh!" moment.Fernandofernas
S
48

The answer from @stuyam solved the "No such file or directory" issue for me

Short answer: Change "host" in the /app/config/database.php file from "localhost" to "127.0.0.1"

But then I had a "Connection refused" error. If anyone had the same issue, my solution for this was to update the app/config/local/database.php file so the port is 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'    => '',
    ),
Satiety answered 31/1, 2015 at 19:0 Comment(1)
In my case, it was 'port' => '33060' but this answer got me there!Balefire
S
30

In my case i had no problem at all, just forgot to start the mysql service...

sudo service mysqld start
Seraphim answered 29/8, 2014 at 16:51 Comment(0)
A
26

If you are using Laravel Homestead, make sure you're calling the commands on the server.

homestead ssh

Then simply cd to the right directory and fire your command there.

Aynat answered 3/3, 2015 at 15:4 Comment(3)
This worked, I was running command from my computer instead of ssh into VM first and running command there.Trudy
I always forget this step. Heh. 1. source ~/.zshrc 2. homestead up --provision 3. homestead sshEdwin
vagrant ssh in my caseSelfinductance
B
24

It worked after I change from DB_HOST=localhost to DB_HOST=127.0.0.1 at .env file

Blackbird answered 19/9, 2018 at 6:1 Comment(3)
This worked, you are right. Do you have any ideas explaining why localhost does not work?Helluva
@Helluva if you're running your app inside a container it will understand 'localhost' as the container, 127.0.0.1 tells it to use the host's dbTarsuss
I also had such an issue, couldn't clear cache or run artisan serveSwanky
P
23

This is because PDO treats "localhost" host specially:

Note: Unix only: When the host name is set to "localhost", then the connection to the server is made thru a domain socket. If PDO_MYSQL is compiled against libmysqlclient then the location of the socket file is at libmysqlclient's compiled in location. If PDO_MYSQL is compiled against mysqlnd a default socket can be set thru the pdo_mysql.default_socket setting.

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

Changing localhost to 127.0.0.1 will "force" the use of TCP.

Note: mysqli_connect is working fine with localhost.

Parthen answered 27/3, 2018 at 9:4 Comment(0)
H
21

Add mysql.sock path in database.php file like below example

'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'),
Hoppe answered 14/5, 2016 at 5:50 Comment(0)
S
20

Mamp user enable option Allow network access to MYSQL

enter image description here

Sideshow answered 23/2, 2016 at 9:38 Comment(0)
C
15

Step 1

Find the path to your unix_socket, to do that just run netstat -ln | grep mysql

You should get something like this

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

Step 2

Take that and add it in your 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' <-----
            ),
        ),

Hope it helps !!

Curse answered 28/2, 2017 at 20:16 Comment(0)
L
14

Building on the answer from @dcarrith ...

Instead of editing the config files, I created an alias in the location that PHP is looking that connects to the real mysql.sock. (source)

Just run these two commands (no restart needed):

mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock
Literate answered 18/10, 2014 at 3:22 Comment(0)
G
9

Just i do one change in .env file

I have following line of code.

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=root
DB_PASSWORD=

Change host name localhost to 127.0.0.1

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=root
DB_PASSWORD=

That is work in my case because that can't find any hostname like localhost

And after changing hostname write following command

php artisan config:clear
php artisan migrate:install
php artisan migrate
Gilud answered 27/8, 2021 at 11:56 Comment(0)
T
8

I'm running on MAMP Pro and had this similar problem when trying to migrate (create db tables). Tried a few of these mentioned suggestions as well but didn't do it for me.

So, simply (after an hour googling), I added two things to the /config/database.php.

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

Works fine now!

Trollop answered 18/7, 2015 at 10:50 Comment(0)
D
7

I had this problems when I was running my application using docker containers.

The solution was put the name of the MySQL service container I was using in docker_compose.yml on DB_HOST. In my case, it was db :

DB_HOST=db

Hope it helps.

Dextro answered 7/1, 2019 at 3:0 Comment(2)
Nice! You save my night kek :)Legislatorial
If you run Laravel app in container you need use container credentials. E.g. mysql expose ports 33333:3306 in for DB_PORT use 3306.Legislatorial
B
4

I had similar problems accessing my Drupal website. I fixed it by opening the command line, and restarting my MySQL server or service:

service mysqld restart

This should work. If it doesn't, restart your local webserver:

service httpd restart

That should be enough. Hope it works for other environments, too. Note that these commands generally require superuser privileges.

Biota answered 1/7, 2015 at 8:26 Comment(0)
V
4

I ran into this problem when running PHPUnit in Elixir/Gulp, and Homestead as my Vagrant enviroment.

In my case I edited the .env file from DB_HOST=localhost to DB_HOST=192.168.10.10 where 192.168.10.10 is the IP of my Vagrant/Homestead host.

Vigen answered 26/9, 2015 at 17:10 Comment(0)
V
4

Check your port carefully . In my case it was 8889 and i am using 8888. change "DB_HOST" from "localhost" to "127.0.0.1" and vice versa

Ventricose answered 4/3, 2018 at 13:44 Comment(1)
Great, thank you, my port was 3306 but my real port is 8889Bibbie
E
4

I had the same problem using Docker and MySQL service name db in docker_compose.yml file:

I added the following in the .env file:

DB_HOST=db

you should also assure that your host is discoverable from the php app.

It was because PHP didn't figure out which host to use to connect.

Express answered 8/3, 2020 at 21:7 Comment(1)
Same issue here, was still using DB_HOST=localhost and got SQLSTATE[HY000] [2002] No such file or directory when changing it to DB_HOST=127.0.0.1, the error changed to SQLSTATE[HY000] [2002] Connection refused. Only when I changed it into the name of the MySQL docker container did it start working, ie: DB_HOST=mysql in my case. Not sure why that works, when other answers claim it has to do with sockets, my guess is some kind of fallback mechanism with incorrect checks throwing misleading errors.Eureetloir
B
3

I got the same problem in ubuntu 18.04 with nginx. By following the below steps my issue has been fixd:

First open terminal and enter into mysql CLI. To check mysql socket location I write the following command.

mysql> show variables like '%sock%'

I got something like the below :

+-----------------------------------------+-----------------------------+
| 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)

In laravel project folder, look for the database.php file in the config folder. In the mysql section I modified unix_socket according to the above table.

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

Now just save changes, and reload the page and it worked.

Bargeman answered 19/1, 2021 at 13:26 Comment(0)
A
2

As of Laravel 5 the database username and password goes in the .env file that exists in the project directory, e.g.

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

As you can see these environment variables are overriding the 'forge' strings here so changing them has no 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,
    ],

More information is here https://mattstauffer.co/blog/laravel-5.0-environment-detection-and-environment-variables

Abisia answered 14/3, 2015 at 23:38 Comment(0)
A
2

Attempt to connect to localhost:

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

Attempt to connect to 127.0.0.1:

SQLSTATE[HY000] [2002] Connection refused

OK, just comment / remove the following setting from my.cnf (on OS X 10.5: /opt/local/etc/mysqlxx/my.cnf) to obtain:

[mysqld]
# skip-networking

Of course, stop and start MySQL Server.

Autarch answered 28/9, 2015 at 13:28 Comment(0)
S
2

solved

in my case it was a logic issue in code, the connection values are in a if statement:

if($_SERVER['HTTP_HOST'] == "localhost")

so the solution was to add a pipe and add 127.0.0.1, that solved the problem for me

if($_SERVER['HTTP_HOST'] == "localhost" || $_SERVER['HTTP_HOST'] == "127.0.0.1")
Seel answered 13/2, 2022 at 15:16 Comment(0)
A
1

If you are using Laravel Homestead, here is settings

(include Vagrant-Virtual Machine)

.bash-profile

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
Auriol answered 21/6, 2015 at 22:22 Comment(0)
O
1

If anyone are still looking for the answer, just check your .env file. For some reason laravel create a .env.example file, so all this answers didn't work for me. I fixed my issue renamming .env.example to .env

Ossify answered 13/12, 2015 at 1:20 Comment(1)
There's no single correct answer to this question as there are a variety of errors that can be made. This is one of them, as is failing to copy the .env file to a remote server. So it's worth checking the .env file on the server where you're trying to run the query to ensure that it both exists and contains the necessary information to make a connection.Matriarch
G
1

This happened to me because MySQL wasn't running. MySQL was failing to start because I had a missing /usr/local/etc/my.cnf.d/ directory.

This was being required by my /usr/local/etc/my.cnf config file as a glob include (include /usr/local/etc/my.cnf.d/*.cnf).

Running mkdir /usr/local/etc/my.cnf.d, and then starting MySQL, fixed the issue.

Gujranwala answered 14/12, 2016 at 18:32 Comment(0)
C
1

In my case, I was running php artisan migrate on my mac terminal, when I needed to ssh into vagrant and run it from there. Hope that helps someone the headache.

Conjure answered 6/6, 2018 at 17:53 Comment(0)
S
1

In my case I had to remove the bootstrap/cache folder and try it again.

My cenario was after a server migration.

UPDATED AND WORKING

  1. Remove folder "cache" from bootstrap (booststrap/cache)
  2. Copy folder "cache" from original folder and paste it in bootstrap
  3. Run these commands: 3.1) php artisan config:cache 3.2) php artisan migrate 3.3) php artisan db:see 3.4) php artisan serve

That's all.

Stinger answered 28/8, 2019 at 21:22 Comment(1)
that solve my problem. I was try to create db using php artisan db:create . although just before this command I have a DB but I was in need to fresh db. , but I faced. there was no single change that affect the mysql connectionTilghman
T
0

When using a VirtualMachine make sure you ssh into that machine and navigate to your App folder and call the php artisan migrate command from there.

Trudy answered 8/4, 2015 at 7:22 Comment(0)
J
0

In may case, I'd simply used

vagrant up

instead of

homestead up

for my forge larval setup using homestead. I'm assuming this meant the site was getting served, but the MySQL server wasn't ever booted. When I used the latter command to launch my vagrant box, the error went away.

Jactitation answered 12/8, 2015 at 23:50 Comment(0)
T
0

All these answers seem like heavy lifting...

I just created a .env file; edited my bootstrap/app.php file, and uncommented the following line...

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

Hope this helps someone

Towe answered 5/4, 2016 at 23:57 Comment(0)
B
0

For anyone trying to create a fresh db connection not on laravel but bumped here seeking for answers to run PDO from the Terminal. This would be of help to you. And you can refactor it to work best for you.

<?php

class db
{
   private $DBHOST = 'localhost'; // you don't need 127.0.0.1
   private $DRIVER = 'mysql';
   private $PORT   = '8888'; // database port. 8888 is mine
   private $DB     = 'example-db';
   private $PASS   = 'example-pass';
   private $USER   = 'root';
   private $SOCKS  = ''; // can fill this or leave blank.


   // - connect (dummy connection)
   private function con()
   {
       if ($this->SOCKS == '')
       {
           // run shell command to get 
           $socks = shell_exec('netstat -ln | grep mysql');
           $socks = trim(substr($socks, strpos($socks, '/')));

           $this->SOCKS = strlen($socks) > 0 ? ';unix_socket='.$socks : '';
       }
       else
       {
          $this->SOCKS = ';unix_socket='.$this->SOCKS;
       }

       $dsn = $this->DRIVER.':host='.$this->DBHOST.';dbname='.$this->DB;

       // add socks
       $dsn .= $this->SOCKS;

       // add port
       $dsn .= (strlen($this->PORT) > 0) ? ';port='.$this->PORT : '';

       // extablish connection
       $con = new PDO($dsn, $user, $pass);

       // return PDO instance.
       return $con;
   }
   // - ends here

   // now you can call $this->con() within class to use connection 
   // would run fine on any terminal

} 

hope it helps!

Bridlewise answered 19/4, 2019 at 1:26 Comment(0)
M
0

My answer is specific to Laravel.

I had this message after creating a new connection in the database.php configuration file to a local Docker MySQL service and setting it as the default connection. I forgot that I was setting a different connection by overwriting it in the Model:

class Model extends \Illuminate\Database\Eloquent\Model
{
    protected $connection;

    public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);
        $this->connection = 'some_other_connection';
    }
...

So even if my default connection in the database.php file was pointing to the right credentials, the model was still using the remote database connection configuration which I had removed from the local environment file.

Markos answered 21/9, 2019 at 11:56 Comment(0)
D
0

To add to @alexventuraio's solution, if you are experiencing this issue on Laravel 5.8, you might want to replace the value of 'unix_socket' in your database config file as thus:

 'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        // 'unix_socket' =>'/var/run/mysqld/mysqld.sock',
        'unix_socket' => env('DB_SOCKET', ''), // replace with this line, so you can always add the mysqld.sock from the dotenv file
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'prefix_indexes' => true,
        'strict' => false,
        'engine' => null,
        'options' => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]) : [],
    ],
Drury answered 30/3, 2022 at 10:38 Comment(0)
H
0

All the existing answers are correct and might work for you. My case was a bit different. I encountered this error when I started a docker project locally using docker-compose up.

The problem for my specific case was that I ran the docker-compose up from a sub-folder instead of the root folder in which the docker-compose file lies.

Make sure you run docker-compose up from the folder where the docker-compose.yml is saved to!

Hazlett answered 19/4, 2022 at 6:55 Comment(0)
D
0

Check your MySQL server is running, if database connection is correct configured.

Doordie answered 7/12, 2022 at 7:30 Comment(0)
F
0

For me I hit this error when testing a remote mysql server using ssl and had forgotten to setup the database connections with the ssl certificate.

Frodina answered 13/3 at 20:40 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.