Устранение неполадок "Нет такого файла или каталога" при запуске `php app/console doctrine:schema:create`
Я новичок в Symfony2 (бета4) и Doctrine, и у меня возникают проблемы, когда я пытаюсь создать схему БД через командную строку.
Вот ошибка:
$ 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
Настройки базы данных mysql правильно вставлены в файл config/parameters.ini.
А вот конфигурация Doctrine в 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
И сущность (я сделал только один, чтобы проверить это)
<?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;
}
?>
11 ответов
Я исправил это, следуя этому небольшому руководству: http://andreys.info/blog/2007-11-07/configuring-terminal-to-work-with-mamp-mysql-on-leopard
[РЕДАКТИРОВАТЬ]: Я изменил правильный php.ini, и теперь все работает нормально.
Теперь я получаю следующую ошибку:
[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
Вот конфиг date.timezone в php.ini
date.timezone = "Europe/Paris"
Я постараюсь выяснить это сам, но если кто-то из вас знает, как это исправить, не стесняйтесь комментировать это. Спасибо!
Слишком поздно, но я надеюсь, что это может кому-то помочь.
Просто сегодня я попал в похожую ситуацию (но в другом контексте я пытался создать сущности из БД).
Я решил это, просто изменив de database_host с "localhost" на "127.0.0.1" в файле parameters.ini.
Я думаю, что мой экземпляр Mysql работает только через TCP, а не через сокет, и потому что при использовании database_host="localhost" происходит сбой.
Попробуйте добавить эту строку
unix_socket: /tmp/mysql.sock
в ваш файл config.yml> doctrine > dbal сразу после строки пароля.
Я изменил "host" => "localhost" на "host" => "127.0.0.1" в app/config/database.php и все работает правильно
Проблема для меня была mysql.default_socket
установка в PHP.INI по умолчанию отличается от места, где MySQL фактически помещает этот файл.
Вместо того, чтобы редактировать файлы конфигурации, я создал псевдоним в месте, которое ищет PHP, который соединяется с настоящим mysql.sock.
Просто запустите эти две команды (перезагрузка не требуется):
mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock
Перезапуск MySQL работал для меня:
sudo /etc/init.d/mysql restart
Я думаю, просто перезапустите MySQL и Apache, это работа для меня.
Laravel .env добавляет DB_SOCKET с путем к 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
или добавьте unix_socket в PDO
PDO('mysql:host=localhost;port=3306;unix_socket=/Users/username/Library/Containers/MAMP/mysql/tmp/mysql.sock', root, mypassword);
При развертывании Symfony 3.2.9 возникла та же проблема "SQLSTATE[HY000] [2002] Нет такого файла или каталога" ".
Я исправил это, изменив значение database_host с "localhost" на IP-адрес моего сервера в файле settings.yml
но у меня было это другое сообщение об ошибке при попытке запустить командную строку по SSH:
[Doctrine \ DBAL \ Exception \ ConnectionException] Исключительная ситуация в драйвере: SQLSTATE[HY000] [2002] Соединение отклонено
Я наконец исправляю это, добавив эти две строки в мой файл config.yml в разделе конфигурации Doctrine:
unix_socket: /var/lib/mysql/mysql.sock
server_version: '5.5'
все мои последние настройки доктрины таковы:
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
надеюсь, это поможет
Иногда вы можете получить несколько решений для пути местоположения mysql.lock. Но я думаю, что лучшее решение - это просто увидеть путь расположения mysql с помощью php phpinfo()
функция.
Примечание: если вы не знакомы с phpinfo()
, затем просто создайте файл, дайте любое имя и включите содержимое этого файла, как это
<?php
phpinfo();
?>
запустите этот файл и получите путь к файлу mysql.lock. Я думаю, что это поможет.
Слишком поздно, но надеюсь, что это может помочь кому-то.
Я использую Vagrant
Просто поменяй localhost
в 127.0.0.1
И изменить порт на 3333
работал отлично.