Troubleshooting "No such file or directory" when running `php app/console doctrine:schema:create`
I am new to Symfony2 (beta4) and Doctrine and am having issues when i try to create the DB schema via command line.
Here's the error:
$ php app/console doctrine:schema:create
开发者_如何转开发
Creating database schema...
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
[ErrorException]
Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock)
in /Applications/MAMP/htdocs/sf-test-2/vendor/doctrine-dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php line 36
The mysql database settings are correctly inserted in the config/parameters.ini file.
And here's the Doctrine configuration in config.yml
# Doctrine Configuration
doctrine:
dbal:
driver: %database_driver%
host: %database_host%
dbname: %database_name%
user: %database_user%
password: %database_password%
orm:
auto_generate_proxy_classes: %kernel.debug%
auto_mapping: true
And the entity (i made only one to test it)
<?php
// src/Acme/NewsBundle/Entity/Article.php
namespace Acme\NewsBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="articles")
*/
class Article
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length="255")
*/
protected $title;
/**
* @ORM\Column(type="text")
*/
protected $body;
/**
* @ORM\Column(type="string", length="255")
*/
protected $author;
/**
* @ORM\Column(type="date")
*/
protected $date;
}
?>
Just today I had a similar situation (but in other context, I was trying to create entities from db).
I solved it simply modifying the database_host
from "localhost"
to "127.0.0.1"
in the parameters.ini file.
I think my Mysql instance is running only via TCP and not socket and because this when use database_host="localhost"
it fails.
Try to add this line
unix_socket: /tmp/mysql.sock
into your config.yml file > doctrine > dbal just after the password line.
I changed 'host'=> 'localhost' to 'host'=> '127.0.0.1' on app/config/database.php and everything is working correctly
I fixed it by following this small tutorial: http://andreys.info/blog/2007-11-07/configuring-terminal-to-work-with-mamp-mysql-on-leopard
[EDIT]: I modified the right php.ini and everything's working fine now.
Now I get the following error:
[Exception]
DateTime::__construct(): It is not safe to rely on the system's timezone settings.
You are *required* to use the date.timezone setting or the date_default_timezone_set() function.
In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier.
We selected 'Europe/Berlin' for 'CEST/2.0/DST' instead
Here's the date.timezone config in php.ini
date.timezone = "Europe/Paris"
I'll try to figure it out myself but if any of you know how to fix it don't hesitate to comment on this. Thanks!
The problem for me was the mysql.default_socket
setting in PHP.INI defaults to a different location than where MySQL actually puts that file.
Instead of editing the config files, I created an alias in the location that PHP is looking that connects to the real mysql.sock.
Just run these two commands (no restart needed):
mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock
Sometimes you may got several solution for location path of mysql.lock. But I think the best solution is just see the location path of mysql using php phpinfo()
function.
Note: if you are not familar with phpinfo()
, then just create a file give any name and include content of that file like this
<?php
phpinfo();
?>
run this file and get the path of mysql.lock file. I think it will help.
Worth checking to see if Mysql is running too.
Too late but hope it can help someone as well.
I am using Vagrant
Just change localhost
to 127.0.0.1
AND change the port to 3333
worked perfectly.
I think just restart the mysql, and apache, that's work for me.
Restarting mysql worked for me:
sudo /etc/init.d/mysql restart
Had the same issue "SQLSTATE[HY000] [2002] No such file or directory" on symfony 3.2.9 on deployment
I fixed it by changing the database_host value from "localhost" to my server IP on my parameters.yml file
but I had this another error message when trying to run commandline by SSH:
[Doctrine\DBAL\Exception\ConnectionException] An exception occured in driver: SQLSTATE[HY000] [2002] Connection refused
I finaly fix it by adding these 2 lines on my config.yml file in Doctrine configuration section :
unix_socket: /var/lib/mysql/mysql.sock
server_version: '5.5'
all my final doctrine configuration is like this:
doctrine:
dbal:
driver: pdo_mysql
host: '%database_host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
unix_socket: /var/lib/mysql/mysql.sock
server_version: '5.5'
charset: UTF8
hopefully this helps
Laravel .env add DB_SOCKET with path to mysql.sock
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=root
DB_PASSWORD=mypassword
DB_SOCKET=/Users/username/Library/Containers/MAMP/mysql/tmp/mysql.sock
or add unix_socket in PDO
PDO('mysql:host=localhost;port=3306;unix_socket=/Users/username/Library/Containers/MAMP/mysql/tmp/mysql.sock', root, mypassword);
精彩评论