【问题标题】:CakePHP 2.0 : Database connection "Mysql" is missing, or could not be createdCakePHP 2.0:数据库连接“Mysql”丢失,或无法创建
【发布时间】:2013-12-24 12:01:25
【问题描述】:

在安装 CakePHP 2.0 之后(修改后,我说我在全新安装 cakephp 2.0 时遇到了同样的问题)我发现自己遇到了一个我无法解决的错误。

配置:

服务器:debian weezy 7

用户:测试

结构:/wwwjail/siteroot/test/htdocs/[app/...]

nginx 配置

cat /etc/nginx/sites-available/test

server {
    listen IP:80 default;
    server_name domain.fr;
    access_log /var/log/nginx/test.access.log;
    error_log  /var/log/nginx/test.error.log;

    autoindex off;
    index index.php index.html;
    root /wwwjail/siteroot/test/htdocs/;

    location ~ \.php$ {
                        try_files $uri =404;

                        fastcgi_intercept_errors on;
                        fastcgi_pass unix:/wwwjail/siteroot/test/php-fpm.sock;

                        include /etc/nginx/fastcgi_params;
                        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    }
}

php5-fpm 配置

cat /etc/php5/fpm/pool.d/test.conf

[test]
listen = /wwwjail/siteroot/test/php-fpm.sock
chroot = /wwwjail/siteroot/test/htdocs

user = test
group = test

listen.allowed_clients = 127.0.0.1
listen.owner = test
listen.group = test
listen.backlog = -1
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 200
pm.status_path = /status_31337
request_terminate_timeout = 30s
catch_workers_output = yes
php_value[session.save_path] = /tmp

页面上可见的错误:

Database connection "Mysql" is missing, or could not be created.

Error: An Internal Error Has Occurred.
Stack Trace

    ROOTlibROOTCakeROOTModelROOTDatasourceROOTDboSource.php line 262 → Mysql->connect()
    ROOTlibROOTCakeROOTModelROOTConnectionManager.php line 107 → DboSource->__construct(array)
    ROOTlibROOTCakeROOTModelROOTModel.php line 3221 → ConnectionManager::getDataSource(string)
    ROOTlibROOTCakeROOTModelROOTModel.php line 1108 → Model->setDataSource(string)
    ROOTlibROOTCakeROOTModelROOTModel.php line 3243 → Model->setSource(string)
    ROOTlibROOTCakeROOTModelROOTModel.php line 2696 → Model->getDataSource()
    ROOTappROOTControllerROOTAppController.php line 70 → Model->find(string, array)
    ROOTappROOTControllerROOTChallengesController.php line 57 → AppController->beforeFilter()
    [internal function] → ChallengesController->beforeFilter(CakeEvent)
    ROOTlibROOTCakeROOTEventROOTCakeEventManager.php line 248 → call_user_func(array, CakeEvent)
    ROOTlibROOTCakeROOTControllerROOTController.php line 670 → CakeEventManager->dispatch(CakeEvent)
    ROOTlibROOTCakeROOTRoutingROOTDispatcher.php line 184 → Controller->startupProcess()
    ROOTlibROOTCakeROOTRoutingROOTDispatcher.php line 162 → Dispatcher->_invoke(ChallengesController, CakeRequest, CakeResponse)
    ROOTappROOTwebrootROOTindex.php line 109 → Dispatcher->dispatch(CakeRequest, CakeResponse)
    ROOTindex.php line 43 → require(string)

CakePHP: the rapid development php framework

Nginx 错误日志 nginx:

