Conecta un cliente MySQL desde Compute Engine

En esta página se describe cómo usar el cliente MySQL, instalado en una instancia de Compute Engine, con el fin de conectarlo a Cloud SQL.

Puedes usar una IP privada, una IP pública, el proxy de Cloud SQL Auth o la imagen de Docker del proxy de Cloud SQL Auth.

Antes de comenzar

Antes de que puedas conectarte a tu instancia de Cloud SQL, debes tener un usuario (raíz) de base de datos predeterminado en la instancia.

Esta tarea no incluye instrucciones para configurar la instancia de Compute Engine. Si necesitas ayuda para crear y configurar una instancia de Compute Engine, consulta la documentación de Compute Engine.

IP privada

A fin de conectarte a Cloud SQL desde una instancia de Compute Engine con una IP privada, el acceso a servicios privados debe estar configurado para tu entorno y la instancia de Cloud SQL debe estar configurada para usar una IP privada. La instancia de Compute Engine debe estar en la misma región que la instancia de Cloud SQL y en la red configurada para una conexión privada. >Obtén más información.

1. Configura tu instancia para que utilice una IP privada.

Usa las instrucciones de Cómo configurar la conectividad de IP privada.

2. Abre una conexión terminal en tu instancia de Compute Engine.

Sigue las instrucciones correspondientes según el sistema operativo de la instancia:

Si tu instancia de Compute Engine ejecuta una imagen pública CentOS o RHEL, es posible que SELinux bloquee la conexión del proxy. Si esto sucede, debes configurar la función SELinux para permitir la conexión.

Si deseas obtener más información sobre SELinux para RHEL, consulta la documentación de RHEL. Si deseas obtener más información sobre SELinux para CentOS, consulta la documentación de CentOS.

3. Instala el cliente MySQL en la instancia de Compute Engine, si todavía no está instalado.

Debian/Ubuntu

Instala el cliente MySQL desde el administrador de paquetes:

sudo apt-get update
sudo apt-get install mariadb-server-10.3

CentOS/RHEL

Instala el cliente MySQL desde el administrador de paquetes:

sudo yum install mysql

openSUSE

Instala el cliente MySQL desde el administrador de paquetes:

sudo zypper install mysql-server

Otras plataformas

  1. Descarga el servidor de la comunidad de MySQL para tu plataforma desde la página de descarga del servidor de la comunidad de MySQL.
    El servidor de la comunidad incluye el cliente MySQL.
  2. Instala el servidor de la comunidad con las instrucciones que se muestran en la página de descargas.

Para obtener más información sobre cómo instalar MySQL, consulta el manual de referencia de MySQL: Instala y actualiza MySQL.

4. Conéctate con el cliente MySQL.

mysql --host=[CLOUD_SQL_PRIVATE_IP_ADDR] --user=root --password

IP pública

Para conectarte mediante una IP pública, sigue estos pasos:


Para obtener orientación paso a paso directamente sobre esta tarea directamente en el editor de Cloud Shell, haz clic en Guiarme:

GUIARME


En las siguientes secciones, se explican los mismos pasos que cuando se hace clic en Guiarme.

1. Agrega una dirección IP IPv4 estática a la instancia de Compute Engine, si no tiene una.

No puedes conectarte a Compute Engine con IPv6. Para obtener más información sobre cómo agregar una dirección IP estática, consulta Reserva una nueva dirección IP externa estática en la documentación de Compute Engine.

2. Autoriza la dirección IP estática de la instancia de Compute Engine como una red para que se pueda conectar a tu instancia de Cloud SQL.

Si quieres obtener más información, consulta Configura el acceso para conexiones IP públicas.

3. Abre una conexión terminal en tu instancia de Compute Engine.

Sigue las instrucciones correspondientes según el sistema operativo de la instancia:

Si tu instancia de Compute Engine ejecuta una imagen pública CentOS o RHEL, es posible que SELinux bloquee la conexión del proxy. Si esto sucede, debes configurar la función SELinux para permitir la conexión.

Si deseas obtener más información sobre SELinux para RHEL, consulta la documentación de RHEL. Si deseas obtener más información sobre SELinux para CentOS, consulta la documentación de CentOS.

4. Instala el cliente MySQL en la instancia de Compute Engine, si todavía no está instalado.

Debian/Ubuntu

