Cómo permitir la conexión remota a mysql

362

He instalado MySQL Community Edition 5.5 en mi máquina local y quiero permitir conexiones remotas para poder conectarme desde una fuente externa.

¿Cómo puedo hacer eso?

León
fuente
1
posible duplicado de Habilitar conexión remota de MySQL
usuario
1
Si usa DigitalOcean, puede intentar usarlo sudo mysql_secure_installation. FYI.
Alan Dong
No use el formato de código para texto que no sea código. Sin relación.
Marqués de Lorne el
@EJP ¿por qué? pregunta honesta por curiosidad
René Roth

Respuestas:

776

Eso está permitido por defecto en MySQL.

Lo que está deshabilitado por defecto es el rootacceso remoto . Si desea habilitar eso, ejecute este comando SQL localmente:

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
 FLUSH PRIVILEGES;

Y luego encuentre la siguiente línea y coméntela en su my.cnfarchivo, que generalmente vive /etc/mysql/my.cnfen los sistemas Unix / OSX. En algunos casos, la ubicación del archivo es /etc/mysql/mysql.conf.d/mysqld.cnf).

Si se trata de un sistema Windows, puede encontrarlo en el directorio de instalación de MySQL, generalmente algo así C:\Program Files\MySQL\MySQL Server 5.5\ como el nombre del archivo my.ini.

Cambio de línea

 bind-address = 127.0.0.1

a

 #bind-address = 127.0.0.1

Y reinicie el servidor MySQL ( Unix / OSX y Windows ) para que los cambios surtan efecto.

mjuarez
fuente
44
Ok, así que agregué la dirección binnd = 127.0.0.1 al final del archivo e intenté conectarme usando navicat desde un host externo y obtengo el error 10060
Leo
77
Hmm, no necesitas agregarlo. Como dijo mi respuesta, debe comentarlo, no agregarlo. Hay uno allí por defecto, por lo que deberías encontrarlo y comentarlo con el prefijo #
mjuarez
77
Hmm, en \ MYsql Server 5.5 \ solo hay 1 archivo ini llamado my-default.ini y la única línea sin el # es esta: sql_mode = NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES
Leo
2
Esta respuesta funciona perfecta. thnx @mjuarez - OTORGA TODOS LOS PRIVILEGIOS ENCENDIDOS . TO 'root' @ '%' IDENTIFICADO POR 'contraseña' CON LA OPCIÓN DE OTORGAMIENTO;
yadavr
66
Para aquellos que buscan el my.cnfarchivo y no encuentran una bind-addressdirectiva, tenga en cuenta que en mi caso (MySQL versión 14.14 en Ubuntu 16.04.2) la ubicación del archivo era/etc/mysql/mysql.conf.d/mysqld.cnf
Ash Menon
49

Después de hacer todo lo anterior, aún no podía iniciar sesión de rootforma remota, pero Telnetting al puerto 3306confirmó que MySQLestaba aceptando conexiones.

Comencé a mirar a los usuarios en MySQL y noté que había múltiples usuarios root con diferentes contraseñas.

select user, host, password from mysql.user;

Entonces MySQL, configuré todas las contraseñas para root nuevamente y finalmente pude iniciar sesión de forma remota como root.

use mysql;
update user set password=PASSWORD('NEWPASSWORD') where User='root';
flush privileges;
Matthew Lock
fuente
44
Esto es correcto. Mientras sigue los pasos en otras respuestas, parece que se crean cuentas de usuario con contraseña vacía. Por lo tanto, debe agregar contraseñas para ellos.
chhantyal
1
Necesitaba combinar la respuesta aceptada con esta y luego todo funcionó correctamente.
James
8
SQL para 5.7 y superiorupdate user set authentication_string=password('YOUR_PASSWORD') where user='root';
DalSoft
La respuesta aceptada establece la contraseña y funcionó para mí.
MikeKulls
1
Gracias, al igual que @James, tuve que combinar esto con la respuesta aceptada para solucionarlo.
Ben Everard
39

Solo una nota de mi experiencia, puede encontrar el archivo de configuración en esta ruta /etc/mysql/mysql.conf.d/mysqld.cnf.

(Luché por algún tiempo para encontrar este camino)

