No se puede acceder de forma remota al servidor MySQL que se ejecuta en Mac OS X


11

Tengo un servidor MySQL ejecutándose en mi computadora de trabajo, que ejecuta Mac OS X Maverick. Quiero acceder desde la computadora de mi casa, que también tiene Mac OS Maverick.

Desde la terminal, si en 1 pestaña, ingreso a mi computadora de trabajo y simplemente dejo que la sesión ssh permanezca allí sin estar inactiva, luego en otra pestaña, puedo acceder al servidor MySQL.

Sin embargo, sin la sesión ssh ejecutándose, obtendré el siguiente error

ERROR 2003 (HY000): no se puede conectar al servidor MySQL en 'SERVER_IP_ADDRESS' (60)

Intenté modificar el my.cnfarchivo en el servidor comentando la dirección de enlace o asignándola, 0.0.0.0pero no funciona.

¿Por qué es así? ¿Cómo puedo configurar el servidor para que permita el acceso remoto sin tener que ejecutar ssh en el cliente? ¿Puede ayudarme alguien, por favor?


Tengo el mismo problema con PostGIS ejecutándose en OS X remoto ... puedo conectarme a la base de datos cuando sshestá abierto en una pestaña, pero por lo demás no. Creo que el problema es que el proceso del servidor de la base de datos está en pausa o no se ejecuta cuando no estoy conectado al servidor remoto.
andybega

Respuestas:


20

He estado golpeando mi cabeza contra este error hoy en OSX Yosemite con MySQL 5.7 actualizado recientemente con Homebrew. Siguiendo las sugerencias sobre StackOverflow y en otros lugares, busqué los my.cnfarchivos que especificaban bind-address=0.0.0.0. Incluso eliminé y reinstalé MySQL siguiendo estas instrucciones y luego reinstalé usando brew install mysql. Todavía no se permiten conexiones remotas.

No fue hasta que corrí ps -ax | grep mysqly noté que la dirección de enlace se pasaba en el comando de inicio (anulando así los my.cnfarchivos) que cavé un poco más y descubrí que Homebrew vincula MySQL a 127.0.0.1 por defecto .

Editar ~/Library/LaunchAgents/homebrew.mxcl.mysql.plistpara cambiar --bind-address=127.0.0.1para --bind-address=0.0.0.0resolver mi problema (este último debe cambiarse a una dirección IP específica si esto no es solo una máquina de desarrollo).

Siento que esta es una información vital que faltaba en la mayoría de los recursos que consulté, ¡así que espero que publicar esto aquí ayude a alguien más!

EDITAR: Como LeandroCR indicó en los comentarios, la ejecución brew services restart mysqlsobrescribirá el archivo plist en LaunchAgents con el predeterminado, lo que lleva a MySQL a rechazar misteriosamente las conexiones nuevamente. Entonces, un mejor consejo que el que escribí originalmente es el siguiente:

  1. Edite /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plisty reemplace --bind-address=127.0.0.1con bind-address=*o --bind-address=0.0.0.0( consulte la documentación de MySQL en bind-address )
  2. Reinicie mysql usando brew services restart mysql

Entonces MySQL debería continuar aceptando conexiones no locales a partir de entonces, hasta que lo reinstales, presumiblemente.

Editar (septiembre de 2019) Timothy Zorn señala que este problema ya no se produce para MySQL 8.x instalado y ejecutado a través de Homebrew, por lo que mi respuesta anterior, escrita en 2016, solo puede ser relevante para 5.x.


3
Otro consejo: si está ejecutando $ brew services, reinicie mysql, siempre limpiará el archivo plist de LaunchAgents. Si quiere persistir en ese cambio, edite /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plist - ¡También Emma muchas gracias!
LeandroCR

Instalé mysql 5.6 usando brew install mysql56, y cambié los archivos ~/Library/LaunchAgents/homebrew.mxcl.mysql56.plisty /usr/local/Cellar/mysql56/5.6.32/homebrew.mxcl.mysql56.plist. Pero aún cuando ejecuto mysql mysql.server start, el comando ps muestra que el bind-address=127.0.0.1. ¿Hay otros archivos para editar?
xi.lin

@ xi.lin Según tengo entendido, mysql.server startomite el LaunchAgent, por lo que probablemente obtiene su configuración de otro lugar. Para usar la configuración en el plist, probablemente tenga que usarbrew services restart mysql
Emma Burrows

@EmmaBurrows Usando la brew services restart mysqlsalida Successfully started mysql` (etiqueta: homebrew.mxcl.mysql) `pero la dirección sigue siendo 127.0.0.1 . En realidad no pude encontrar en homebrew.mxcl.mysql.plistlugar de tenerhomebrew.mxcl.mysql56.plist
xi.lin

1
A partir de ahora, ya no es así como funciona. El comando que solía ejecutar mysqld_safepara mí no tiene bind_address. En cambio, se especifica en /usr/local/etc/my.cnf.
Timmmm

6

Running locate my.cnfencontró el archivo/usr/local/etc/my.cnf

  1. Edite ese archivo y establezca bind-address = 0.0.0.0
  2. Reinicie mysql: brew services restart mysql

5

Espero que necesite crear el usuario para acceso remoto con '%'comodines y otorgar permisos en bases de datos.

Paso 1:

En my.cnf ( /server/9107/how-do-i-find-where-mysql-is-loading-its-config-from ) comente su dirección de enlace

# bind-address        = xxx.xxx.xxx.xxx

Y reinicie el servidor MySQL.

Paso 2:

Luego debe otorgar permisos al usuario para acceso remoto

GRANT ALL ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypass';

Eche un vistazo a Cómo habilitar la conexión remota.


He intentado esta configuración (comentando dirección de enlace) antes y no funcionó. He creado un usuario y otorgué todos los permisos también. mysql> show grants for 'home'; | Grants for home@% | GRANT ALL PRIVILEGES ON *.* TO 'home'@'%' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
Chepukha

¿Tienes algún firewall instalado? Si es así, desactívelo.
Abdul Manaf

Sí, puedo acceder al servidor cuando el firewall está apagado. Pero, ¿puedo configurar el firewall para permitir el acceso remoto al servidor sql en lugar de desactivarlo por completo? En el servidor, en la configuración del firewall, configuré mysqld para "permitir conexiones entrantes"
chepukha

¿Tiene SQL Server también instalado en la misma máquina?
Abdul Manaf

Sí. ¿Te refieres al servidor SQL y al Firewall en la misma máquina?
chepukha

0

Verifique iptables como iptables -L

Si su IP no está presente, agréguela

En el caso de Ubuntu ADD IP para permitir el acceso:

iptables -A ALLOWIN -s 192.168.1.XX/32 ! -i lo -j ACCEPT
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.