Instala el cliente MySQL desde el administrador de paquetes:

sudo apt-get update
sudo apt-get install mariadb-server-10.3

CentOS/RHEL

Instala el cliente MySQL desde el administrador de paquetes:

sudo yum install mysql

openSUSE

Instala el cliente MySQL desde el administrador de paquetes:

sudo zypper install mysql-server

Otras plataformas

  1. Descarga el servidor de la comunidad de MySQL para tu plataforma desde la página de descarga del servidor de la comunidad de MySQL.
    El servidor de la comunidad incluye el cliente MySQL.
  2. Instala el servidor de la comunidad con las instrucciones que se muestran en la página de descargas.

Para obtener más información sobre cómo instalar MySQL, consulta el manual de referencia de MySQL: Instala y actualiza MySQL.

5. Conéctate con el cliente MySQL.

mysql --host=[CLOUD_SQL_PUBLIC_IP_ADDR] --user=root --password
Run the following gcloud command to find the CLOUD_SQL_PUBLIC_IP_ADDR:

gcloud sql instances list

Para ver un ejemplo sobre cómo conectarte con SSL, consulta Conéctate con SSL.

6. Aparecerá el cuadro de MySQL.

7. Si necesitas mantener activas las conexiones que no se usan, sigue estos pasos:

Configura el TCP keepalive.

Para obtener más información, consulta la página sobre cómo comunicar tus instancias a Internet en la documentación de Compute Engine.

Las conexiones se mantienen activas automáticamente para las instancias.

Proxy de Cloud SQL Auth

Para conectarse mediante el proxy de Cloud SQL Auth desde Compute Engine, sigue estos pasos:

1. Habilita la API de Administrador de Cloud SQL

Habilita la API

2. Crea una cuenta de servicio.

  1. Ve a la página Cuentas de servicio de Google Cloud Console.

    Ve a la página Cuentas de servicio

  2. Selecciona el proyecto que contiene la instancia de Cloud SQL.
  3. Haga clic en Crear cuenta de servicio.
  4. En el cuadro de diálogo Crear cuenta de servicio, ingresa un nombre descriptivo para la cuenta de servicio.
  5. Cambia el ID de cuenta de servicio por un valor único y reconocible y, luego, haz clic en Crear.
  6. En Función, selecciona una de las siguientes funciones, haz clic en Continuar y, luego, haz clic en Listo:
    • Cloud SQL > Cliente de Cloud SQL
    • Cloud SQL > Editor de Cloud SQL
    • Cloud SQL > Administrador de Cloud SQL
  7. Haz clic en el menú de acciones de tu nueva cuenta de servicio y, luego, selecciona Administrar claves.
  8. Haz clic en el menú desplegable Agregar clave y, luego, en Crear clave nueva.
  9. Confirma que el tipo de clave sea JSON y, luego, haz clic en Crear.

    El archivo de claves privadas se descargará en tu equipo. Puedes moverlo a otra ubicación. Protege el archivo de claves.

Si la instancia de Compute Engine se encuentra en un proyecto diferente que la instancia de Cloud SQL, asegúrate de que la cuenta de servicio tenga los permisos correspondientes en el proyecto que contiene la instancia de Cloud SQL:

  1. Ve a la lista de instancias de Compute Engine en Google Cloud Console.

    Ir a la lista de instancias de Compute Engine

  2. Si es necesario, selecciona el proyecto asociado con la instancia de Compute Engine.
  3. Selecciona la instancia de Compute Engine para ver las propiedades.
  4. En las propiedades de la instancia de Compute Engine, copia el nombre de la cuenta de servicio.
  5. Ve a la página Proyectos de IAM y de administración en Google Cloud Console.

    Ir a la página Proyectos de IAM y de administración

  6. Selecciona el proyecto que contiene la instancia de Cloud SQL.
  7. Busca el nombre de la cuenta de servicio.
  8. Si la cuenta de servicio ya existe y tiene una función que incluye el permiso cloudsql.instances.connect, puedes continuar con el paso 4.

    Las funciones de Cloud SQL Client, Cloud SQL Editor y Cloud SQL Admin brindan los permisos necesarios, al igual que las funciones de proyecto heredadas Editor y Owner.

  9. De lo contrario, haz clic en Agregar para incluir la cuenta de servicio.
  10. En el diálogo Agregar miembros, ingresa el nombre de la cuenta de servicio y selecciona una función que incluya el permiso cloudsql.instances.connect (cualquier función predefinida de Cloud SQL funcionará, excepto la función de visualizador).

    O bien, puedes seleccionar Proyecto > Editor a fin de usar la función básica de editor, pero esta incluye permisos para todo Google Cloud.

    Si no ves estas funciones, es posible que tu usuario de Google Cloud no tenga el permiso resourcemanager.projects.setIamPolicy. Para comprobar tus permisos, accede a la página de IAM en Google Cloud Console y busca tu ID de usuario.

  11. Haz clic en Agregar.

    Ahora verás que la cuenta de servicio aparece con la función especificada.

