【问题标题】:symfony2 with doctrine cannot connect to remote mysql database带有教义的symfony2无法连接到远程mysql数据库
【发布时间】:2013-01-12 00:18:33
【问题描述】:

我正在部署我的 symfony2 项目,但我遇到了与远程 mysql 服务器的数据库连接问题。似乎 symfony 仍在尝试连接到本地 mysql 实例(使用套接字而不是 tcp),并且没有考虑到正确设置所在的 parameteres.yml。

parameters.yml

parameters:
  database_driver:   pdo_mysql
  database_host:     subdomain-example.dotcloud.net
  database_port:     44569
  database_name:     db_platform
  database_user:     root
  database_password: [intentionally hidden]

config.yml

imports:
  - { resource: parameters.yml }

doctrine:
  dbal:
    default_connection:       default
    connections:
        default:
            driver:           %database_driver%
            dbname:           %database_name%
            user:             %database_user%
            password:         %database_password%
            host:             %database_host%
            port:             %database_port%
            charset:          UTF8

错误堆栈跟踪(当我尝试清除缓存时由控制台或 http 浏览器显示)

PDOException: SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: YES)
in /var/www/Symfony/app/cache/dev/appDevDebugProjectContainer.php line 2336
at PDO->__construct('mysql:dbname=db_platform', 'root', '****') in /var/www/Symfony/app/cache/dev/appDevDebugProjectContainer.php line 2336
at appDevDebugProjectContainer->getPdoService() in /var/www/Symfony/app/bootstrap.php.cache line 209
at Container->get('pdo') in /var/www/Symfony/app/cache/dev/appDevDebugProjectContainer.php line 3027
at appDevDebugProjectContainer->getSession_Handler_PdoService() in /var/www/Symfony/app/bootstrap.php.cache line 209
at Container->get('session.handler.pdo') in /var/www/Symfony/app/cache/dev/appDevDebugProjectContainer.php line 3053
at appDevDebugProjectContainer->getSession_Storage_NativeService() in /var/www/Symfony/app/bootstrap.php.cache line 209
at Container->get('session.storage.native') in /var/www/Symfony/app/cache/dev/appDevDebugProjectContainer.php line 3014
at appDevDebugProjectContainer->getSessionService() in /var/www/Symfony/app/bootstrap.php.cache line 209
at Container->get('session') in /var/www/Symfony/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/EventListener/SessionListener.php line 52
........

正如您在上面看到的,配置文件中没有“localhost”,并且在错误堆栈跟踪中,构造方法没有将主机和端口数据传递给 PDO 类:

PDO->__construct('mysql:dbname=db_platform', 'root', '****')

我已经手动删除了缓存文件夹。

composer.json

"require": {
    "php": ">=5.3.3",
    "symfony/symfony": "2.1.0",
    "doctrine/orm": ">=2.3.0,<2.4.*-dev",
    "doctrine/doctrine-bundle": ">=2.1",
    "doctrine/mongodb": "1.0.1",
    "doctrine/mongodb-odm-bundle": "3.0.*",
    "twig/extensions": "1.0.*",
    "symfony/assetic-bundle": "2.1.*",
    "symfony/swiftmailer-bundle": "2.1.*", 
    "symfony/monolog-bundle": "2.1.*",
    "sensio/distribution-bundle": "2.1.*",
    "sensio/framework-extra-bundle": "2.1.*",
    "sensio/generator-bundle": "2.1.*",
    .... more
},

有什么建议吗?

提前致谢, 毛罗

【问题讨论】:

  • 我知道你已经清除了你的缓存(删除并重新创建了目录?)但是,愚蠢的问题:你在这里向我们展示的 parameters.yml 是你服务器上的,对吗?
  • 只是猜测,但有时机器不喜欢 root 远程连接。也许尝试不同的 mysql 用户只是为了好玩?
  • 是的,该配置是我服务器上的配置。缓存目录会自动重新创建,我在服务器上没有创建它的 root 权限。另一方面,是的,我尝试过使用另一个数据库用户,但它也没有工作。
  • @carriom 所以你确实删除了缓存目录或者只是运行了缓存清除命令?
  • @cheesemacfly 我确实手动删除了缓存目录,因为 cache:clear 命令执行时提到了 PDO 错误。

标签: mysql symfony doctrine


【解决方案1】:

我可以找出问题所在,是 config.yml 中的 PDO 服务参数:

services:
    pdo:
        class: PDO
        arguments:
            - "mysql:host=%database_host%;port=%database_port%;dbname=%database_name%"
            - %database_user%
            - %database_password%

我必须添加主机和端口参数。

感谢您的回复。
毛罗

【讨论】:

  • 这救了我的培根。谢谢!
【解决方案2】:

在较新版本的 symfony ( > 3 ) 上,您可以简单地执行 (在您的 .env 文件中):

DATABASE_URL=mysql://mysql_user_name:your_password@www.theHost.domainName:3306/your_database

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2013-05-07
    • 1970-01-01
    相关资源
    最近更新 更多