Conéctese a mysql en Amazon EC2 desde un servidor remoto

Quiero conectarme a db en EC2 desde mi máquina local, no puedo hacerlo y lo he intentado todo. Estoy usando este comando para conectarme a EC2:

mysql -uUSERNAME -hEC2_IP -pPASSWORD 

Este error se genera

ERROR 2003 (HY000): No se puede conectar al servidor MySQL en ‘IP’ (110)

He modificado my.cnf con

 skip networking bind-address = 0.0.0.0 

Todavía no se puede conectar a la base de datos

Podría haber una de las siguientes razones:

  1. Debe realizar una entrada en Amazon Security Group para permitir el acceso remoto desde su máquina a la instancia de Amazon EC2. : – Creo que esto lo hace usted, ya que a partir de su pregunta, parece que ya hizo una entrada con 0.0.0.0, que permite a todos acceder a la máquina.
  2. MySQL no permite que el usuario se conecte desde una máquina remota: – Por defecto MySql crea una identificación de usuario raíz con acceso de administrador. Pero el acceso de root ID está limitado a localhost solamente. Esto significa que la identificación del usuario raíz con la contraseña correcta no funcionará si intenta acceder a MySql desde una máquina remota. Para resolver este problema, debe permitir que el usuario raíz u otro usuario de BD acceda a MySQL desde una máquina remota. No recomendaría permitir que el usuario root acceda a la base de datos desde la máquina remota. Puede usar el carácter comodín% para especificar cualquier máquina remota.
  3. Verifique si el firewall local de la máquina no está habilitado. Y si está habilitado, entonces asegúrese de que el puerto 3306 esté abierto.

Por favor, vaya a través del siguiente enlace: ¿Cómo habilito el acceso remoto al servidor de bases de datos MySQL?

como se menciona en las respuestas anteriores, podría estar relacionado con grupos de seguridad de AWS y otras cosas. pero si usted creó un usuario y le dio acceso remoto ‘%’ y sigue obteniendo este error, verifique su archivo de configuración mysql, en debian, puede encontrarlo aquí: /etc/mysql/my.cnf y encontrar la línea:

 bind-address = 127.0.0.1 

y cambiarlo a:

 bind-address = 0.0.0.0 

y reinicia mysql.

en debian / ubuntu:

 /etc/init.d/mysql restart 

Espero que esto funcione para ti.

Actualización: feb 2017

Estos son los PASOS COMPLETOS para el acceso remoto de MySQL (implementado en Amazon EC2):

1. Agrega MySQL a las reglas de entrada.

Vaya al grupo de seguridad de su instancia de ec2 -> edite reglas de entrada -> agregue nueva regla -> elija MySQL/Aurora y el origen a Anywhere .

2. Agregue bind-address = 0.0.0.0 a my.cnf

En consola de instancia:

 sudo vi etc/my.cnf 

esto abrirá el editor vi.
en el archivo my.cnf, después de [mysqld] agrega una nueva línea y escribe esto:

 bind-address = 0.0.0.0 

Guarde el archivo ingresando :wq (enter)

ahora reinicia MySQL:

 sudo /etc/init.d/mysqld restart 

3. Cree un usuario remoto y otorgue privilegios.

iniciar sesión en MySQL:

mysql -u root -p mysql (ingrese la contraseña después de esto)

Ahora escribe los siguientes comandos:

 CREATE USER 'jerry'@'localhost' IDENTIFIED BY 'jerrypassword'; CREATE USER 'jerry'@'%' IDENTIFIED BY 'jerrypassword'; GRANT ALL PRIVILEGES ON *.* to jerry@localhost IDENTIFIED BY 'jerrypassword' WITH GRANT OPTION; GRANT ALL PRIVILEGES ON *.* to jerry@'%' IDENTIFIED BY 'jerrypassword' WITH GRANT OPTION; FLUSH PRIVILEGES; EXIT; 

Después de esto, se puede acceder de manera remota a MySQL dB ingresando dns / ip pública de su instancia como Dirección de host de MySQL, nombre de usuario como jerry y contraseña como jerrypassword. (El puerto está configurado por defecto en 3306)

Podría ser que no haya configurado el grupo de seguridad de Amazon asignado a su instancia EC2 para aceptar solicitudes entrantes en el puerto 3306 (puerto predeterminado para MySQL).