3. Abre una conexión terminal en tu instancia de Compute Engine.

Sigue las instrucciones correspondientes según el sistema operativo de la instancia:

Si tu instancia de Compute Engine ejecuta una imagen pública CentOS o RHEL, es posible que SELinux bloquee la conexión del proxy. Si esto sucede, debes configurar la función SELinux para permitir la conexión.

Si deseas obtener más información sobre SELinux para RHEL, consulta la documentación de RHEL. Si deseas obtener más información sobre SELinux para CentOS, consulta la documentación de CentOS.

4. Instala el cliente MySQL en la instancia de Compute Engine, si todavía no está instalado.

Debian/Ubuntu

Instala el cliente MySQL desde el administrador de paquetes:

sudo apt-get update
sudo apt-get install mariadb-server-10.3

CentOS/RHEL

Instala el cliente MySQL desde el administrador de paquetes:

sudo yum install mysql

openSUSE

Instala el cliente MySQL desde el administrador de paquetes:

sudo zypper install mysql-server

Otras plataformas

  1. Descarga el servidor de la comunidad de MySQL para tu plataforma desde la página de descarga del servidor de la comunidad de MySQL.
    El servidor de la comunidad incluye el cliente MySQL.
  2. Instala el servidor de la comunidad con las instrucciones que se muestran en la página de descargas.

Para obtener más información sobre cómo instalar MySQL, consulta el manual de referencia de MySQL: Instala y actualiza MySQL.

5. Instala el proxy de Cloud SQL Auth en la instancia de Compute Engine.

Linux de 64 bits

  1. Descarga el proxy de autenticación de Cloud SQL:
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  2. Haz que el proxy de autenticación de Cloud SQL sea ejecutable:
    chmod +x cloud_sql_proxy
    

Linux de 32 bits

  1. Descarga el proxy de autenticación de Cloud SQL:
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
    
  2. Haz que el proxy de autenticación de Cloud SQL sea ejecutable:
    chmod +x cloud_sql_proxy
    

Windows de 64 bits

Para descargar el proxy de autenticación de Cloud SQL, haz clic con el botón derecho en https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe y selecciona Guardar vínculo como. Cambia el nombre del archivo por cloud_sql_proxy.exe.

Windows de 32 bits

Para descargar el proxy de autenticación de Cloud SQL, haz clic derecho en https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe y selecciona Guardar vínculo como. Cambia el nombre del archivo por cloud_sql_proxy.exe.

Imagen de Docker del proxy de autenticación de Cloud SQL

Para mayor comodidad, el equipo de Cloud SQL mantiene varias imágenes de contenedor que poseen el proxy de autenticación de Cloud SQL para que lo usen nuestros clientes. Para obtener más información sobre estas imágenes, consulta el repositorio del proxy de autenticación de Cloud SQL en GitHub. Puedes extraer la última imagen a tu máquina local usando Docker mediante el siguiente comando:
docker pull gcr.io/cloudsql-docker/gce-proxy:1.21.0

Otro SO

Para otros sistemas operativos que no se incluyen aquí, puedes compilar el proxy de Cloud SQL Auth desde la fuente.

6. Inicia el proxy de Cloud SQL Auth.

Según tu lenguaje y entorno, puedes iniciar el proxy de Cloud SQL Auth con sockets TCP, sockets de Unix o la imagen de Docker del proxy de Cloud SQL Auth. El objeto binario del proxy de autenticación de Cloud SQL se conecta a una o más instancias de Cloud SQL especificadas en la línea de comandos y abre una conexión local como un socket TCP o Unix. Otras aplicaciones y servicios, como el código de tu aplicación o las herramientas de administración de bases de datos de cliente, pueden conectarse a las instancias de Cloud SQL mediante esos sockets TCP o Unix.

