Conexiones remotas Mysql Ubuntu

95

Por alguna razón, no he podido conectarme de forma remota a mi servidor MySQL. He intentado todo y sigo recibiendo errores.

root@server1:/home/administrator# mysql -u monty -p -h www.ganganadores.cl
Enter password:
ERROR 1045 (28000): Access denied for user 'monty'@'server1.ganganadores.cl' (using password: YES)

Ahora, he intentado correr

 GRANT ALL ON *.* to monty@localhost IDENTIFIED BY 'XXXXX'; 
 GRANT ALL ON *.* to monty@'%' IDENTIFIED BY 'XXXXXX';` 

y aun nada! Que estoy haciendo mal

EDITAR : my.cnfha comentado el bind ip.

Cristian Eduardo Lehuede Lyon
fuente
¿Qué versión de MySQL estás usando?
Steve
Versión del servidor: 5.5.29-0ubuntu0.12.10.1 (Ubuntu)
Cristian Eduardo Lehuede Lyon
¿Qué devuelve este comando? ubuntu ~ $ sudo lsof -i -P | grep: 3306
apesa

Respuestas:

345

Para exponer MySQL a cualquier otra cosa que no sea localhost, deberá tener la siguiente línea

Para mysql versión 5.6 y anteriores

descomentado /etc/mysql/my.cnfy asignado a la dirección IP de su computadora y no loopback

Para mysql versión 5.7 y superior

descomentado /etc/mysql/mysql.conf.d/mysqld.cnfy asignado a la dirección IP de su computadora y no loopback

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

O agregue un bind-address = 0.0.0.0si no desea especificar la IP

Luego detenga y reinicie MySQL con la nueva entrada my.cnf. Una vez ejecutado, vaya a la terminal e ingrese el siguiente comando.

lsof -i -P | grep :3306

Eso debería devolver algo como esto con su IP real en los xxx

mysqld  1046  mysql  10u  IPv4  5203  0t0  TCP  xxx.xxx.xxx.xxx:3306 (LISTEN)

Si la declaración anterior se devuelve correctamente, podrá aceptar usuarios remotos. Sin embargo, para que un usuario remoto se conecte con los privilegios correctos, debe tener ese usuario creado tanto en localhost como en '%' como en.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

luego,

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

y finalmente,

FLUSH PRIVILEGES; 
EXIT;

Si no ha creado el mismo usuario que el anterior, cuando inicie sesión localmente, puede heredar los privilegios básicos de localhost y tener problemas de acceso. Si desea restringir el acceso que tiene myuser, deberá leer la sintaxis de la declaración GRANT AQUÍ. Si supera todo esto y aún tiene problemas, publique algún resultado de error adicional y las líneas apropiadas de my.cnf.

NOTA: Si lsof no regresa o no se encuentra, puede instalarlo AQUÍ según su distribución de Linux. No necesita lsof para que las cosas funcionen, pero es extremadamente útil cuando las cosas no funcionan como se esperaba.

apesa
fuente
1
Gracias, a pesar de que he seguido estos pasos correctamente la primera vez, los hice de nuevo como tú publicaste y funcioné como un encanto.
Cristian Eduardo Lehuede Lyon
14
Para cualquier otra persona que tenga problemas lsof -i -P | grep :3306, eso no funcionó, pero la conexión remota aún funciona bien sin esa confirmación, ignore si no ve el resultado correcto.
Mike S
@Mike Slutsky Gracias por la nota, edité mi respuesta. Puede instalar lsof si aún no está instalado.
apesa
2
FWIW en muchos sistemas sudo lsof -i -Pserá mucho más útil que lsof -i -P(suponiendo que haya iniciado sesión como un usuario sin privilegios).
Dan Passaro
2
lsof -i -P | grep :3306no devuelve nada!
Verde
39

Agregue algunos puntos a la excelente publicación de apesa:

1) Puede usar el comando a continuación para verificar la dirección IP que el servidor mysql está escuchando

netstat -nlt | grep 3306

sample result:

tcp 0  0  xxx.xxx.xxx.xxx:3306  0.0.0.0:*   LISTEN

2) Úselo FLUSH PRIVILEGESpara forzar la carga de las tablas de subvenciones si por alguna razón los cambios no se hacen efectivos inmediatamente

GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
FLUSH PRIVILEGES; 
EXIT;

usuario == el usuario que usa para conectarse a mysql ex.root
passwd == la contraseña que usa para conectarse a mysql con

3) Si el firewall netfilter está habilitado ( sudo ufw enable) en la máquina del servidor mysql, haga lo siguiente para abrir el puerto 3306 para acceso remoto:

sudo ufw allow 3306

comprobar el estado usando

sudo ufw status

4) Una vez que se establece una conexión remota, se puede verificar en la máquina cliente o servidor mediante comandos

netstat -an | grep 3306
netstat -an | grep -i established
Jonathan L
fuente
3
¡Esto me salvó todo el día! Gracias por sudo ufw status!!
Riddhiman Adib
netstat -nlt | grep 3306devuelve vacío
João Pimentel Ferreira
@ João Pimentel Ferreira asegúrese de que mysql se esté ejecutando primero, use el comando "/etc/init.d/mysql status" para verificar
Jonathan L
8

MySQL solo escucha localhost, si queremos habilitar el acceso remoto a él, entonces necesitamos hacer algunos cambios en el archivo my.cnf:

sudo nano /etc/mysql/my.cnf

Necesitamos comentar la dirección de enlace y las líneas de bloqueo externo de salto:

#bind-address = 127.0.0.1
# skip-external-locking

Después de realizar estos cambios, necesitamos reiniciar el servicio mysql:

sudo service mysql restart
Vinh Lee
fuente
1
asegúrese de comentarskip-external-locking
calebeaires
1
No comenté el bloqueo externo de omisión y todavía funciona.
Marcia Ong
Tuve que cambiarlo en /etc/mysql/mysql.conf.d
Bartando
La mía es esta ubicación:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Lester
1

Si realiza la prueba en Windows, no olvide abrir el puerto 3306.

marw
fuente
Ah, eres un genio, esto es SUPER importante si estás usando el subsistema de Windows para Linux, necesitas abrir el puerto 3306 para el tráfico entrante a través del firewall de Windows, y ninguna de las cosas anteriores para verificar si MySQL está escuchando funciona con el subsistema
Brian Leishman
1

Estás usando ubuntu 12 (bastante antiguo)

Primero, abra el archivo /etc/mysql/mysql.conf.d/mysqld.cnf ( /etc/mysql/my.cnf en Ubuntu 14.04 y versiones anteriores

Debajo de [mysqld] Localice la línea, bind-address = 127.0.0.1 y cámbiela a, bind-address = 0.0.0.0 o comente

Luego, reinicie el servidor Ubuntu MysQL systemctl restart mysql.service

Ahora Ubuntu Server permitirá el acceso remoto al servidor MySQL, pero aún necesita configurar los usuarios de MySQL para permitir el acceso desde cualquier host.

El usuario debe tener 'username'@'%'todas las subvenciones requeridas

Para asegurarse de que el servidor MySQL escuche en todas las interfaces, ejecute el comando netstat de la siguiente manera.

netstat -tulnp | grep mysql

Espero que esto funcione !

Gaurav Singh
fuente