[php] SQLSTATE[HY000] [2002] Connection refused within Laravel homestead

Using Mac OS X and Homestead 2.2.1 with Laravel 5.2.

In terminal (within homestead in my project folder) I can do php artisan to see all the available commands. When I try to run php artisan migrate I get a connection error:
SQLSTATE[HY000] [2002] Connection refused


I have setup a Laravel project with these .env settings

DB_HOST=127.0.0.1
DB_DATABASE=tcv
DB_USERNAME=homestead
DB_PASSWORD=secret

I have also tried localhost for DB_HOST and root for DB_USERNAME and DB_PASSWORD. And all possible variations of these put together!


In Sequel Pro (db management application) I CAN connect with these settings

Host       127.0.0.1
Username   homestead
Password   secret
Database   tcv
Port       33060

But this database is obviously empty, because I cant migrate to it from terminal ...

As far as I can make out it is a configuration issue, since I can connect to it with Sequel Pro. But I have honestly no freaking idea what is setup wrong.

Thanks for the help !!

EDIT
For some reason I get the same SQLSTATE[HY000] [2002] Connection refused error when moving my project to MAMP and running php artisan migrate.
Now I am completely lost ...

This question is related to php laravel-5 migration homestead laravel-artisan

The answer is


When Laravel connects to mysql on Homestad box and running commands on local environment:

DB_HOST=127.0.0.1
the app needs DB_PORT=3306
the migrations need DB_PORT=33060 otherwise gives Connection refused
phpunit needs DB_PORT=33060 otherwise gives Connection refused

DB_HOST=localhost
the app works with both DB_PORT=3306 or DB_PORT=33060
migrations cannot run
phpunit cannot run

Have in mind that phpunit takes its values from the .env.testing file, if exists, otherwise from the phpunit.xml file on the root folder of the app


DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=8080
DB_DATABASE=flap_safety
DB_USERNAME=root
DB_PASSWORD=mysql

the above given is my .env

    'mysql' => [
        'driver' => 'mysql',
        'url' => env('DATABASE_URL'),
        'host' => env('DB_HOST', 'mysql'),
       // 'port' => env('DB_PORT', '8080'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', 'mysql'),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'prefix_indexes' => true,
        'strict' => true,
        'engine' => null,
        'options' => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]) : [],
    ],

the above given is my database.php file. i just commented out port from database.php and it worked for me.


After you put all configuration on .env file, if you already run php artisan serve, RESTART IT.


If you are using Homestead then you should be running it with the default mysql port. So instead of using DB_PORT=33060, you should be using DB_PORT=3306 in your .env file. Also, remember to run your php artisan migrate commands in your homestead installation and everything should be ok.

Hope that helps.


In my case, I was having the same error using docker and the trick was in setting in the .env file this DB_HOST=db where db is the name of the container running the database server.


Use localhost instead of 127.0.0.1 (in your .env file), then run command:

php artisan config:cache

The only thing that solved it for me was to put the connection details in config/database.php instead of the .env file. Hope this helps


  1. terminate sqld from task manager
  2. stop MySQL from xampp control panel and restart it

if it still throw the same problem, from root folder run

php artisan cache:clear
php artisan config:cache
php artisan serve
  1. if you still have the problem, check whether you are using multiple copies of sql server, for example through Ubuntu app, if so stop the MySQL server in ubuntu

    sudo service MySQL stop


I just ran into this and found that changing this in the .env file from 127.0.0.1 to localhost fixed it.

DB_HOST=localhost

I was having this problem. When connecting with Sequel Pro, I need to use 33060 as the port, but in the .env file it has to be 3306. I had 33060 in the .env file. Changed it to 3306 and it worked.


I could be because you might have not restarted PHP artisan since long

So After making DB changes and config:clear Tinker works fine

But to make browser refect the new DB connection you need to re-run

php artisan serve


This is a simple fix. Your mysql database has lost its connection to the server. If you are running a local server run this in your terminal:

mysqld

That will reconnect your database. Then (if you are using homebrew) run:

brew services start mysql

This will automatically connect your database on login.


If you are using MAMP on a mac OS add the following line to your mysql database config file

'unix_socket' => env('DB_SOCKET', ''),

and on your .env file add

DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock

I encountered

SQLSTATE[HY000] [2002] Connection refused (SQL: select * from projects)

The cause was that I had not started the MySQL server.