Sockets TCP

En el caso de las conexiones TCP, el proxy de autenticación de Cloud SQL escucha en localhost(127.0.0.1) de forma predeterminada. Por lo tanto, cuando especificas tcp:PORT_NUMBER en una instancia, la conexión local está en 127.0.0.1:PORT_NUMBER.

Como alternativa, puedes especificar una dirección diferente para la conexión local. Por ejemplo, a continuación, se muestra cómo hacer que el proxy de autenticación de Cloud SQL escuche en 0.0.0.0:1234 para la conexión local:

  ./cloud_sql_proxy -instances=INSTANCE_CONNECTION_NAME=tcp:0.0.0.0:1234
  1. Copia tu INSTANCE_CONNECTION_NAME. Puedes encontrarlo en la página Descripción general de la instancia en Google Cloud Console o mediante la ejecución del siguiente comando:

    gcloud sql instances describe INSTANCE_NAME
    .

    Por ejemplo: myproject:myregion:myinstance.

  2. Si la instancia tiene configuradas una IP pública y una IP privada, y quieres que el proxy de autenticación de Cloud SQL use la dirección IP privada, debes proporcionar la siguiente opción cuando inicies el proxy de autenticación de Cloud SQL:
    -ip_address_types=PRIVATE
  3. Si usas una cuenta de servicio para autenticar el proxy de autenticación de Cloud SQL, toma nota de la ubicación del archivo de claves privadas que se generó en la máquina cliente cuando creaste la cuenta de servicio.
  4. Inicia el proxy de Cloud SQL Auth.

    Estas son algunas strings posibles para invocar al proxy de autenticación de Cloud SQL:

    • Si usas la autenticación del SDK de Cloud:
      ./cloud_sql_proxy -instances=INSTANCE_CONNECTION_NAME=tcp:3306
      
      El puerto especificado no debe estar en uso, por ejemplo, por un servidor de base de datos local.
    • Si usas una cuenta de servicio y también incluyes de forma explícita el nombre de la conexión de la instancia (recomendado para entornos de producción):
      ./cloud_sql_proxy -instances=INSTANCE_CONNECTION_NAM=tcp:3306 \
                        -credential_file=PATH_TO_KEY_FILE &
      

    Si deseas obtener más información sobre las opciones del proxy de autenticación de Cloud SQL, consulta las opciones para autenticar el proxy de autenticación de Cloud SQL y las opciones para especificar instancias.

Sockets Unix

El proxy de autenticación de Cloud SQL puede escuchar en un socket de Unix, que es un mecanismo estándar de Posix para usar una carpeta y administrar la comunicación entre dos procesos que se ejecutan en el mismo host. Las ventajas de usar sockets Unix son seguridad mejorada y menor latencia; sin embargo, no puedes acceder a un socket Unix desde una máquina externa.

Para crear y usar un socket de Unix, el directorio de destino debe existir, y el proxy de Cloud SQL Auth y la aplicación deben tener acceso de lectura y escritura.

  1. Si usas una especificación de instancia explícita, copia tu INSTANCE_CONNECTION_NAME. Puedes encontrarlo en la página Descripción general de la instancia en Google Cloud Console o mediante la ejecución del siguiente comando:

    gcloud sql instances describe INSTANCE_NAME
    .

    Por ejemplo: myproject:myregion:myinstance.

  2. Crea el directorio en el que se alojarán los sockets del proxy de autenticación de Cloud SQL:
    sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
  3. Si usas una cuenta de servicio para autenticar el proxy de autenticación de Cloud SQL, toma nota de la ubicación del archivo de claves privadas que se generó en la máquina cliente cuando creaste la cuenta de servicio.
  4. Abre una ventana de terminal nueva y, luego, inicia el proxy de autenticación de Cloud SQL.

    Estas son algunas strings posibles para invocar al proxy de autenticación de Cloud SQL:

    • Si usas una cuenta de servicio y también incluyes de forma explícita el nombre de la conexión de la instancia (recomendado para entornos de producción):
      ./cloud_sql_proxy -dir=/cloudsql -instances=INSTANCE_CONNECTION_NAME
      -credential_file=PATH_TO_KEY_FILE &
    • Si usas la autenticación del SDK de Cloud y la detección automática de instancias:
      ./cloud_sql_proxy -dir=/cloudsql &

    Se recomienda iniciar el proxy de autenticación de Cloud SQL en su propia terminal para que puedas supervisar los resultados sin que se mezclen con los de otros programas.

    Si deseas obtener más información sobre las opciones del proxy de autenticación de Cloud SQL, consulta las opciones para autenticar el proxy de autenticación de Cloud SQL y las opciones para especificar instancias.

