Pregunta

Soy nuevo en CakePHP y solo estoy ejecutando el proceso de configuración, pero estoy perplejo por qué Cake no puede acceder a mi base de datos MySQL. La página de información de Cake dice que mi directorio tmp se puede escribir, FileEngine se está utilizando para el almacenamiento en caché (no sé lo que esto significa) y mi archivo de configuración de la base de datos está presente, pero que CakePHP no puede conectarse a la base de datos.

Aquí están mis detalles de configuración:

  • PHP 5.3 (preinstalado en Snow Leopard)
  • MySQL 5.1.40 de 64 bits
  • CakePHP 1.2.4.8284

Estos son los pasos que seguí:

  • Creó un esquema MySQL llamado cake_blog
  • Creó un usuario de MySQL llamado cake_blog_user
  • concedió a cake_blog_user los permisos apropiados en cake_blog @ localhost y cake_blog @%
  • Copió el archivo database.php.default en database.php y editó los detalles de conexión de la base de datos según corresponda

Aquí están los datos de configuración relevantes de database.php:

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

¿Me estoy perdiendo algo aquí? También debo mencionar que si inserto un echo mysql_error (); en el archivo /cake/libs/view/pages/home.ctp justo antes de probar la conexión de la base de datos, el error que se muestra es " No existe tal archivo o directorio. & Quot; No tengo idea de qué archivo o directorio está hablando.

¡Gracias!

¿Fue útil?

Solución

Si es el socket, simplemente edite /etc/php.ini para reflejar lo siguiente

pdo_mysql.default_socket=/tmp/mysql.sock

y

mysql.default_socket = /tmp/mysql.sock

Otros consejos

Lo que generalmente me molesta es que MySQL piensa en 'localhost' como 'conectar a través del zócalo Unix' y '127.0.0.1' 'conectar a través del puerto TCP'. Con cosas como XAMPP (al menos en Mac), el archivo de socket Unix no está allí. Simplemente use 127.0.0.1 en su lugar.

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

Debería funcionar todo el tiempo.

Creo que también puedes hacer lo siguiente

<?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',            
    )
?>

hacer esto podría significar que necesita editar el archivo database.php cuando entre en funcionamiento en el servidor de producción.

Gracias a todos por señalarme en la dirección correcta. El archivo mysql.sock se ha movido a /tmp/mysql.sock en lugar de su ubicación predeterminada en /var/mysql/mysql.sock . Editar el archivo php.ini para reflejar esto ha solucionado el problema.

revise su phpinfo y use el socket listado. Eso funcionó para mí.

En Ubuntu, si instaló las versiones 7.0 y 5.6 de PHP, esto no funcionará.

Deberá cambiar si tiene ambas versiones:

Mire primero si es la versión 7.0: el comando es php -v .

Siguiente hacer

sudo a2dismod php7.0
sudo a2enmod php5.6
sudo service apache2 restart
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top