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.8izus 较早的回答确实解决了我服务器上的问题。他建议在Symfony配置文件app/config/parameters.yml
中将参数database_host
从127.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 Pro 的 Mac 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]