Imagen de Docker del proxy de Cloud SQL Auth

Para ejecutar el proxy de autenticación de Cloud SQL en un contenedor de Docker, usa la imagen de Docker del proxy de autenticación de Cloud SQL disponible en Google Container Registry.

Puedes iniciar el proxy de autenticación de Cloud SQL mediante sockets TCP o sockets Unix con los comandos que se muestran a continuación. Las opciones usan un INSTANCE_CONNECTION_NAME como la string de conexión para identificar una instancia de Cloud SQL. Puedes encontrar el INSTANCE_CONNECTION_NAME en la página Descripción general de tu instancia en Google Cloud Console o ejecutando el siguiente comando:

gcloud sql instances describe INSTANCE_NAME
.

Por ejemplo: myproject:myregion:myinstance.

Según tu lenguaje y entorno, puedes iniciar el proxy de autenticación de Cloud SQL con sockets TCP o Unix. Los sockets Unix no son compatibles con aplicaciones escritas en el lenguaje de programación Java o con el entorno de Windows.

Usa sockets TCP

docker run -d \\
  -v PATH_TO_KEY_FILE:/config \\
  -p 127.0.0.1:3306:3306 \\
  gcr.io/cloudsql-docker/gce-proxy:1.21.0 /cloud_sql_proxy \\
  -instances=INSTANCE_CONNECTION_NAME=tcp:0.0.0.0:3306 -credential_file=/config

Si usas las credenciales proporcionadas por tu instancia de Compute Engine, no incluyas el parámetro credential_file y la línea -v PATH_TO_KEY_FILE:/config.

Especifica siempre el prefijo 127.0.0.1 en -p para que el proxy de autenticación de Cloud SQL no se exponga fuera del host local. El “0.0.0.0” en el parámetro de las instancias es necesario para que se pueda acceder al puerto desde afuera del contenedor de Docker.

Usa sockets Unix

docker run -d -v /cloudsql:/cloudsql \\
  -v PATH_TO_KEY_FILE:/config \\
  gcr.io/cloudsql-docker/gce-proxy:1.21.0 /cloud_sql_proxy -dir=/cloudsql \\
  -instances=INSTANCE_CONNECTION_NAME -credential_file=/config

Si usas las credenciales proporcionadas por tu instancia de Compute Engine, no incluyas el parámetro credential_file y la línea -v PATH_TO_KEY_FILE:/config.

Si usas una imagen optimizada para contenedores, usa un directorio que admita operaciones de escritura en lugar de /cloudsql, por ejemplo:

-v /mnt/stateful_partition/cloudsql:/cloudsql

Puedes especificar más de una instancia, separadas por comas. También puedes usar los metadatos de Compute Engine a fin de determinar de forma dinámica las instancias que se conectarán. Obtén más información acerca del proxy de Cloud SQL Auth.

7. Inicia la sesión de MySQL.

La string de conexión que usas depende de si iniciaste el proxy de Cloud SQL Auth con un socket TCP o un socket UNIX o Docker.

Sockets TCP

  1. Inicia el cliente MySQL:
    mysql -u USERNAME -p --host 127.0.0.1
    

    Cuando te conectas con los sockets TCP, se accede al proxy de autenticación de Cloud SQL a través de 127.0.0.1.

  2. Si se te solicita, ingresa la contraseña.
  3. Aparecerá el cuadro de MySQL.

Usa sockets Unix

  1. Inicia el cliente MySQL:
    mysql -u USERNAME -p -S /cloudsql/INSTANCE_CONNECTION_NAME
    
  2. Ingresa la contraseña.
  3. Aparecerá el cuadro de MySQL.

¿Necesitas ayuda? Para solucionar problemas del proxy, consulta Soluciona problemas de conexión del proxy de autenticación de Cloud SQL. También puedes consultar nuestra página de asistencia de Cloud SQL.

¿Qué sigue?