【问题标题】:Symfony 2 SQLSTATE[HY000] [2002] Connection refused ErrorSymfony 2 SQLSTATE [HY000] [2002] 连接被拒绝错误
【发布时间】: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 我试过的形式不行

标签: symfony pdo doctrine dbal


【解决方案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 抛出异常并显示此错误消息。

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

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

    【讨论】:

      【解决方案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:   ~
              

              【讨论】:

                猜你喜欢
                • 2021-07-10
                • 1970-01-01
                • 1970-01-01
                • 2017-05-04
                • 2020-01-22
                • 2017-09-20
                • 2020-03-26
                • 2020-12-04
                • 2020-02-27
                相关资源
                最近更新 更多