connectionmanager - list cakephp
¿Cómo obtengo CakePHP bake para encontrar mysql.sock y reconocer MySQL mientras uso MAMP en Mac OSX? (11)
Sí, tuve un problema similar, creo que apuntando al socket: portno como Vinko sugirió que podría funcionar; sin embargo, si usas una dirección IP / localhost estarás bien.
Actualmente estoy leyendo "Beginning CakePHP: de principiante a profesional" por David Golding. En un punto, tengo que usar el comando CLI "cake bake", obtengo la pantalla de bienvenida, pero cuando intento hornear, por ejemplo, un controlador, recibo los siguientes mensajes de error:
Warning: mysql_connect(): Can''t connect to local MySQL server through socket ''/var/mysql/mysql.sock'' (2) in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 117
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 122
Warning: mysql_get_server_info(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 130
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 154
Error: Your database does not have any tables.
Sospecho que los mensajes de error tienen que ver con que php intente acceder al mysql-socket incorrecto, es decir, el osx mysql-socket predeterminado, en lugar del que usa MAMP. Por lo tanto, cambio las configuraciones de mi base de datos para conectarme a UNIX mysql-socket (: /Applications/MAMP/tmp/mysql/mysql.sock):
class DATABASE_CONFIG {
var $default = array(
''driver'' => ''mysql'',
''connect'' => ''mysql_connect'',
''persistent'' => false,
''host'' =>'':/Applications/MAMP/tmp/mysql/mysql.sock'', // UNIX MySQL-socket
''login'' => ''my_user'',
''password'' => ''my_pass'',
''database'' => ''blog'',
''prefix'' => '''',
);
}
Pero recibo los mismos mensajes de error con el nuevo socket:
Warning: mysql_connect(): Can''t connect to local MySQL server through socket ''/Applications/MAMP/tmp/mysql/mysql.sock:3306'' (2) in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 117
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 122
Warning: mysql_get_server_info(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 130
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 154
Error: Your database does not have any tables.
Además, aunque utilizo el socket UNIX que MAMP muestra en su pantalla de bienvenida, CakePHP pierde la conexión de la base de datos cuando usa este socket en lugar de localhost.
¿Alguna idea sobre cómo puedo prepararme para hornear?
- Editar 1 -
¡Gracias a todos por ayudarme! :)
Tengo un problema para averiguar dónde en my.cnf editar para que MySQL escuche la solicitud de TCP / IP. El único párrafo que puedo encontrar donde se menciona TCP / IP es el siguiente:
# Don''t listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
Eso me permite desactivar TCP / IP por completo, que es lo contrario de mi intención. No sé cómo hacer lo que sugieres, si pudieras ser más elaborado, sería genial. Soy un n00b total en estos asuntos: S
Reg. conectando a un socket local: eliminé los dos puntos en el parámetro de host, el mismo resultado.
Tuve el mismo problema al usar MAMP y Cake CLI. Estoy ejecutando CakePHP 1.1xxx y MAMP 1.7.
El problema es que el socket MySQL no se puede encontrar: D
Abra la Terminal e ingrese lo siguiente:
my-macbook:~ chris$ php -i | grep mysql.default_socket
mysql.default_socket => no value => no value
my-macbook:~ chris$ php -i -c /Applications/MAMP/conf/php5 | grep mysql.default_socket
mysql.default_socket => /Applications/MAMP/tmp/mysql/mysql.sock => /Applications/MAMP/tmp/mysql/mysql.sock
El truco es que sin dar explícitamente al binario php la ruta a su archivo de configuración (leer MAMP), el mysql.default_socket no está configurado.
Usando eso no tuve que cambiar la configuración de mi base de datos.
class DATABASE_CONFIG
{
public $default = array(
''driver'' => ''mysql'',
''persistent'' => false,
''host'' => ''localhost'',
''login'' => ''account'',
''password'' => ''password'',
''database'' => ''database'',
''prefix'' => '''',
''port'' => ''/var/mysql/mysql.sock''
);
}
Esto funcionó para mí:
class DATABASE_CONFIG
{
public $default = array(
''driver'' => ''mysql'',
''persistent'' => false,
''host'' => ''localhost'',
''login'' => ''account'',
''password'' => ''password'',
''database'' => ''database'',
''prefix'' => '''',
''port'' => ''/Applications/MAMP/tmp/mysql/mysql.sock''
);
}
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock
Tuve exactamente el mismo problema con mamp y lo solucioné con el comando anterior. Creo que debes ejecutar este comando cada vez que reinicies tu computadora. Tal vez haya una mejor manera de hacerlo, pero lo uso con clix.app, por lo que suele ser bastante rápido. Además, cambie su host a localhost.
Intenta configurar tu firewall ... ¡Ese fue el caso para mí!
Encuentro la solución a este problema: Agregar una configuración de socket en el archivo cakephp app / config / database.php
class DATABASE_CONFIG {
var $default = array(
''driver'' => ''mysql'',
''persistent'' => false,
''host'' => ''localhost'',
''port'' => ''/Applications/MAMP/tmp/mysql/mysql.sock'', // here is the key !
''login'' => ''you'',
''password'' => ''yourpass'',
''database'' => ''yourdb'',
''prefix'' => '''',
);
También puedes hacer un enlace simbólico, hornear está buscando mysql.sock en / tmp
Me gusta esto:
ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock
Saludos, Ebbot.
Para cualquiera que se encuentre con este problema al usar CakePHP 2.0: para mí los archivos de configuración de base de datos anteriores no funcionaron. Encontré la propiedad ''unix_socket'' sin embargo, eso funcionó para mí:
<?php
class DATABASE_CONFIG {
public $default = array(
''datasource'' => ''Database/Mysql'',
''driver'' => ''mysql'',
''persistent'' => false,
''host'' => ''localhost'',
''unix_socket'' => ''/tmp/mysql.sock'',
''login'' => ''xxx'',
''password'' => ''xxx'',
''database'' => ''xxx'',
''encoding'' => ''UTF8'',
''prefix'' => ''''
);
}
Para mí, olvidé configurar el puerto en el host, ya que no estaba usando el puerto MySQL predeterminado en MAMP.
es decir, si su puerto MySQL es 8889, configure host
para localhost:8889
.
A partir del error, parece que está intentando conectarse a una dirección IP real y no a un socket UNIX, mira:
''/Applications/MAMP/tmp/mysql/mysql.sock:3306''
Está agregando un puerto al zócalo, lo cual es incorrecto.
Por lo tanto, primero trataría de configurar MySQL para escuchar las solicitudes TCP / IP (edite la sección correcta en my.cnf) e intente proporcionar 127.0.0.1 en lugar del socket.
En caso de que no te desplaces hacia abajo :
Para solucionarlo en el nivel de CakePHP, cambie el host en database.php a ''localhost'' y agregue una directiva de puerto con su valor establecido en el nombre de socket ''/Applications/MAMP/tmp/mysql/mysql.sock''