2013/12/24 12:23:03 [error] 17792#0: *535 open() "/wwwjail/siteroot/test/htdocs/css/default.css" failed (2: No such file or directory), client: myIP, server: domain.fr, request: "GET /css/default.css HTTP/1.1", host: "IP:80", referrer: "http://IP:80/"
2013/12/24 12:23:03 [error] 17792#0: *536 open() "/wwwjail/siteroot/test/htdocs/css/bootstrap.css" failed (2: No such file or directory), client: myIP, server: domain.fr, request: "GET /css/bootstrap.css HTTP/1.1", host: "IP:80", referrer: "http://IP:80/"
2013/12/24 12:23:03 [error] 17792#0: *537 open() "/wwwjail/siteroot/test/htdocs/css/jqplot.css" failed (2: No such file or directory), client: myIP, server: domain.fr, request: "GET /css/jqplot.css HTTP/1.1", host: "IP:80", referrer: "http://IP:80/"
2013/12/24 12:23:03 [error] 17792#0: *538 open() "/wwwjail/siteroot/test/htdocs/js/jqplot.js" failed (2: No such file or directory), client: myIP, server: domain.fr, request: "GET /js/jqplot.js HTTP/1.1", host: "IP:80", referrer: "http://IP:80/"
2013/12/24 12:23:03 [error] 17792#0: *534 open() "/wwwjail/siteroot/test/htdocs/js/holder.js" failed (2: No such file or directory), client: myIP, server: domain.fr, request: "GET /js/holder.js HTTP/1.1", host: "IP:80", referrer: "http://IP:80/"
2013/12/24 12:23:03 [error] 17792#0: *531 open() "/wwwjail/siteroot/test/htdocs/css/cake.generic.css" failed (2: No such file or directory), client: myIP, server: domain.fr, request: "GET /css/cake.generic.css HTTP/1.1", host: "IP:80", referrer: "http://IP:80/"
2013/12/24 12:23:03 [error] 17792#0: *531 open() "/wwwjail/siteroot/test/htdocs/img/cake.power.gif" failed (2: No such file or directory), client: myIP, server: domain.fr, request: "GET /img/cake.power.gif HTTP/1.1", host: "IP:80", referrer: "http://IP:80/"
2013/12/24 12:23:03 [error] 17792#0: *535 open() "/wwwjail/siteroot/test/htdocs/js/jqplot.js" failed (2: No such file or directory), client: myIP, server: domain.fr, request: "GET /js/jqplot.js HTTP/1.1", host: "IP:80", referrer: "http://IP:80/"
2013/12/24 12:23:03 [error] 17792#0: *531 open() "/wwwjail/siteroot/test/htdocs/js/holder.js" failed (2: No such file or directory), client: myIP, server: domain.fr, request: "GET /js/holder.js HTTP/1.1", host: "IP:80", referrer: "http://IP:80/"
2013/12/24 12:23:03 [error] 17792#0: *531 open() "/wwwjail/siteroot/test/htdocs/css/cake.generic.css" failed (2: No such file or directory), client: myIP, server: domain.fr, request: "GET /css/cake.generic.css HTTP/1.1", host: "IP:80", referrer: "http://IP:80/"
2013/12/24 12:23:03 [error] 17792#0: *531 open() "/wwwjail/siteroot/test/htdocs/img/cake.power.gif" failed (2: No such file or directory), client: myIP, server: domain.fr, request: "GET /img/cake.power.gif HTTP/1.1", host: "IP:80", referrer: "http://IP:80/"

关于mysql 数据库凭据正确,用户mysql user-test 存在且完全访问test。*

cat /wwwjail/siteroot/test/htdocs/app/Config/database.php

class DATABASE_CONFIG {

    public $default = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => '127.0.0.1',
        'login' => 'user-test',
        'password' => 'mypassword',
        'database' => 'test',
        'prefix' => '',
        'encoding' => 'utf8'
    );
}

检查与 CakePHP 配置文件的连接(stackoverflow 上的脚本)

<?php
include("app/Config/database.php");
$config= new DATABASE_CONFIG();

$name = 'default';

$settings=$config->{$name};
$dsn = 'mysql:dbname='.$settings['database'].';host='.$settings['host'];
$user = $settings['login'];
$password = $settings['password'];