Mayur Patel
fuente
1
Esto depende en gran medida de la distribución que esté utilizando. La mejor manera es simplemente buscarlo:sudo find /etc -iname 'mysql*.cnf'
Martin Konecny
Agradezco el comando 'encontrar'. Soy nuevo en la línea de comandos, por lo que es muy útil. ¡Gracias!
Heres2u
Me costó horas editar el /etc/mysq/conf.d/mysql.cnf hasta que encontré esto sin respuesta.
Gayan Kavirathne
26

En mi caso, estaba tratando de conectarme a un servidor mysql remoto en OS Cent. Después de pasar por muchas soluciones (otorgar todos los privilegios, eliminar enlaces de IP, habilitar la conexión en red), el problema aún no se resolvió.

Al final resultó que, mientras buscaba en varias soluciones, me encontré con iptables, lo que me hizo darme cuenta de que el puerto mysql 3306 no aceptaba conexiones.

Aquí hay una pequeña nota sobre cómo verifiqué y resolví este problema.

  • Comprobando si el puerto está aceptando conexiones:
telnet (ip del servidor mysql) [portNo]
  • Agregar regla de tabla ip para permitir conexiones en el puerto:
iptables -A ENTRADA -i eth0 -p tcp -m tcp --dport 3306 -j ACEPTAR
  • No recomendaría esto para el entorno de producción, pero si sus iptables no están configuradas correctamente, agregar las reglas podría no resolver el problema. En ese caso, se debe hacer lo siguiente:
servicio iptables stop

Espero que esto ayude.

Kushal
fuente
17

Siga los pasos mencionados a continuación para configurar el acceso remoto comodín para el usuario de MySQL.

(1) Abrir cmd.

(2) navegue a la ruta C: \ Archivos de programa \ MySQL \ MySQL Server 5.X \ bin y ejecute este comando.

mysql -u root -p

(3) Ingrese la contraseña de root.

(4) Ejecute el siguiente comando para proporcionar el permiso.

OTORGUE TODOS LOS PRIVILEGIOS EN *. * A 'NOMBRE DE USUARIO' @ 'IP' IDENTIFICADO POR 'CONTRASEÑA';

NOMBRE DE USUARIO: Nombre de usuario que desea conectar al servidor MySQL.

IP: dirección IP pública desde donde desea permitir el acceso al servidor MySQL.

CONTRASEÑA: Contraseña del nombre de usuario utilizado.

La IP se puede reemplazar con% para permitir que el usuario se conecte desde cualquier dirección IP.

(5) Limpie los previleges siguiendo el comando y salga.

ENJUAGUE PRIVILEGIOS;

salida; o \ q

ingrese la descripción de la imagen aquí

Hiren Parghi
fuente
3
Después de hacerlo, mi raíz aún tiene acceso denegado. ¿Qué me he perdido?
teapeng
Puede intentar con la dirección IP de su sistema local en lugar de% en el cuarto paso. Deberia de funcionar. % significa cualquier dirección IP.
Hiren Parghi
6

Si el proceso de su servidor MySQL está escuchando en 127.0.0.1 o :: 1 solamente, entonces no podrá conectarse de forma remota. Si tiene una bind-addressconfiguración en /etc/my.cnfesto, podría ser la fuente del problema.

También tendrá que agregar privilegios para un no localhostusuario.

tadman
fuente
Extraño, ¿cómo podría su servidor estar "escuchando" en otra IP además 127.0.0.1?
Pacerier
2
@Pacerier 127.0.0.1 solo está vinculado a la interfaz de bucle invertido. Las conexiones externas no funcionarán. Un sistema a menudo tendrá múltiples interfaces de red, cada una de las cuales debe vincularse específicamente, o puede usar la dirección bind-all 0.0.0.0.
tadman
6

Si instaló MySQL brew, realmente solo escucha en la interfaz local de forma predeterminada. Para solucionarlo, debe editar /usr/local/etc/my.cnfy cambiar bind-addressde 127.0.0.1a *.

Entonces corre brew services restart mysql.

Timmmm
fuente
1
Para mi servidor ubuntu 16.04.4, la configuración de la dirección de enlace está en /etc/mysql/mysql.conf.d/mysqld.cnf
Frank
Esto no es solo el uso de brew, cualquier MySQL tendrá esta configuración predeterminada, para permitir solo conexiones locales.
nivs1978
6

Todo el proceso de inicio de sesión remoto. El inicio de sesión remoto está desactivado de forma predeterminada. Debe abrirlo manualmente para todas las IP ... para dar acceso a todas las IP

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

Ip específico

