2009-10-28 24 views
8

Soy nuevo en CakePHP y 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 es escribible, FileEngine está siendo utilizado para el almacenamiento en caché (no sé lo que esto significa), y mi archivo de configuración de base de datos está presente, pero que CakePHP no puede conectarse a la base de datos.CakePHP: no se puede acceder a la base de datos MySQL

Aquí están más detalles de configuración:

  • PHP 5.3 (pre-instalado en Snow Leopard)
  • MySQL 5.1.40 64 bits
  • CakePHP 1.2.4.8284

Aquí son los pasos que pasé:

  • Creado un esquema de MySQL una llamada cake_blog
  • creado un usuario de MySQL llamada cake_blog_user
  • Concedido cake_blog_user los permisos adecuados en cake_blog @ localhost y cake_blog @%
  • copiado el archivo database.php.default a database.php y editado los detalles de la conexión de base de datos como apropiada

Estos son 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 debería 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 hay tal archivo o directorio". No tengo idea de qué archivo o directorio está hablando.

Gracias!

+0

¿Cómo se ve la configuración de la base de datos similar, es decir, qué parámetros le suele utilizar para conectarse a él? Publique los detalles del archivo database.php. – deceze

+2

Voy a salir en una extremidad y supongo que mysql.sock ya no está en la ubicación estándar – nduplessis

+0

No es exactamente una solución a este problema específico, pero he tenido un gran éxito haciendo el desarrollo de pasteles en una Mac usando MAMP (self-. contenía una pila tipo LAMP). Tal vez eche un vistazo a eso. – inkedmn

Respuesta

8

Si se trata de la toma de corriente, apenas corrige /etc/php.ini para reflejar la siguiente

pdo_mysql.default_socket=/tmp/mysql.sock 

y

mysql.default_socket = /tmp/mysql.sock 
1

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

+1

Como nduplessis notas arriba, también puede resolver este problema creando un enlace simbólico como este: 'sudo ln -s /tmp/mysql.sock/var/mysql/mysql.sock' (asegúrese de que' sudo mkdir/var/mysql/'primero!) De esta manera no tiene que preocuparse por editar el archivo php.ini. – Jared

6

creo que también se puede 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 vas en vivo en el servidor de producción.

+0

Sí, esto también funciona. ¡Gracias! – Jared

9

Lo que generalmente me muerde es que MySQL piensa en 'localhost' como 'conectarse a través del socket de Unix' y '127.0.0.1' 'conectarse a través del puerto TCP'. Con cosas como XAMPP (al menos en Mac), el archivo de socket de 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ían funcionar todo el tiempo.

+1

+1 esto funcionó para mí y parece menos invasivo –

0

revise su phpinfo y use el conector de la lista. eso funcionó para mí.

0

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

Youll necesidad de cambiar si usted tiene dos versiones:

mirar primero si es la versión 7.0: El comando se php -v.

Siguiente ¿

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