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

还有其他几篇关于此的帖子,但似乎没有一个答案对我有用。

当我在本地机器上导航到 CakePHP 页面时,出现了一个错误:

Cake 无法连接到数据库。数据库连接 “Mysql”丢失,或无法创建。

当我在 home.ctp 中运行 this helpful code 时,我得到以下响应:

错误!:SQLSTATE[42000] [1049] 未知数据库“测试”

但是,我的Users/Ben/Sites/myapp/app/Config/database.php 看起来像这样(我将 MAMP 设置为在 Users/Ben/Sites 中查找文档根目录):

<?php
class DATABASE_CONFIG {

    public $default = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'Ben',
        'password' => 'mypass',
        'database' => 'CV',
    );
}

我创建了一个名为Ben 的mysql 用户,密码为mypass,并在其下创建了一个名为CV 的数据库。此外,我在任何地方都找不到提到test 数据库。帮忙?

【问题讨论】:

  • 我收到了同样的错误消息,在我的情况下,更改整个模型目录的权限有很大帮助。

标签: php mysql macos cakephp mamp


【解决方案1】:

尝试添加套接字:

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',

【讨论】:

  • 只是让你不知道在哪里添加这个,放在你的数据库配置的最后一行(例如默认)......我例如使用 XAMPP,文件在这里: /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
  • 那是正确的,我想从阅读这个问题中得到很多东西。 :)
  • 添加这个允许我的 Cron 作业在运行 XAMPP 的 Mac 上执行。谢谢!
  • 仅供参考,这也适用于我的 XAMPP 安装,除非我必须放置 /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
  • 不是每个人都在使用 xampp(尤其是对于那些使用 OS X 的人)。找出你的 mysql.sock 在哪里。我使用的是 OS X 10.9+,它是:'unix_socket' => '/tmp/mysql.sock',Apple 一直在更改 mysql.sock 的位置。包括该行作为 $default 数组的最后一部分
【解决方案2】:

unix_socket 的替代方法(特别是对于 OS X 用户)是将 localhost 替换为 127.0.0.1

如下:

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