GRANT ALL PRIVILEGES ON *.* TO 'root'@'your_desire_ip' IDENTIFIED BY 'password';

entonces

flush privileges;

Puede verificar su host de usuario y contraseña

SELECT host,user,authentication_string FROM mysql.user;

Ahora tu deber es cambiar esto

bind-address = 127.0.0.1

Puedes encontrar esto en

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

si no encuentra esto allí, intente esto

sudo nano /etc/mysql/my.cnf

comentar en esto

#bind-address = 127.0.0.1

Luego reinicie Mysql

sudo service mysql restart

Ahora disfruta del inicio de sesión remoto

albus_severus
fuente
3

Solo para tu información, me saqué el pelo con este problema durante horas ... finalmente llamé a mi proveedor de alojamiento y descubrí que, en mi caso, usando un servidor en la nube que en el panel de control para 1 y 1 tienen un firewall secundario que debes clonar y agregar puerto 3306. Una vez agregado, me metí directamente ...

Dan
fuente
Esto suena muy específico a su situación. No soy una fuente inagotable de conocimiento sobre redes, pero ¿estás seguro de que esta solución se aplica bien a este problema?
Sandy Gifford
2
También tuve este problema. Común con los servidores alojados en la nube,
Matthew Lock
2

Para quien lo necesite, compruebe que el puerto del cortafuegos 3306 también esté abierto, si su servicio de cortafuegos está en ejecución.

Zelkovar
fuente
1

Y para las personas con OS X, tenga en cuenta que el parámetro bind-address generalmente se establece en launchd plist y no en el archivo my.ini. Entonces, en mi caso, me quité <string>--bind-address=127.0.0.1</string>de /Library/LaunchDaemons/homebrew.mxcl.mariadb.plist.

tdmartin102
fuente
Ubicación alternativa para el archivo plist:~/Library/LaunchAgents
Dylan Nissley
1

Si mysqldtiene una dirección de enlace establecida en una dirección de bucle de retorno / local (por ejemplo 127.0.0.1), el servidor no será accesible desde hosts remotos, porque no se puede acceder a una interfaz de bucle de retorno desde ningún host remoto.

Establezca esta opción en 0.0.0.0( ::para IPv4 + 6) para aceptar conexiones desde cualquier host u otra dirección de acceso externo si solo desea permitir conexiones en una interfaz.

Fuente

Wesley Smith
fuente
1

Habilitar el acceso raíz remoto puede ser peligroso. Sería preferible configurar cuentas de usuario con permisos más restrictivos. Los siguientes tres pasos deberían hacerlo.

  1. Asegúrese de que la línea que comienza bind-address ...al menos esté comentada en su archivo my.ini o my.cnf. Si no existe, sigue adelante. Puede encontrar este archivo en C:\ProgramData\MySQL\MySQL Server 8.0Windows.

  2. Luego, verifique que la cuenta de usuario con la que está estableciendo la conexión no se encuentra localhosten el campo Coincidencia de límites a hosts. Si bien no se recomienda, en su lugar, puede colocar %ese campo para fines de prueba. Puede hacerlo abriendo una conexión local al servidor con MySQL Workbench, luego vaya a Servidor> Usuarios y privilegios desde la barra de menú y busque la cuenta de usuario con la que desea conectarse.

El campo "Limitar a la coincidencia de hosts" es lo que no le permite conectarse de forma no local. Es decir, limita las conexiones aceptadas a un patrón de direcciones IP. Idealmente, debe acceder al servidor MySQL desde una dirección IP estática o subred, para que pueda ser lo más restrictivo posible.

  1. Obviamente, su firewall debe permitir que la aplicación del servidor MySQL se comunique a través del puerto que desee. El equipo de red física entre usted y su servidor debe permitir la comunicación en el puerto con el que desea conectarse. (puerto 3306 típicamente)
Nikola Petrovic
fuente
el reenvío del puerto (3306) en el enrutador me ayudó a agradecer.
Programador kurdo
0

algunas veces necesitan usar el nombre de la PC en Windows

primer paso) poner en el archivo de configuración de mysql:

mysqld.cnf SET dirección-enlace = 0.0.0.0

(para permitir recibir conexiones a través de tcp / ip)

segundo paso) hacer usuario en mysql, usuarios de tabla, con el nombre de la PC en las propiedades de Windows , NO ip

ingrese la descripción de la imagen aquí

Rubén Ruíz
fuente