try {
    $dbh = new PDO($dsn, $user, $password);
    echo "Connection succeeded with dsn: ". $dsn . "\n";
    $sql = 'SELECT id, title FROM posts';
    echo "Here is the contents of the table `posts:";
    foreach ($dbh->query($sql) as $row) {
        print $row['id'] . "\t" . $row['title'] . "\n";
    }
} catch (PDOException $e) {
    echo 'PDO error: ' . $e->getMessage();
}

?>

====> 返回:Connection succeeded with dsn: mysql:dbname=test;host=127.0.0.1 Here is the contents of the tableposts:`

使用 php.ini 检查套接字

*grep -i 'default_socket' /etc/php5/fpm/php.ini*

default_socket_timeout = 60
pdo_mysql.default_socket= /wwwjail/var/run/mysqld/mysqld.sock
mysql.default_socket = /wwwjail/var/run/mysqld/mysqld.sock 
mysqli.default_socket = /wwwjail/var/run/mysqld/mysqld.sock

验证 PDO 扩展是否存在。

var_dump( extension_loaded('pdo_mysql') );

return => bool(true)

我希望我提供了很多关于我的问题的信息。我愿意执行各种操作来测试。 (我认为服务器端配置必然存在问题,尽管此配置也适用于连接到 mysql 的其他基本应用程序)。

真诚的。

【问题讨论】:

    标签: cakephp nginx php chroot


    【解决方案1】:

    在您的 /app/Config/database.php 文件中, 更改以下行:

    'host' => 'localhost',
    

    到:

    'host' => '127.0.0.1',
    

    【讨论】:

      【解决方案2】:

      如果您还没有解决这个问题: 我在我的 ubuntu 13.10 机器上遇到了同样的错误,最新的 xampp 直接从 apachefriends 下载。试试这个:

      找到你的 mysql.sock:

      user@host /opt$ find . -name mysql.sock
      /opt/lampp/var/mysql/mysql.sock
      

      将它添加到你的 cakePHP 数据库配置文件 (cakePHP)/app/Config/database.php

      'unix_socket' => '/opt/lampp/var/mysql/mysql.sock'
      

      对我来说,这最终导致我的蛋糕命令能够在没有“错误:数据库连接“Mysql”丢失或无法创建。”的情况下执行。

      【讨论】:

      • nice 1. 你知道为什么会这样吗?
      【解决方案3】:

      在 database.php 中,您需要为测试数据库创建一个变量数组,如下所示:

      public $test = array(
          'datasource' => 'Database/Mysql',
          'persistent' => false,
          'host' => 'localhost',
          'login' => 'root', // what ever you have as user 
          'password' => '', // what ever you have as pass
          'database' => 'test',
          'prefix' => '',
          'encoding' => 'utf8',
      );
      

      然后至关重要的是确保您有一个名为的空数据库:

      test
      

      该错误消息非常具有欺骗性,实际上应该说“缺少数据库测试”:) 就我而言,这就是问题所在。

      【讨论】:

        【解决方案4】:

        试试这个并确保您使用正确的用户名和密码

        public $default = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'user-test',
                'password' => 'mypassword',
                'database' => 'test',
                'prefix' => '',
                'encoding' => 'utf8'
            );
        

        【讨论】:

        • 我对本地主机也有同样的问题。但是使用测试文件(检查与 CakePHP 的配置文件的连接(在 stackoverflow 上找到的脚本)),现在我没有“使用 dsn 连接成功:mysql:dbname=test;host=127.0.0.1 Here is the content of tableposts:”但“PDO 错误:SQLSTATE[HY000] [2002] 没有这样的文件或目录”..
        【解决方案5】:

        如果设置为空,则通过 phpmyadmin 创建与 mysql 的连接凭据。 这对我有用

        【讨论】:

          猜你喜欢
          • 2013-10-17
          • 2014-08-02
          • 1970-01-01
          • 2014-07-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多