【讨论】:

  • 不幸的是,如果您的数据库托管在外部,这无关紧要。 :-(
  • @UncaAlby,很明显。我们可以做什么! :-D 问题涉及本地环境...
【解决方案3】:

编辑php.ini 并添加:

extension=php_pdo_mysql.dll 

然后重启你的网络服务器

【讨论】:

  • 谢谢..这对我有用。我正在使用 cakePHP 2.5.4、IIS 8、PHP 5.4.24
  • 这对我来说也适用于 PHP 5.5.9 的旧 Cake 2.6.1 项目。
【解决方案4】:

在 Mac 上,使用 MAMP 作为开发平台,正确的解决方案是使用 Domingo Casarrubio 解决方案。

unix_socket 参数添加到您的数据库配置中。

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',

【讨论】:

  • 您能解释一下原因吗?
  • @VictorAugusto 在 database.php 中使用 'localhost' 作为主机将导致 CakePHP 尝试连接到本地套接字文件。 Related
【解决方案5】:

如果您的连接数据库用户没有适当的权限,也可能导致此错误。我相信您只需要最少的 INSERT、SELECT、UPDATE 和 DELETE。

始终检查用户名/密码首先检查用户权限,因为 CakePHP 很可能会给出一个模糊的数据库连接错误。

【讨论】:

    【解决方案6】:

    我注意到您在一年前就问过这个问题,现在很可能已经解决了这个问题。但是,对于那些在尝试在 XAMPP 上安装 CakePHP 时遇到同样问题的人,您所要做的就是将 'login' 更改为 'root',即 XAMPP 的默认登录,并将 'password' 保留为 '',即空白的。您的 database.php 文件中的完整代码应如下所示:

    public $default = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'root',
        'password' => '',
        'database' => 'ckblog',//replace with your own database name
        'prefix' => '',
        //'encoding' => 'utf8',
    );
    

    就是这样。

    【讨论】:

    • 谢谢!它有帮助!我正在使用统一服务器。
    • 兜圈子试图让我的 Bitnami 与我的 Windows MySql 数据库对话。谢谢!我还使用了我的供应商文件夹作为 cakephp 的 lib 源代码。
    【解决方案7】:

    我遇到了同样的问题,最终发现这是由于 CakePhp 不接受我使用带密码的用户,即使该用户是在 PHPMyAdmin 中创建的。我必须使用没有密码的用户“root”。

    我在对文件/lib/Cake/Error/exceptions.php进行以下更改后发现了这一点。

    原行:

    protected $_messageTemplate = 'Database connection "%s" is missing, or could not be created.';
    

    改为这个(注意从单引号到双引号的变化):

    protected $_messageTemplate = "Database connection \"%s\" is missing, or could not be created:\n    %s";
    

    这将为您提供问题的原因,以便您可以正确更改原因。

    【讨论】:

    • 惊人的提示。这将告诉您此错误的确切原因。这应该有更多的选票。
    • @SimonEast 我同意。为什么他们不将其包含在开箱即用的原始消息中?每当您遇到错误时,您都需要尽可能多的相关信息,以便您可以正确修复它。如果您害怕向黑客泄露太多信息,请将其写到某个地方的日志文件中。
    【解决方案8】:

    自从升级到 OSX Yosemite 并插入以下行后,我就遇到了这个问题:

     'unix_socket' => '/tmp/mysql.sock'
    

    【讨论】:

    • 前两个答案大致是这样说的。
    【解决方案9】:

    可能是缺少 mysql PDO 支持。

    以 root 身份(或使用 sudo):

    apt-get install php5-mysql
    

    【讨论】:

      【解决方案10】:

      只是为了帮助 Ubuntu 用户: 我在我的 ubuntu 13.10 机器上遇到了同样的错误,最新的 xampp 直接从 apachefriends 下载。尝试了我能找到的关于此错误的每篇文章中的大部分内容,但没有尝试特定于 mac 的内容。 最后,修复恰好与此处选择的答案相同:

      找到 mysqld 为程序连接创建的套接字:

      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”丢失或无法创建。”的情况下执行。

      【讨论】:

        【解决方案11】:

        因为,蛋糕烘焙使用 unix socket 连接数据库
        因此您需要为连接字符串添加 unix_socket。
        您必须确认在 WAS 中存储 mysql.sock 的位置
        示例:在我的情况下,我在 MACOS 10.11 上使用 xampp
        (编辑文件 Config/database.php)

        public $default = array(
          ‘datasource’ => ‘Database/Mysql’,
          ‘persistent’ => false,
          ‘host’ => ‘localhost’,
          ‘login’ => ‘root’,
          ‘password’ => ‘root’,
          ‘database’ => ‘cakephp’,
          ‘encoding’ => ‘utf8’,
          ‘unix_socket’ => ‘/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock’
        );
        

        终于,这对我有用!

        【讨论】:

          【解决方案12】:

          最后为我做了什么,我在我的数据库中创建了一个表,但是里面没有数据。

          为了让 CakePHP 识别 MySql 连接,必须有一个包含数据的表。

          【讨论】:

          • 这根本不是真的。 -1.
          • 这解决了我的问题。 CakePHP 有正确的凭据,但我的数据库不存在。如果您查看 Cake 的源代码,您会发现如果数据库不存在,则没有检查。
          【解决方案13】:

          您可能需要在 php 文件中创建表...打开 phpMyAdmin 并检查以确保它们的数据库 CV 存在。

          【讨论】:

            【解决方案14】:

            这是你的模型。打开它肯定有下面这行

            public $useDbConfig = 'local';
            

            这会覆盖全局配置并将其设置回本地

            【讨论】:

            • 小心。除非您确切知道这条线在做什么,否则这可能会在以后给您带来问题。
            【解决方案15】:

            我尝试将http://php.net/manual/en/pdo.connections.php 的示例 2 中的代码拼接到 /app/View/Pages/home.ctp 中。我必须修复 PDO 构造函数的参数并更改查询中表的名称。示例 2 代码返回错误“错误!:找不到驱动程序”。根据 King Jk 的回答,当我开始怀疑 php_pdo_mysql.so 可能在哪里时,我试图修改 php.ini。 http://php.net/pdo_mysql 展示了它是如何通过配置 --with-pdo-mysql 选项作为 PHP 的一部分编译的。重新编译解决了我的问题。注意我正在使用 PHP 5.5.9 和 Apache Webserver 2.4.6 的 Ubuntu 12.10 系统

            【讨论】:

              【解决方案16】:

              就我而言,这是因为数据库不存在。我预计运行./app/Console/cake schema create 会创建它,但它没有。在 mysql 中使用 create database &lt;database name&gt; 创建它就可以了(尽管我已经分配了权限)。

              【讨论】:

                【解决方案17】:

                整个周末我都在苦苦挣扎,终于解决了。原来 php.ini 指向一个不存在的“扩展目录”。创建一个 phpinfo() 文件并查看该字段的值:

                我注意到在mamp php 安装文件夹中有一个no-debug-non-zts-20131226 文件夹,它与phpinfo() 中显示的值不同。我所做的是克隆这个文件夹并将名称更改为 phpinfo() 的值。也许你可以修改 php.ini 文件,但我不想这样做。

                我不知道你是否解决了你的问题,但我发布这个是因为我的问题不同,谷歌把我带到了这里,所以我希望能帮助未来遇到类似问题的谷歌人。

                希望这会有所帮助。

                【讨论】:

                  【解决方案18】:

                  如果您使用的是 Godaddy(或任何其他共享主机),他们可能会将传出连接限制为仅端口 80 和 443。

                  【讨论】:

                    【解决方案19】:

                    系统配置:

                    • Fedora 32
                    • php-fpm 7.4.13
                    • mariadb 10.4.17
                    • 蛋糕 2.10.17

                    来自 CAKE 的错误消息:

                    数据库连接“Mysql”丢失,或无法创建。

                    使用https://stackoverflow.com/a/24722976/5025060 的答案增强错误消息

                    数据库连接“Mysql”丢失,或无法创建:所选驱动程序未启用

                    我的问题是没有安装 PHP 和 SQL 之间的“连接器”。解决方案是:

                    dnf install php-mysqlnd

                    这允许 PHP 连接到 CAKE 的 database.php 配置文件中指定的数据库。

                    【讨论】:

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