It may help to check that the MySQL is running as the first step in troubleshooting the error.


For me enclosing the credentials in quotes did the trick

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE='zzz'
DB_USERNAME='yyy'
DB_PASSWORD='XXX'

Me, Im using vagrant, yet im executing php artisan outside the box so basically it doesn't have permission


If you are using Homestead like I do, do not forget to ssh into it before running artisan test for example.


It's possible that your mysql hasn't started or is not to the port 3306


I had a similar problem and no suggestions placed here helped me. This what has fixed my problem was to set the application name and database hostname with the same value. In my case, 127.0.0.1 works correctly.

APP_URL=127.0.0.1

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=zzz
DB_USERNAME=yyy
DB_PASSWORD=XXX

If you have your backend and database started on docker

Instead of putting localhost or 127.0.0.1 as DB_HOST put the name of the registered service that indicates your database service in the docker-compose file.

In my case for example I replaced 127.0.0.1 with db because in my docker-compose file I had defined the name of the service for the database as db

My docker-compose looks something like that

services:
    db: <------ This is the name of the DB_HOST
      container_name: admin_db
      image:mysql:5.7.22
    .
    .
    .

In my case this error appeared out of blue. While staring at that mysterious error I've realized, that I was trying to run the command outside of vm...


Okay update it seems the host is not the issue but actually the port.

So its actually the port 3306 for the browser testing and yet for terminal and Sequel Pro 33060. Could it have something to do with adding it in the Homestead.yaml and set it here?

On reading the setup in relation to Laravel it says:

MySQL: 33060 ? Forwards To 3306


I found that my server just needed to be restarted and "bam" it was fixed.


PROBLEM SOLVED

I had the same problem and fixed just by converting DB_HOST constant in the .env File FROM 127.0.0.1 into localhost *JUST DO THIS AS GIVEN IN THE BELOW LINE* DB_HOST = localhost.

No need to change anything into config/database.php

Don't forget to run

php artisan config:clear


Another solution for anyone else who has a problem. I had all the settings correct but for some reason my changes weren't updated. Laravel actually caches the config file (which I find completely stupid).

Here was my solution after updating the configs:

php artisan config:clear


I had the same problem, try this works

DB_HOST=localhost

Examples related to php

I am receiving warning in Facebook Application using PHP SDK Pass PDO prepared statement to variables Parse error: syntax error, unexpected [ Preg_match backtrack error Removing "http://" from a string How do I hide the PHP explode delimiter from submitted form results? Problems with installation of Google App Engine SDK for php in OS X Laravel 4 with Sentry 2 add user to a group on Registration php & mysql query not echoing in html with tags? How do I show a message in the foreach loop?

Examples related to laravel-5

Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required Laravel 5 show ErrorException file_put_contents failed to open stream: No such file or directory Can't install laravel installer via composer Including a css file in a blade template? No Application Encryption Key Has Been Specified How to Install Font Awesome in Laravel Mix Laravel Migration Error: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes Laravel 5.4 redirection to custom url after login How to set the default value of an attribute on a Laravel model laravel 5.3 new Auth::routes()

Examples related to migration

Want to upgrade project from Angular v5 to Angular v6 Laravel 5.4 Specific Table Migration SQLSTATE[HY000] [2002] Connection refused within Laravel homestead Laravel migration table field's type change How can I rename column in laravel using migration? Warning about `$HTTP_RAW_POST_DATA` being deprecated Entity Framework rollback and remove bad migration Migration: Cannot add foreign key constraint Maven is not working in Java 8 when Javadoc tags are incomplete Rails: Adding an index after adding column

Examples related to homestead

SQLSTATE[HY000] [2002] Connection refused within Laravel homestead Access denied for user 'homestead'@'localhost' (using password: YES) Is there a default password to connect to vagrant when using `homestead ssh` for the first time?

Examples related to laravel-artisan

No Application Encryption Key Has Been Specified Laravel 5.4 create model, controller and migration in single artisan command SQLSTATE[HY000] [2002] Connection refused within Laravel homestead ReflectionException: Class ClassName does not exist - Laravel Artisan, creating tables in database Laravel 5 Clear Views Cache Laravel 5 How to switch from Production mode Could not open input file: artisan Laravel 5 - artisan seed [ReflectionException] Class SongsTableSeeder does not exist What are the Differences Between "php artisan dump-autoload" and "composer dump-autoload"?