Si este es el caso, entonces puede abrir fácilmente el puerto para el grupo de seguridad con unos pocos clics de botón:

1) Inicie sesión en su AWS Console y vaya a ‘EC2’

2) En el menú de la izquierda, debajo de “Red y seguridad”, vaya a “Grupos de seguridad”

3) Compruebe el grupo de seguridad en cuestión

4) Haga clic en ‘pestaña de entrada’

5) Elija ‘MYSQL’ de la lista desplegable y haga clic en ‘Agregar regla’

Puede que no sea la razón, pero vale la pena ir …

Aunque esta pregunta parece ser respondida, otro problema común que puede obtener es que el usuario de la base de datos ha sido mal configurado. Este es un problema de administración y permisos de mysql:

  1. Lanzamiento de EC2_DB con IP 10.55.142.100
  2. Lanzamiento de EC2_web con IP 10.55.142.144
  3. EC2_DB y EC2_WEB están en el mismo grupo de seguridad con acceso a través de su puerto DB (3306)
  4. EC2_DB tiene un DB de mysql que puede ser alcanzado localmente por el usuario raíz de la base de datos ( 'root'@'localhost' )
  5. EC2_DB mysql DB tiene un usuario remoto 'my_user'@'%' IDENTIFIED BY PASSWORD 'password'
  6. Una llamada bash a mysql desde EC2_WEB falla: mysql -umy_user -p -h ip-10-55-142-100.ec2.internal como lo hace las referencias de host a la IP explícita, DNS público, etc.

El paso 6 falla porque el DB de mysql tiene los permisos de usuario incorrectos. Necesita esto:

 GRANT ALL PRIVILEGES ON *.* TO 'my_user'@'ip-10-55-142-144.ec2.internal' IDENTIFIED BY PASSWORD 'password' 

Me gustaría pensar que % funcionaría para cualquier servidor remoto, pero no encontré que este sea el caso.

Por favor, hágamelo saber si esto le ayuda.

Cambiar /etc/mysql/my.cnf :

 bind-address = 127.0.0.1 to 0.0.0.0 

Crear usuario con ‘%’ host y reiniciar:

 /etc/init.d/mysql restart 

¡Funciona para mi! 🙂

Un paso útil para rastrear este problema es identificar en qué dirección de enlace se establece MySQL. Puedes hacer esto con netstat:

 netstat -nat |grep :3306 

Esto me ayudó a concentrarme en mi problema, porque hay múltiples archivos de configuración de mysql y había editado uno incorrecto. Netstat mostró que mysql todavía estaba usando la configuración incorrecta:

 ubuntu@myhost:~$ netstat -nat |grep :3306 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 

Así que agrupé los directorios config para cualquier otro archivo que pudiera estar anulando mi configuración y encontré:

 ubuntu@myhost:~$ sudo grep -R bind /etc/mysql /etc/mysql/mysql.conf.d/mysqld.cnf:bind-address = 127.0.0.1 /etc/mysql/mysql.cnf:bind-address = 0.0.0.0 /etc/mysql/my.cnf:bind-address = 0.0.0.0 

D’oh! Esto me mostró que el ajuste que había ajustado era el archivo de configuración incorrecto, así que edité el archivo RIGHT esta vez, lo confirmé con netstat y estaba en funcionamiento.

Inicie sesión en AWS Management Console. Navegue a RDS, luego seleccione la instancia de db y vaya a “Grupos de seguridad”. Agregar CIDR / IP bajo el grupo de seguridad solucionó el problema.

La solución a esto son tres pasos:

  1. Dentro de MySQL, el archivo my.ini / my.cnf cambia la dirección de vinculación para aceptar la conexión desde todos los hosts (0.0.0.0).

  2. Dentro de la consola aws – grupo de seguridad específico de ec2, abra su puerto mysql (por defecto es 3306) para aceptar conexiones de todos los hosts (0.0.0.0).

  3. Dentro del firewall de Windows, agregue el puerto mysql (predeterminado es 3306) a las excepciones.

