Symfony 2 SQLSTATE [HY000] [2002]连接被拒绝错误

时间:2013-10-28 08:19:36

标签: symfony pdo doctrine dbal

我收到类似使用Symfony2的数据库操作的错误。

SQLSTATE[HY000] [2002] Connection refused

parameters.yml

parameters:
  database_driver: pdo_mysql
  database_host: 127.0.0.1
  database_port: '8889'
  database_name: symfony
  database_user: root
  database_password: root
  mailer_transport: smtp
  mailer_host: 127.0.0.1
  mailer_user: null
  mailer_password: null
  locale: tr
  secret: ef9b4381fe75208f060b7c786951242bebcfb3c2
  database_path: /private/var/mysql/mysql.sock

和控制台:

Kemal-Karakass-MacBook-Pro:~ kemalkarakas$ locate mysql.sock
/private/var/mysql/mysql.sock

如何解决错误?

12 个答案:

答案 0 :(得分:33)

我有同样的问题并修改了

database_host: 127.0.0.1

database_host: localhost

in parameters.yml

希望这有助于

答案 1 :(得分:13)

Mac OSX 上使用 Mamp Pro ,解决了我的问题是进入用户界面上的 MySQL 标签并检查选项允许网络访问MySQL

请勿忘记点击保存以更新设置

enter image description here

答案 2 :(得分:12)

您可以在config.yml中使用参数 unix_socket

请参阅完整配置示例:

# Doctrine Configuration
doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                driver:   %database_driver%
                dbname:   %database_name%
                user:     %database_user%
                host:     %database_host%
                password: %database_password%
                unix_socket: /tmp/mysql.sock

答案 3 :(得分:7)

我使用 MAMP 时遇到了同样的问题,因为默认端口不是3306而是8889

您可以在MAMP起始网页中找到该信息。

我的参数

parameters:
    database_driver: pdo_mysql
    database_host: 127.0.0.1
    database_port: '8889'
    database_name: symfony_blog
    database_user: root
    database_password: root
    mailer_transport: smtp
    mailer_host: 127.0.0.1
    mailer_user: null
    mailer_password: null
    locale: en
    secret: 7f03537e81f981683bc773b9ec7113ab5861adec
    database_path: null

答案 4 :(得分:4)

这有点愚蠢但是我在这篇帖子上点击了同样的错误,所以也许这可以帮助别人。

如果你有这个连接拒绝错误,请仔细检查你的数据库是否正常运行,在我的情况下,我只是忘了启动MAMP ......

答案 5 :(得分:2)

在看到答案并自己玩弄之后我发现了问题:

LAMPP的默认安装,MAMPP在my.cnf文件中有以下内容:

skip-networking

这意味着mysql不会监听TCP / IP,因此您可以告诉doctrine尝试64K中的任何端口,并且在您注释掉上面的指令并获取mysql来侦听TCP / IP之前它不会有任何好处端口。

请确保在注释掉skip-networking指令后重新启动LAMPP,MAMPP或重新加载mysql。

答案 6 :(得分:2)

如果在使用虚拟环境时仍有人遇到此问题,我发现您是否尝试在主机上运行数据库命令并遇到"connection refused"错误,请尝试 ssh-into your guest machine 并直接运行命令,以便mysql.sock的路径正确。

(我认为相对路径需要在虚拟客户机上而不是主机上才有意义。)

答案 7 :(得分:2)

这个问题“SQLSTATE [HY000] [2002]没有这样的文件或目录”在部署上的symfony 3.2.9上

我通过在我的parameters.yml文件中将database_host值从“localhost”更改为我的服务器IP来修复它

但是在尝试通过SSH运行命令行时我收到了另一条错误消息:

[Doctrine\DBAL\Exception\ConnectionException]
  An exception occured in driver: SQLSTATE[HY000] [2002] Connection refused

我最后通过在Doctrine配置部分的config.yml文件中添加这两行来修复它:

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

希望这有助于

答案 8 :(得分:1)

使用host:port

配置symfony2 / doctrine以连接到MySQL
  • doctrine.dbal.path: %database_path%
  • 中注明app/config/config.yml
  • database_path
  • 删除/注释掉参数app/config/parameters.yml
  • 检查配置文件中的缩进是否正确
  • 不包含app/config/parameters.yml单引号中的任何值,也不会全部用双引号括起来。

之后您的配置应如下所示:

<强>参数

# app/config/parameters.yml

parameters:
    database_driver:   "pdo_mysql"
    database_host:     "127.0.0.1"
    database_port:     "8889"
    database_name:     "symfony"
    database_user:     "root"
    database_password: "root"

    # comment out or remove
    # database_path: ~

<强>配置

# app/config/config.yml

# ...
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        charset:  UTF8

        # path is for pdo_sqlite: i.e. %kernel.root_dir%/data/data.db3
        # comment it out !
        # path:   ~

答案 9 :(得分:1)

在MAMP上运行,这是对我有用的/app/config/parameters.yml的配置:

parameters:
    database_host: '127.0.0.1'
    database_port: '8889'
    database_name: test
    database_user: root
    database_password: root

我在database_host: localhost失去了一段时间,但没有用。

初学者提示:

不要忘记删除分号;以在php.ini中启用extension=php_pdo_mysql.dll(在application / MAMP / conf / phpX.X.X中 - 检查MAMP设置中的当前版本) 和/或在Macintosh HD / private / etc中的php.ini和/或php.ini.default中(使用聚光灯搜索来查找此隐藏文件)。

答案 10 :(得分:1)

今天,在全新安装Symfony3时,我遇到了同样的错误:

  

SQLSTATE [HY000] [2002]权限被拒绝

安装规范:

  • CentOS Linux 7.2.1511
  • Symfony 3.1.2
  • MariaDB 5.5.47
  • PHP 7.0.8

izus的早期回答确实解决了我服务器上的问题。他建议在Symfony配置文件database_host

中将参数127.0.0.1localhost更改为app/config/parameters.yml

问题的真正根源不在于Symfony配置,而是在数据库服务器内的授权。我通过执行以下SQL查询为此数据库创建了数据库和授权:

CREATE DATABASE user CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON database.* TO user@localhost IDENTIFIED BY 'password';

此查询仅表示主机&#39; localhost&#39;被授权。这不匹配&#39; 127.0.0.1&#39;究竟。数据库服务器拒绝接收连接,Symfony抛出异常并显示此错误消息。

针对这种特定情况的可能解决方案:

  1. 更改database_host参数
  2. 更改数据库服务器内的授权

答案 11 :(得分:0)

在MAMP PRO中,我激活了“允许对mysql的网络访问”,而我的“ php artisan migration”正在为该特殊应用程序工作。