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

Posted

技术标签:

【中文标题】Symfony 2 SQLSTATE [HY000] [2002] 连接被拒绝错误【英文标题】:Symfony 2 SQLSTATE[HY000] [2002] Connection refused Error 【发布时间】:2013-11-06 22:31:01 【问题描述】:

我收到一个错误,比如使用 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

我该如何解决这个错误?

【问题讨论】:

您确定可以使用用户名/密码root:root 连接到127.0.0.1:8889 上的MySQL 吗?默认 MySQL 端口 3306 btw. 是的,我确定尝试 $conn = new PDO('mysql:host=127.0.0.1;dbname=symfony; port=8889', 'root','root'); catch (PDOException $e) echo $e->getMessage(); $sql = "SELECT * FROM Pages"; foreach ($conn->query($sql) as $row) echo $row['name'].''; 它正在工作 尝试注释掉database_path 指令 - 你想通过127.0.0.1:8889 或套接字连接吗?如果您想使用套接字 - 您是否将 MySQL 配置为使用此套接字位置并尝试通过它进行连接? ... 并删除端口周围的单引号 ' :) 数据库路径:null 我试过的形式不行 【参考方案1】:

我在使用 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

【讨论】:

我使用的是 OSX,我刚刚在终端中启动了 mysql,然后输入了SHOW VARIABLES WHERE Variable_name = 'port';。端口号是 8889,我在 parameters.yml 中输入它并最终建立连接。【参考方案2】:

在 MAMP PRO 中,我已激活“允许网络访问 mysql”,并且我的“php artisan migrate”现在正在为该特殊应用程序工作。

【讨论】:

谢谢,我需要激活此设置以通过 localhost 以外的不同(虚拟)主机名从 PHP 连接到 MySQL【参考方案3】:

在部署 symfony 3.2.9 时遇到此问题“SQLSTATE[HY000] [2002] No such file or directory”

我通过将我的 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

希望这会有所帮助

【讨论】:

【参考方案4】:

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

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

安装规格:

CentOS Linux 7.2.1511 Symfony 3.1.2 MariaDB 5.5.47 PHP 7.0.8

izus 较早的回答确实解决了我服务器上的问题。他建议在Symfony配置文件app/config/parameters.yml中将参数database_host127.0.0.1改为localhost

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

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

这个查询意味着只有主机 'localhost' 被授权。这与 '127.0.0.1' 不完全匹配。数据库服务器拒绝传入的连接,Symfony 抛出异常并显示此错误消息。

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

    更改 database_host 参数 更改数据库服务器内部的授权

【讨论】:

【参考方案5】:

在 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 中(使用聚光灯搜索来查找此隐藏文件)。

【讨论】:

【参考方案6】:

在使用 Mamp ProMac OSX 上,解决问题的方法是转到 UI 上的 MySQL 选项卡并检查选项允许网络访问 MySQL

别忘了点击保存来更新设置

【讨论】:

这是当前的问题! 我认为这为我节省了几个小时!谢了。 这是问题所在。谢谢!【参考方案7】:

这有点愚蠢,但我在谷歌上搜索了同样的错误,所以也许这可以帮助某人。

如果您遇到此连接被拒绝错误,请仔细检查您的数据库是否已启动并正在运行,在我的情况下,我只是忘记启动 MAMP...

【讨论】:

【参考方案8】:

如果有人在使用虚拟环境时仍然遇到这个问题,我发现如果您尝试在主机上运行数据库命令并遇到"connection refused" 错误,请尝试ssh-ing 到您的客户机 并直接运行命令,这样 mysql.sock 的路径就正确了。

(我想相对路径需要在虚拟客户机上是有道理的,而不是在主机上)。

【讨论】:

【参考方案9】:

我有同样的问题,并修复它改变

database_host: 127.0.0.1

database_host: localhost

在parameters.yml中

希望这会有所帮助

【讨论】:

这就是解决方案 在更高版本的 Symfony 中,这也可能在你的 .env 文件中,特别是 DATABASE_URL【参考方案10】:

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

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

skip-networking

这意味着 mysql 不会侦听 TCP/IP,因此您可以告诉教义尝试 64K 中的任何端口,除非您注释掉上面的指令并让 mysql 侦听 TCP/IP,否则它不会有任何好处端口。

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

【讨论】:

【参考方案11】:

您可以在 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

【讨论】:

如上面的 cmets 所述,他想通过 ip:port 连接而不是通过套接字,但这肯定对其他人有帮助:)【参考方案12】:

配置 symfony2/doctrine 以使用 host:port 连接到 MySQL

app/config/config.yml 中注释掉doctrine.dbal.path: %database_path%app/config/parameters.yml 中删除/注释掉参数database_path 检查配置文件的缩进是否正确 不将任何值括在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:   ~

【讨论】:

以上是关于Symfony 2 SQLSTATE [HY000] [2002] 连接被拒绝错误的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 5 SQLSTATE [HY000] [2002] 在主机上发送项目后

SQLSTATE[HY000]:在 symfony 中创建表的一般错误

Symfony 错误:[PDOException] SQLSTATE[HY000] [2002] 没有这样的文件或目录

Symfony4 / Docker:SQLSTATE [HY000] [2002]连接被拒绝

Symfony 4 |教义 |驱动程序发生异常:SQLSTATE[HY000] [2002] Connection denied

symfony2 中的 MySQL (PDO) 出错:驱动程序中发生异常:SQLSTATE [HY000] [1049]