Esto es un misterio para mí. La única forma en que puedo conectarme a MySQL es si lo llamo a través de "127.0.0.1" ... por ejemplo, mi script PHP connect NO funcionará con localhost
Estoy ejecutando Mac OS X Lion, apache2 incorporado, MySQL, PHP, phpMyAdmin
mysqladmin:
count 0
debug-check FALSE
debug-info TRUE
force FALSE
compress FALSE
character-sets-dir (No default value)
default-character-set auto
host (No default value)
no-beep FALSE
port 0
relative FALSE
socket (No default value)
sleep 0
ssl FALSE
ssl-ca (No default value)
ssl-capath (No default value)
ssl-cert (No default value)
ssl-cipher (No default value)
ssl-key (No default value)
ssl-verify-server-cert FALSE
user (No default value)
verbose FALSE
vertical FALSE
connect-timeout 43200
shutdown-timeout 3600
plugin-dir (No default value)
default-auth (No default value)
ping localhost
y vea lo que dice.Respuestas:
MySQL intentará conectarse al socket de Unix si le dice que se conecte a "localhost". Si le dice que se conecte a 127.0.0.1, lo está obligando a conectarse a la toma de red. Entonces, probablemente tenga MySQL configurado para escuchar solo el zócalo de la red y no el zócalo del sistema de archivos.
Lo que está mal exactamente con su socket Unix es difícil de decir. Pero le recomiendo que lea esta página en la guía de referencia de MySQL. Esto debería ayudarte.
ACTUALIZACIÓN: Basado en la pregunta actualizada: el parámetro "socket" debería ser algo como esto: "/var/lib/mysql/mysql.sock". Esta página en el Manual de referencia tiene más información.
Aquí tienes el comienzo de mi archivo /etc/my.cnf:
Su archivo debe ser similar. Entonces tu problema debería estar resuelto. No olvide reiniciar el servidor MySQL antes de probarlo.
fuente
Es posible que tenga habilitado IPv6, su muy posible localhost se resuelve en el ipv6 localhost, que no está definido en su configuración de msql.
También tuve un problema donde tuve que agregar 'localhost' en lugar de '127.0.0.1' a las subredes permitidas para ese usuario, no entiendo por qué (estaba usando ipv4 y fue hace un tiempo) pero vale la pena intentarlo.
fuente
Para mí, el php incorporado de OSX está configurado para usar un socket unix diferente al mysql de homebrew. Por lo tanto, no se puede conectar a través de localhost que utiliza ese socket.
Lo arreglé con un truco rápido al simular la ruta de socket configurada de php para que apunte a la que mysql realmente usa.
Los siguientes comandos de diagnóstico fueron muy útiles.
Verifique las rutas de socket predeterminadas utilizadas por php y mysql:
Conéctese utilizando un socket especificado:
Determine qué tipo de socket utiliza el cliente mysql para conectarse:
fuente
¿Podría verificar
mysql/conf/my.conf
(la estructura del directorio debería ser la misma en OSx) para ver si noskip-networking
está comentada? Si es así, agregue un#
frente de la línea y reinicie el servidor mysql.De hecho, tuve un problema similar hace un tiempo (aunque eso no estaba en OSx), así que pensé que valdría la pena intentarlo.
fuente
PHP todavía está tratando de usar la ubicación de socket predeterminada. Este problema puede aparecer si ha movido la carpeta MariaDB / MySQL de / var / lib / mysql a otra ubicación. Para resolver el problema, debe definir la ubicación del nuevo socket en el archivo /etc/php.ini .
Tenga cuidado, dependiendo del controlador que utilice, es posible que deba especificar pdo_mysql.default_socket = !
Para verificar su directorio actual ejecute el siguiente comando en mysql:
fuente
¿Localhost está definido en su
/private/etc/hosts
archivo?fuente
/private
? NuncaPude recrear sus mismos síntomas en mi cuadro de prueba, espero que esto ayude.
En MySQL, los usuarios están definidos por dos partes (nombre y host). Por defecto, MySQL tendrá 3 usuarios root:
El campo de contraseña estará en blanco (sin contraseña) o tendrá un hash almacenado. Si configura la contraseña para un usuario específico, no se actualizará automáticamente, ya que MySQL los ve como usuarios diferentes.
Por ejemplo:
actualizará la contraseña para
'root'@'127.0.0.1'
, pero no'root'@'localhost'
o'root'@'localhost.localdomain'
Echa un vistazo a la
skip_name_resolve
variable:Por defecto
skip_name_resolve
esOFF
, e intentará resolver todas las direcciones IP a nombres de host. Por ejemplo, si te conectas como'root'@'127.0.0.1'
, MySQL cambiará conectarte como'root'@'localhost'
.Si es así
ON
, MySQL verá y se conectará'root'@'127.0.0.1'
y,'root'@'localhost'
como usuarios separados. Y pueden tener o no contraseñas diferentes, dependiendo de cómo se establecieron.Primero, verificaría si hay diferencias de contraseña:
mysql> SELECT host,user,password FROM mysql.user WHERE user='root';
Si los hay, puede arreglarlos o puede continuar investigando.
Entonces verificaría
skip_name_resolve
:mysql> show variables like 'skip_name_resolve';
Si es así
ON
, averiguaría dónde se está configurando (por ejemplo/etc/my.cnf
) y lo eliminaría, a menos que sea necesario.¡Espero que esto te ayude!
fuente
Estaba teniendo este problema y no pude resolverlo. Intenté todo lo que pude sin resultado.
Descubrí que tenía un .netrc en / root / que tenía información.
Lo eliminé y el problema desapareció.
Capaz de iniciar sesión en mysql usando mysql -uroot -p sin problema ahora.
Sé que esta es una publicación antigua, pero espero que esto ayude a alguien.
fuente
Para mí, cambiar los permisos para que se puedan leer públicamente en el directorio principal de mysql.sock solucionó el problema:
fuente
Para las personas que usan CageFS con CloudLinux:
Recreaba
/var/lib/mysql
porque estaba reconstruyendo el servidor MySQL desde cero ...que desmontó el camino de las jaulas. Sé que no está relacionado, pero estaba usando cPanel y CloudLinux. No pude verificar por qué la conexión de socket no funcionaría, y finalmente, me di cuenta.
agregando
/var/lib/mysql
a/etc/cagefs/cagefs.mp
(si ya existe, continúe con el siguiente paso) y ejecutandosolucionó el problema
fuente
/etc/cagefs/cagefs.mp
funcionamiento pero locagefsctl --remount-all
reparó. ¡Gracias hombre!tienes que definirlo en privado / etc / hosts, creo ... o simplemente usar 127.0.0.1 porque de todos modos es lo mismo, solo un alias.
fuente