Cómo configurar el acceso remoto a MySQL en Compute Engine

Uno de los casos prácticos clave para instalar MySQL en Compute Engine como alternativa a Cloud SQL es mantener el servidor de MySQL y las aplicaciones cliente en una red privada. Cloud SQL asigna automáticamente una dirección IPv6 pública a cada instancia de Cloud SQL y brinda la opción de agregar una dirección IPv4 pública. Además, solo los clientes con direcciones IPv4 o IPv6 públicas pueden acceder de manera remota a una instancia de Cloud SQL.

A fin de ejecutar el servidor y el cliente MySQL en una red privada, usa las instancias de Compute Engine para el servidor y el cliente. En este documento, se describe cómo configurar la aplicación del servidor de MySQL para aceptar tráfico remoto desde un cliente MySQL que está instalado en una instancia de Compute Engine en la misma red privada.

Para obtener información acerca de cómo elegir la implementación MySQL correcta, consulta Cómo instalar MySQL en Compute Engine.

Objetivos

  • Crear una instancia de Compute Engine y luego instalar el servidor de MySQL
  • Crear una instancia de Compute Engine y luego instala el cliente MySQL
  • Configurar el servidor de MySQL para el acceso remoto
  • Contactar de forma remota a MySQL
  • Crear una regla de firewall para abrir el puerto 3306

Costos

En este instructivo se usan los siguientes componentes facturables de Google Cloud Platform:

  • Compute Engine

Usa la calculadora de precios a fin de generar una estimación de los costos según el uso previsto. Los usuarios nuevos de GCP pueden optar a una prueba gratuita.

Antes de comenzar

Puedes completar todos los pasos de este documento en GCP Console, pero si prefieres usar la herramienta de línea de comandos de gcloud, sigue estos pasos para habilitar la API de Compute Engine y luego instalar el SDK de Google Cloud.

  1. Usa GCP Console para habilitar la API de Compute Engine.

  2. Instala el SDK de Cloud.

  3. Configura tu lugar de trabajo para que los comandos sean menos detallados. Sustituye los valores de project-id y my-zone del proyecto en los siguientes comandos. Para ver la lista completa de las zonas, consulta Regiones y zonas disponibles.

    gcloud config set project project-id
    gcloud config set compute/zone my-zone
    

Cómo crear una instancia de Compute Engine y luego instala un servidor de MySQL

Crea una instancia para MySQL y establece una conexión SSH a la instancia recién creada. El sistema operativo predeterminado es Debian 9. Si prefieres usar otro sistema operativo para este instructivo, puedes elegir una de las opciones descritas en la página Sistemas operativos.

Crear una instancia de Compute Engine

Para crear una instancia de Compute Engine en GCP Console:

Console


  1. En GCP Console, ve a la página VM Instances.

    Ir a la página Instancias de VM

  2. Haz clic en Crear instancia.
  3. Configura el Nombre como my-server.
  4. Haz clic en la pestaña Administración.
  5. En la sección Etiquetas, agrega mysql-server.
  6. Haz clic en Crear para crear la instancia.

Para establecer una conexión SSH:

  1. En la Consola de APIs, ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. En la lista de instancias de máquinas virtuales, haz clic en el botón SSH de la fila de la instancia a la que quieres conectarte.

