【问题标题】:CakePHP: Can't access MySQL databaseCakePHP:无法访问 MySQL 数据库
【发布时间】:2010-12-10 18:22:05
【问题描述】:

我是 CakePHP 的新手,我只是在运行配置过程,但我很困惑为什么 Cake 不能访问我的 MySQL 数据库。 Cake info 页面说我的 tmp 目录是可写的,FileEngine 正在用于缓存(不知道这是什么意思),并且我的数据库配置文件存在,但是 CakePHP 无法连接到数据库。

这是我的设置详情:

  • PHP 5.3(预装在 Snow Leopard 上)
  • MySQL 5.1.40 64 位
  • CakePHP 1.2.4.8284

这是我经历的步骤:

  • 创建了一个名为 cake_blog 的 MySQL 架构
  • 创建了一个名为 cake_blog_user 的 MySQL 用户
  • 授予 cake_blog_user 对 cake_blog@localhost 和 cake_blog@% 的适当权限
  • 将 database.php.default 文件复制到 database.php 并酌情编辑数据库连接详细信息

这里是来自database.php的相关配置数据:

var $default = 数组( '驱动程序' => 'mysql', '持久' => 假, '主机' => '本地主机', '登录' => 'cake_blog_user', '密码' => 'cake_blog_password', '数据库' => 'cake_blog', '前缀' => '', );

我在这里遗漏了什么吗?我还应该提到,如果我在测试数据库连接之前将echo mysql_error(); 插入到 /cake/libs/view/pages/home.ctp 文件中,则显示的错误是“没有这样的文件或目录”。我不知道它在说什么文件或目录。

谢谢!

【问题讨论】:

  • 您的数据库设置是什么样的,即您通常使用什么参数来连接它?贴出database.php文件的详细信息。
  • 我会冒昧地猜测mysql.sock 不在标准位置了
  • 不完全是这个特定问题的解决方案,但我在 Mac 上使用 MAMP(类似 LAMP 的独立堆栈)进行蛋糕开发取得了巨大成功。也许看看那个。
  • 感谢 nduplessis!在 Snow Leopard 中,mysql.sock 已移动到 /tmp/mysql.sock,而不是默认位置 /var/mysql/mysql.sock
  • 哦,没错。我添加了一个符号链接而不是更新我的 php.ini

标签: php mysql macos cakephp osx-snow-leopard


【解决方案1】:

通常让我感到困扰的是 MySQL 将 'localhost' 视为 'connect thru the unix socket' 和 '127.0.0.1' 'connect thru TCP port'。对于 XAMPP(至少在 mac 上)之类的东西,unix 套接字文件不存在。 只需使用 127.0.0.1

var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => '127.0.0.1',
    'login' => 'cake_blog_user',
    'password' => 'cake_blog_password',
    'database' => 'cake_blog',
    'prefix' => '',
);

应该一直有效。

【讨论】:

    【解决方案2】:

    如果是socket,只需编辑/etc/php.ini 反映如下

    pdo_mysql.default_socket=/tmp/mysql.sock
    

    mysql.default_socket = /tmp/mysql.sock
    

    【讨论】:

      【解决方案3】:

      相信你也可以做到以下几点

      <?php
          public $default = array(
              'driver' => 'mysql',
              'persistent' => false,
              'host' => 'localhost',
              'login' => 'cake_blog_user',
              'password' => 'cake_blog_password',
              'database' => 'cake_blog',
              'prefix' => '',
              'port' => '/tmp/mysql.sock',            
          )
      ?>
      

      这样做可能意味着您需要在生产服务器上线时编辑 database.php 文件。

      【讨论】:

        【解决方案4】:

        感谢大家为我指明正确的方向。 mysql.sock 文件已移至/tmp/mysql.sock,而不是其默认位置/var/mysql/mysql.sock。编辑 php.ini 文件以反映这一点已解决问题。

        【讨论】:

        • 正如上面的 nduplessis 注释,您还可以通过创建如下符号链接来解决此问题:sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock(请确保您首先sudo mkdir /var/mysql/!)这样您就不必担心编辑php.ini 文件。
        【解决方案5】:

        检查您的 phpinfo 并使用列出的套接字。这对我有用。

        【讨论】:

          【解决方案6】:

          在 Ubuntu 上,如果您同时安装了 7.0 和 5.6 版本的 PHP,这将不起作用。

          如果您有两个版本,则需要切换:

          如果是7.0版本先看:命令是php -v

          下一步

          sudo a2dismod php7.0
          sudo a2enmod php5.6
          sudo service apache2 restart
          

          【讨论】:

            猜你喜欢
            • 2020-06-12
            • 2013-04-14
            • 1970-01-01
            • 2013-07-02
            • 1970-01-01
            • 1970-01-01
            • 2014-04-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多