【问题标题】:Laravel failing to connect to DB after 4.2 upgradeLaravel 4.2 升级后连接数据库失败
【发布时间】:2014-07-30 11:01:40
【问题描述】:

我刚刚使用此处推荐的步骤将我的 Laravel 安装从 4.1.(something) 升级到了 4.2.7:http://laravel.com/docs/upgrade

现在我在每个页面上都收到此错误:

PDOException (2002) 
SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '' (111)

MySQL 不在本地运行,但它不应该在本地运行。我没有连接到本地 MySQL 的任何配置,我的开发 SQL 服务器是远程的。为什么要连接到本地?

是否有一些升级指南中未提及的配置更改?在 4.1 中一切都很好。

来自我的app/config/database.php 文件:

'default'     => 'mysql',
...
'connections' => array(
    'mysql'       => array(
        'driver'        => 'mysql',
        'host'          => 'myrealdb.us-east-1.rds.amazonaws.com',
        'database'      => 'myrealdbname',
        'username'      => 'myrealuser',
        'password'      => 'myrealpass',
        'charset'       => 'utf8',
        'collation'     => 'utf8_unicode_ci',
        'prefix'        => '',
        'database_port' => '3306',
        'unix_socket'   => '',
    ),
    ...
);

我试过php artisan clear-compiledphp artisan dump-autoload 以防万一。没有效果。

【问题讨论】:

  • 你配置了哪些环境?
  • 我还没打算把它分开,我是唯一的开发者,本地和集成环境共享一个数据库。所以为了回答你的问题,我只有默认的“生产”环境。

标签: mysql laravel laravel-4


【解决方案1】:

编辑:我提交了一个已合并到 4.2 分支的修复程序。您不必再担心这个错误了。

我明白了!这似乎是 Laravel 使用数据库配置方式的改变,我希望这个答案对其他人有所帮助。

简短的版本是:如果您的连接配置与我的一样(在问题中),请从数组中删除 unix_socket 条目。

以前,我总是复制和编辑connections 数组中的默认条目,将unix_socket 参数留空。显然,现在有一个检查假设unix_socket 存在,它应该使用套接字 DSN 字符串。我的配置中的空字符串通过了检查。您可以在/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php 中看到这是如何发生的。函数getDsngetSocketDsngetHostDsn 讲述了这个故事。

粘贴,因为这最终会改变:

protected function getDsn(array $config)
{
    return isset($config['unix_socket']) ? $this->getSocketDsn($config) : $this->getHostDsn($config);
}
...
protected function getSocketDsn(array $config)
{
    extract($config);

    return "mysql:unix_socket={$config['unix_socket']};dbname={$database}";
}
...
protected function getHostDsn(array $config)
{
    extract($config);

    return isset($config['port'])
        ? "mysql:host={$host};port={$port};dbname={$database}"
        : "mysql:host={$host};dbname={$database}";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多