No puedo conectarme a MySQL usando 'localhost' pero usando '127.0.0.1' está bien?

12

Mi archivo / etc / hosts se ve así:

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Mientras construía el servidor, descubrí que aunque podía hacer ping localhost con éxito, en ciertos archivos de configuración para servicios como Postfix y Apache y Dovecot, necesitaba especificar en 127.0.0.1lugar de localhosthacerlo para que funcionen.

También necesitaba cambiar los archivos de configuración de ciertos sitios web basados ​​en bases de datos, que solían localhostconectarse a MySQL.

He intentado varias modificaciones al hostsarchivo, pero nada de lo que he intentado hasta ahora ha ayudado.

El servidor ejecuta Ubuntu 12.04.02 LTS. No tiene instalado selinux y la situación anterior permanece incluso después de configurar las políticas predeterminadas de IPtables para aceptarlas y eliminarlas.

Peter Snow
fuente

Respuestas:

15

Una cosa que puede verificar es (que requiere que inicie sesión en la consola MySQL): verifique para asegurarse de que tiene permisos para iniciar sesión a roottravés de localhost.

mysql -h 127.0.0.1 -u root -p

- Una vez que haya iniciado sesión correctamente -

mysql> select user,host from mysql.user;
+------+--------------------------------+
| user | host                           |
+------+--------------------------------+
| root | 127.0.0.1                      | 
| root | ::1                            |
| root | localhost                      | <-- Make sure you have a localhost entry for root
+------+--------------------------------+
3 rows in set (0.00 sec)

Solo tirarlo por ahí, en caso de que este sea el problema.

Drewrockshard
fuente
Tengo la sensación de que estás en el camino correcto. He hecho eso y puedo ver que aunque la raíz y otros usuarios se crearon para localhost, los creados por el panel de control de alojamiento para los usuarios son todos 127.0.0.1(excepto uno que sea %). Creo que esto probablemente revela lo suficiente para que yo lo solucione, por lo que probablemente aceptaré su respuesta en breve.
Peter Snow
¡gracias por la ayuda! Me gustaría agregar que se requiere reiniciar el servidor mysql después de actualizar la tabla mysql.user para que el cambio surta efecto.
lackovic10
Aunque aceptado, este no es generalmente (¿nunca?) El problema, para mysql. Vea la respuesta de EEAA en su lugar (mysql interpreta localhostcomo en socketlugar de TCP).
ToolmakerSteve
8

La mayoría de los clientes MySQL son extraños en el hecho de que si especifica el host como localhost, alias eso a una conexión de socket en lugar de una conexión TCP. Sus opciones son quedarse con 127.0.0.1o, si el cliente lo admite (como lo hace el binario mysql CLI con la --protocolbandera), forzarlo a usar TCP en lugar de un socket unix.

EEAA
fuente
Gracias EEAA El problema es que fallan cosas como el instalador de Joomla. Si lo especifica en 127.0.0.1lugar del localhostcampo de nombre de host durante la instalación, hace que las rutas de instalación se confundan, lo que me da otros errores, ¡pero al especificar localhost no se puede conectar la base de datos! ¿Qué causó esta situación? ¿Por qué lo tengo?
Peter Snow
3
@PeterSnow Configure un socket de dominio Unix en su configuración MySQL.
Michael Hampton
Gracias @MichaelHampton He buscado durante la última media hora y no puedo encontrar cómo configurar esto. ¿Me puede señalar un artículo o darme una idea por favor? Tengo socket = /var/run/mysqld/mysqld.socken my.cnfy el archivo es existente, propiedad de MySQL con permisos 777. Gracias.
Peter Snow
@PeterSnow ¿Reiniciaste mysqld después de hacer ese cambio?
EEAA
Actualmente estoy tratando de usarlo a través del script de instalación de Joomla. La página http solicita el nombre de host. Si elijo 127.0.0.1que funcione (pero el script usa la entrada más tarde y falla porque espera un nombre resoluble como localhost), pero si uso localhost, la conexión, para crear la base de datos, falla.
Peter Snow
1

Puede verificar permisos como este:

[learner@localhost ~]$ sudo netstat -npa | grep mysqld  
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      6284/mysqld         
unix  2      [ ACC ]     STREAM     LISTENING     233040 6284/mysqld         /var/lib/mysql/mysql.sock

Si esto está escuchando en 0 0.0.0.0:* significa que todos pueden acceder a ese mysql.

puede editar el enlace para esto en el archivo my.conf. En Linux, la ruta predeterminada para esto es:

[learner@localhost ~]$ sudo vi /etc/my.cnf

Agregue estas líneas en el archivo my.conf para permitir la ip que desee.

bind-address = 127.0.0.1   
bind-address = 0.0.0.0
a_learner
fuente
Gracias a_learner, por la información, aunque ya he aceptado una respuesta.
Peter Snow
0

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 .

mysqli.default_socket =/newDBLocation/mysql/mysql.sock
joelschmid
fuente
0

He resuelto este problema mediante la creación de enlaces simbólicos, sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock. Pero primero tengo que crear una carpeta /var/run/mysqld/porque la carpeta no existía inicialmente.

saharul
fuente
-1

Necesita un mysql.sock en / tmp

ln -s /var/lib/mysql/mysql.sock mysql.sock

debería funcionar bien después de eso.

William
fuente