Y esto comenzará a aceptar conexiones remotas.

  • INICIE MYSQL usando el usuario administrador
    • mysql -u admin-user -p (INGRESAR CONTRASEÑA A LA VEZ)
  • Crea un nuevo usuario:
    • CREAR USUARIO ‘newuser’ @ ‘%’ IDENTIFICADO POR ‘password’; (% -> anyhost)
  • Privilegios de Grant:
    • GRANT SELECT, DELETE, INSERT, UPDATE ON db_name. * TO ‘newuser’ @ ‘%’;
    • FLUSH PRIVILEGES;

Si está ejecutando la instancia de EC2, no olvide agregar las reglas de entrada en el grupo de seguridad con MYSQL / Aurura.

Si estos pasos no funcionaron, compruebe el archivo /etc/mysql/my.cnf y edite el parámetro bind_address como

bind_address = 0.0.0.0

Para algunas configuraciones de ubuntu, la dirección de enlace debe cambiarse en este archivo:

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

Sé que esta es una publicación anterior, pero …

Estoy experimentando este problema y he establecido que, de hecho, mi problema no es la instancia de EC2. Parece que podría ser un error en el software del controlador del cliente MySQL. Todavía no he investigado a fondo, pero llegué a instalar MySQL Workbench en la instancia de EC2 y la TI también es errática: falla de forma intermitente al conectarse (el error es “conexión cancelada”). Este enlace sugiere un posible error más abajo en la stack, no EC2.

Por supuesto, no he hecho una investigación exhaustiva y mi publicación en realidad podría estar fuera de lugar, pero vale la pena señalar y / o explorar de todos modos, en mi humilde opinión.

Repasé todas las respuestas anteriores (y las respuestas a preguntas similares) sin éxito, así que aquí está lo que finalmente funcionó para mí. El paso clave fue otorgar explícitamente privilegios en el servidor mysql a un usuario local (para el servidor), pero con mi IP local adjunta ( myuser@*.*.*.* ). La solución completa paso a paso es la siguiente:

  1. Comente la línea bind_address en /etc/mysql/my.cnf en el servidor (es decir, la instancia EC2). Supongo que bind_address=0.0.0.0 también funcionaría, pero no es necesario ya que otros lo han mencionado.

  2. Agregue una regla (como otros han mencionado también) para MYSQL al grupo de seguridad de la instancia EC2 con el puerto 3306 y My IP o Anywhere como fuente. Ambos funcionan bien después de seguir todos los pasos.

  3. Cree un nuevo usuario myuser con privilegios limitados para una base de datos particular mydb (básicamente siguiendo las instrucciones en este tutorial de Amazon ):

     $EC2prompt> mysql -u root -p [...omitted output...] mysql> CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'your_strong_password'; mysql> GRANT ALL PRIVILEGES ON 'mydb'.* TO 'myuser'@'localhost';` 
  4. Este es el paso clave, sin el cual mi dirección local fue rechazada cuando intentaba una conexión remota (ERROR 1130 (HY000): Host '*.*.*.23' is not allowed to connect to this MySQL server) :

     mysql> GRANT ALL PRIVILEGES ON 'mydb'.* TO 'myuser'@'*.*.*.23'; mysql> FLUSH PRIVILEGES;` 

    (reemplace '*.*.*.23' por su dirección IP local)

  5. Para una buena medida, salí de mysql al shell y reinicié el servidor msyql:

    $EC2prompt> sudo service mysql restart

  6. Después de estos pasos, pude conectarme felizmente desde mi computadora con:

    $localprompt> mysql -h myinstancename.amazonaws.com -P 3306 -u myuser -p

    (reemplace myinstancename.amazonaws.com por la dirección pública de su instancia de EC2)

Al crear al usuario como ‘myuser’ @ ‘localhost’, el usuario se limita a conectarse solo desde localhost. Cree un usuario solo para acceso remoto y use la dirección IP de su cliente remoto desde donde se conectará al servidor MySQL. Si puede asumir el riesgo de permitir conexiones desde todos los hosts remotos (generalmente cuando usa una dirección IP dinámica), puede usar ‘myuser’ @ ‘%’. Hice esto, y también eliminé bind_address de /etc/mysql/mysql.cnf (Ubuntu) y ahora se conecta impecablemente.

 mysql> select host,user from mysql.user; +-----------+-----------+ | host | user | +-----------+-----------+ | % | myuser | | localhost | mysql.sys | | localhost | root | +-----------+-----------+ 3 rows in set (0.00 sec)