gcloud


  • Crea una instancia nueva de Compute Engine. Configúrala como se indica a continuación:
    • Especifica un nombre para la instanciamy-server.
    • Configura la marca --zone en la zona donde quieres que se cree la instancia.
    • Configura la marca --tags como mysql-server.
    gcloud compute instances create my-server --zone [ZONE] --tags mysql-server
  • Establece una conexión SSH con la instanciamy-server:
    gcloud compute ssh my-server

    Instalar el servidor de MySQL

    En los pasos a continuación, se describe cómo instalar MySQL en una instancia de Compute Engine.

    Debian y Ubuntu


    1. Actualiza el administrador de paquetes apt-get.

      sudo apt-get update
      
    2. Instala MySQL. El proceso de instalación inicia el servicio de MySQL por ti.

      sudo apt-get -y install mysql-server
      

    CentOS 6 y RHEL 6


    1. Instala MySQL.

      sudo yum -y install mysql-server
      
    2. Inicia el servidor de MySQL.

      sudo service mysqld start
      

    CentOS 7 y RHEL 7


    La versión 7 de CentOS y RHEL ahora contiene MariaDB en lugar de MySQL como parte de su sistema de administración de paquetes. Si quieres instalar MySQL en CentOS 7, primero debes actualizar el administrador de paquetes.

    1. Actualiza el administrador de paquetes para que incluya MySQL.

      sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
      
    2. Instala MySQL.

      sudo yum -y install mysql-community-server
      
    3. Inicia el servidor de MySQL.

      sudo /usr/bin/systemctl start mysqld
      

    Mejorar la seguridad en la instalación de MySQL

    Para mejorar la seguridad en la instalación de MySQL, ejecuta el comando mysql_secure_installation. Si no configuraste una contraseña durante el proceso de instalación, créala en este paso. Para obtener más información sobre este comando, consulta mysql_secure_installation en la documentación de MySQL.

        sudo mysql_secure_installation
    

    Cómo crear una instancia de Compute Engine y luego instalar un cliente MySQL

    Crea una instancia de Compute Engine que use el cliente MySQL para acceder de forma remota al servidor de MySQL en la instancia de my-server. El sistema operativo predeterminado es Debian 9. Si prefieres usar otro sistema operativo para este instructivo, puedes elegir una de las opciones descritas en la página Sistemas operativos.

    Crea una instancia de Compute Engine y luego instala el cliente MySQL

    Console


    1. Haz clic en Instancia nueva. Ponle este nombre a la instancia: my-client.

    2. Si quieres especificar un sistema operativo distinto del valor predeterminado, en la sección Disco de arranque, haz clic en Cambiar, selecciona el sistema operativo y luego haz clic en Seleccionar.

    3. Haz clic en Administración, seguridad, discos, herramientas de redes, inquilino único para ver la configuración avanzada. En la pestaña Herramientas de redes, agrega una etiqueta de red denominada mysql-client.

    4. Haz clic en Crear.

    Para obtener las direcciones IP internas de ambas instancias, sigue estos pasos:

    1. En la página VM instances de GCP Console, haz clic en my-client. Anota la dirección IP que aparece en IP interna.

    2. Regresa a la página VM instances y haz clic en my-server. Anota la dirección IP que aparece en IP interna.

    gcloud


    1. Para crear una instancia de Compute Engine, usa el comando gcloud compute instances create. Para usar otro sistema operativo, especifica el proyecto y la familia de la imagen del sistema operativo relevante mediante las marcas de línea de comandos --image-project y --image-family. Ejecuta el comando gcloud compute images list para ver una lista de proyectos y familias de imagen disponibles.

      gcloud compute instances create my-client --tags 'mysql-client'
      
    2. Ejecuta el siguiente comando y anota la dirección IP interna de las instancias que aparecen en la columna INTERNAL_IP:

      gcloud compute instances list
      

    Establecer una conexión SSH a my-client

    Sigue estas instrucciones para establecer una conexión SSH a la instancia my-client recién creada.

    Console


    1. En la página VM instances de GCP Console, busca my-client en la lista de instancias.

    2. En la columna Conectar, haz clic en SSH. La terminal SSH se abre en una ventana de navegador.

    gcloud


    Conéctate a la instancia con SSH.

        gcloud compute ssh my-client
    

    Instalar el cliente MySQL

    En los siguientes pasos, se describe cómo instalar el cliente MySQL, my-client.

    Debian y Ubuntu


    1. Actualiza el administrador de paquetes apt-get.

      sudo apt-get update
      
    2. Instala el cliente MySQL. El proceso de instalación inicia el servicio de MySQL por ti.

      sudo apt-get -y install mysql-client
      

    CentOS 6 y RHEL 6


    Instala el cliente MySQL.

        sudo yum -y install mysql-client
    

    CentOS 7 y RHEL 7


    La versión 7 de CentOS y RHEL ahora contiene MariaDB en lugar de MySQL como parte de su sistema de administración de paquetes. Si quieres instalar MySQL en CentOS 7, primero debes actualizar el administrador de paquetes.

    1. Actualiza el administrador de paquetes para que incluya MySQL.

      sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
      
    2. Instala el cliente MySQL.

      sudo yum -y install mysql-community-client
      

    Cómo configurar el servidor de MySQL en my-server

    Usa la conexión SSH existente a my-server para configurar el servidor de MySQL. Si cierras la conexión SSH a my-server, sigue estas instrucciones para restablecer una conexión SSH.

    Console


    Para establecer una conexión SSH:

    1. En la página VM instances de GCP Console, busca la instancia my-server en la lista.

    2. En la columna Conectar, haz clic en SSH. La terminal SSH se abre en una ventana de navegador.

    gcloud


    Conéctate a la instancia con SSH.

        gcloud compute ssh my-server
    

    Si quieres configurar el servidor de MySQL para que acepte las conexiones remotas desde un cliente MySQL en my-client, modifica el archivo de configuración de MySQL y luego agrega el usuario a la tabla de usuarios de MySQL.

    1. Abre el archivo de configuración my.cnf para editarlo.

      sudo nano /etc/mysql/my.cnf
      
    2. En la línea que configura bind-address a 127.0.0.1, reemplaza 127.0.0.1 con la dirección IP interna de la instancia my-server.

      bind-address            = <internal-ip-my-server>
      
    3. Guarda el cambio y sal del editor de texto.

    4. Reinicia el servicio de MySQL.

      sudo service mysql restart
      
    5. Accede al servidor de MySQL como usuario con permisos de administrador de MySQL.

      mysql --user=root -p
      

      Cuando te conectas a MySQL, el mensaje cambia a:

      mysql>
      
    6. En la línea de comandos de MySQL, crea un usuario nuevo con el nombre TESTUSER y reemplaza nuevamente <internal-ip-my-client> con la dirección IP interna de la instancia my-client y <some-password> con la contraseña que elijas. Necesitarás la contraseña para acceder de forma remota al servidor de MySQL.

      CREATE USER 'TESTUSER'@'<internal-ip-my-client>' IDENTIFIED BY '<some-password>';
      
    7. En la línea de comandos de MySQL, otorga los privilegios necesarios al usuario TESTUSER recién creado.

      GRANT ALL PRIVILEGES ON *.* TO 'TESTUSER'@'<internal-ip-my-client>' IDENTIFIED BY '<some-password>';
      
    8. Sal de la línea de comandos de MySQL y finaliza la conexión SSH a my-server.

      exit
      exit
      

    Cómo quitar la dirección IP externa de my-server

    La instancia my-server no necesita una dirección IP externa, ya que el cliente puede acceder a my-server mediante una dirección IP interna. También puedes quitar la dirección IP externa de la instancia my-client, pero puedes dejarla en su lugar debido a que es más fácil establecer una conexión SSH a my-client si aún tiene una dirección IP externa.

    Sigue estas instrucciones para quitar la dirección IP externa de la instancia my-server.

    Console


    Para quitar la dirección IP externa, sigue estos pasos:

    1. En la página VM instances de GCP Console, busca my-server en la lista de instancias.

    2. En la columna Nombre, haz clic en my-server.

    3. Busca la IP externa y haz clic en Editar.

    4. Selecciona Ninguno en la lista desplegable y haz clic en Guardar

    gcloud


    Para quitar la dirección IP externa, actualiza las opciones de configuración.

        gcloud compute instances delete-access-config my-server --access-config-name "external-nat"
    

    Cómo acceder al servidor de MySQL de forma remota

    En los siguientes, se describe cómo conectarse al servidor de MySQL en my-server desde tu instancia my-client.

    1. Conéctate al servidor de MySQL mediante el cliente MySQL.

      mysql --host='<internal-ip-my-server>' --user=TESTUSER --password
      
    2. Luego, puedes ejecutar comandos de MySQL. Por ejemplo, el siguiente comando muestra los subprocesos en ejecución, incluida la conexión actual.

      show processlist;
      
      +----+----------+---------------------------------------+------+---------+------+-------+------------------+
      | Id | User     | Host                                  | db   | Command | Time | State | Info             |
      +----+----------+---------------------------------------+------+---------+------+-------+------------------+
      | 38 | TESTUSER | my-client.c.mysql-1043.internal:59154 | NULL | Query   |    0 | NULL  | show processlist |
      +----+----------+---------------------------------------+------+---------+------+-------+------------------+
      1 row in set (0.00 sec)
      

      Puedes usar el siguiente comando para generar una lista de usuarios.

      SELECT User, Host, Password FROM mysql.user;
      
      +------------------+--------------+-------------------------------------------+
      | User             | Host         | Password                                  |
      +------------------+--------------+-------------------------------------------+
      | root             | localhost    | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
      | TESTUSER         | 10.240.88.10 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
      | root             | 127.0.0.1    | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
      | root             | ::1          | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
      | debian-sys-maint | localhost    | *619310B1BAC2FD6F6174D5C73C9E5A35F3B8F729 |
      +------------------+--------------+-------------------------------------------+
      5 rows in set (0.00 sec)
      
    3. Cuando hayas terminado de ejecutar comandos, usa el comando exit a fin de cerrar el cliente MySQL y luego usa exit nuevamente para salir de la instancia de Compute Engine.

      exit
      exit
      

    Consideraciones de redes avanzadas

    Por lo general, cuando configuras el acceso remoto para el servidor MySQL, necesitas abrir el puerto 3306 en el servidor. No era necesario abrir ese puerto en este instructivo debido a que la configuración de red predeterminada incluye una regla de firewall, default-allow-internal, que permite el tráfico interno entre las instancias de Compute Engine en un rango amplio de puertos, incluido el puerto 3306.

    Si creas una configuración de red propia y no contiene una regla de firewall que incluya el puerto 3306, deberás abrir el puerto 3306. A fin de simular este estado, modifica la regla default-allow-internal para que excluya el puerto 3306.

    Puede basar las reglas de firewall en rangos de direcciones IP o etiquetas. Los rangos de direcciones IP son útiles si deseas otorgar acceso a un rango amplio de direcciones IP internas. Como alternativa, si deseas otorgar acceso a instancias específicas en la red, las etiquetas brindan una solución más flexible. Agregar clientes nuevos sin otorgar acceso a un rango amplio de direcciones IP es más fácil con el uso de etiquetas. Solo necesitas asignar la etiqueta adecuada a la instancia nueva de cliente MySQL. Por ejemplo, puedes crear una regla de firewall nueva que permita el tráfico desde todas las instancias de cliente con la etiqueta mysql-client.

    Recuerda que ya asignaste etiquetas a las dos instancias que creaste en este instructivo: mysql-server a la instancia my-server y mysql-client a la instancia my-client.

    En las siguientes secciones, se describe cómo modificar la regla de firewall predeterminada para excluir el puerto 3306 y luego crear una regla de firewall nueva que abra el puerto 3306 en todas las instancias con la etiqueta mysql-server.

    Modifica la regla de firewall predeterminada

    Console


    1. En GCP Console, ve a Herramientas de redes > Reglas de Firewall.

      IR A REGLAS DE FIREWALL

    2. Selecciona la casilla de verificación default-allow-internal y luego haz clic en Editar.

    3. En la sección Protocolos y puertos permitidos, cambia tcp:1-65535 a tcp:1-3305 y luego haz clic en Guardar.

    gcloud


        gcloud compute firewall-rules update default-allow-internal --allow tcp:1-3305,udp:1-65535,icmp
    

    Si intentas conectarte a MySQL desde my-client, se agota el tiempo de espera de la solicitud.

    Agrega una regla de firewall nueva

    Console


    1. En GCP Console, agrega una regla de firewall nueva.

    2. Ingresa los siguientes valores:

      • Nombre: mysql-remote-access

      • Filtro de fuente: Instance tags

      • Etiquetas de fuente: mysql-client

      • Puertos y protocolos permitidos: tcp:3306

      • Etiquetas de destino: mysql-server

    3. Haz clic en Crear.

    gcloud


        gcloud compute firewall-rules create "mysql-remote-access" --allow tcp:3306 --source-tags "mysql-client" --target-tags "mysql-server"
    

    Ahora, podrás conectarte a MySQL desde my-client.

    Limpieza

    Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos que usaste en este instructivo:

    Una vez que hayas terminado el instructivo de MySQL, limpia los recursos creados en Google Cloud Platform para que no se te facturen en el futuro. La siguiente sección describe cómo borrar o desactivar estos recursos.

    Borrar el proyecto

    La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

    Para borrar el proyecto, haz lo siguiente:

    1. En la GCP Console, dirígete a la página Proyectos.

      Ir a la página Proyectos

    2. En la lista de proyectos, selecciona el proyecto que deseas borrar y haz clic en Borrar.
    3. En el cuadro de diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

    Borrar instancias

    Para borrar una instancia de Compute Engine:

    1. En GCP Console, dirígete a la página Instancias de VM.

      Ir a la página Instancias de VM

    2. Haz clic en la casilla de verificación junto atumy-serverinstancia.
    3. Haz clic en el botón Borrar en la parte superior de la página para borrar la instancia.

    ¿Qué sigue?

    • Para consultar apps más complejas que usan MySQL, explora la Variedad amplia de pilas de desarrollo en Google Cloud Platform Marketplace que usa MySQL.

    • Si tus requisitos incluyen alta disponibilidad y escalabilidad, considera instalar el Clúster de MySQL en Compute Engine. El clúster de MySQL proporciona alta disponibilidad y escalabilidad mediante la agrupación de clústeres que no comparten nada y la fragmentación automática. GCP Marketplace proporciona una opción con implementación en un clic para Percona, una solución de código abierto que se puede aplicar al agrupamiento de clústeres de MySQL.

    • Otra solución de código abierto para la escalabilidad en MySQL es Vitess, que ha entregado todo el tráfico de base de datos de YouTube desde 2011. Vitess es ideal para apps que se ejecutan en contenedores. Para obtener más información sobre cómo usar Vitess en un entorno en contenedores, consulta Ejecuta Vitess en Kubernetes.

    • Para obtener más información sobre MySQL, consulta la Documentación oficial de MySQL.

    • Prueba otras funciones de Google Cloud Platform tú mismo. Revisa nuestros instructivos.

    ¿Te ha resultado útil esta página? Enviar comentarios:

    Enviar comentarios sobre...