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
Crea un proyecto nuevo en Google Cloud Platform Console. Puedes usar un proyecto existente, pero crear uno nuevo simplifica la limpieza.
Debes estar familiarizado con la instalación de MySQL en Compute Engine. Para ver una introducción, consulta Cómo instalar MySQL en Compute Engine.
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.
Usa GCP Console para habilitar la API de Compute Engine.
Instala el SDK de Cloud.
Configura tu lugar de trabajo para que los comandos sean menos detallados. Sustituye los valores de
project-id
ymy-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
- En GCP Console, ve a la página VM Instances.
- Haz clic en Crear instancia.
- Configura el Nombre como my-server.
- Haz clic en la pestaña Administración.
- En la sección Etiquetas, agrega mysql-server.
- Haz clic en Crear para crear la instancia.
Para establecer una conexión SSH:
- En la Consola de APIs, ve a la página Instancias de VM.
-
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
- 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
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
Actualiza el administrador de paquetes
apt-get
.sudo apt-get update
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
Instala MySQL.
sudo yum -y install mysql-server
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.
Actualiza el administrador de paquetes para que incluya MySQL.
sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
Instala MySQL.
sudo yum -y install mysql-community-server
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
Haz clic en Instancia nueva. Ponle este nombre a la instancia:
my-client
.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.
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
.Haz clic en Crear.
Para obtener las direcciones IP internas de ambas instancias, sigue estos pasos:
En la página VM instances de GCP Console, haz clic en my-client. Anota la dirección IP que aparece en IP interna.
Regresa a la página VM instances y haz clic en my-server. Anota la dirección IP que aparece en IP interna.
gcloud
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 comandogcloud compute images list
para ver una lista de proyectos y familias de imagen disponibles.gcloud compute instances create my-client --tags 'mysql-client'
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
En la página VM instances de GCP Console, busca
my-client
en la lista de instancias.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
Actualiza el administrador de paquetes
apt-get
.sudo apt-get update
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.
Actualiza el administrador de paquetes para que incluya MySQL.
sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
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:
En la página VM instances de GCP Console, busca la instancia
my-server
en la lista.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.
Abre el archivo de configuración
my.cnf
para editarlo.sudo nano /etc/mysql/my.cnf
En la línea que configura
bind-address
a127.0.0.1
, reemplaza127.0.0.1
con la dirección IP interna de la instanciamy-server
.bind-address = <internal-ip-my-server>
Guarda el cambio y sal del editor de texto.
Reinicia el servicio de MySQL.
sudo service mysql restart
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>
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 instanciamy-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>';
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>';
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:
En la página VM instances de GCP Console, busca
my-server
en la lista de instancias.En la columna Nombre, haz clic en my-server.
Busca la IP externa y haz clic en Editar.
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
.
Conéctate al servidor de MySQL mediante el cliente MySQL.
mysql --host='<internal-ip-my-server>' --user=TESTUSER --password
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)
Cuando hayas terminado de ejecutar comandos, usa el comando
exit
a fin de cerrar el cliente MySQL y luego usaexit
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
En GCP Console, ve a Herramientas de redes > Reglas de Firewall.
Selecciona la casilla de verificación default-allow-internal y luego haz clic en Editar.
En la sección Protocolos y puertos permitidos, cambia
tcp:1-65535
atcp: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
En GCP Console, agrega una regla de firewall nueva.
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
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:
- En la GCP Console, dirígete a la página Proyectos.
- En la lista de proyectos, selecciona el proyecto que deseas borrar y haz clic en Borrar.
- 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:
- En GCP Console, dirígete a la página Instancias de VM.
- Haz clic en la casilla de verificación junto atumy-serverinstancia.
- 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.