Introducción
Por lo general, los problemas de conexión se clasifican en una de las siguientes tres áreas:
- Conexión: ¿Puedes alcanzar tu instancia a través de la red?
- Autorización: ¿Estás autorizado para conectarte a la instancia?
- Autenticación: ¿La base de datos acepta las credenciales de tu base de datos?
Además, cada una de ellas puede desglosarse en diferentes rutas de investigación. En la siguiente sección, se incluyen ejemplos de preguntas que puedes formularte para ayudarnos a reducir el problema:
Lista de tareas para los problemas de conexión
- Conectando
- IP privada
- ¿Habilitaste
Service Networking API
para tu proyecto? - ¿Usas una VPC compartida?
- ¿Tu cuenta de usuario o de servicio tiene los permisos de IAM necesarios para administrar una conexión de acceso a servicios privados?
- ¿La conexión de acceso a servicios privados está configurada para tu proyecto?
- ¿Asignaste un rango de direcciones IP para la conexión privada?
- ¿Tus rangos de direcciones IP asignados contenían al menos un espacio de /24 para cada región en la que planeas crear instancias de MySQL?
- Si especificas un rango de direcciones IP asignado para tus instancias de MySQL, ¿el rango contiene al menos un espacio de /24 para cada región en la que planea crear instancias de MySQL en este rango?
- ¿Se creó la conexión privada?
- Si se cambió la conexión privada, ¿se actualizaron los intercambios de tráfico de VPC?
- ¿Los registros de VPC indican algún error?
- ¿La IP de tu máquina de origen es una dirección que no es RFC 1918?
- IP pública
- ¿Tu IP de origen aparece como una red autorizada?
- ¿Se requieren los certificados SSL/TLS?
- ¿Tu cuenta de usuario o de servicio tiene los permisos de IAM necesarios para conectarse a una instancia de Cloud SQL?
- Autorizar
- Proxy de Cloud SQL Auth
- ¿El proxy de Cloud SQL Auth está actualizado?
- ¿El proxy de Cloud SQL Auth está en ejecución?
- ¿El nombre de conexión de la instancia se formó correctamente en el comando de conexión del proxy de Cloud SQL Auth?
- ¿Revisaste el resultado del proxy de Cloud SQL Auth? Canaliza el resultado a un archivo o mira la terminal de Cloud Shell desde la que iniciaste el proxy de Cloud SQL Auth.
- ¿Tu cuenta de usuario o de servicio tiene los permisos de IAM necesarios para conectarse a una instancia de Cloud SQL?
- ¿Habilitaste
Cloud SQL Admin API
para tu proyecto? - Si tienes una política de firewall saliente, asegúrate de que permita conexiones al puerto 3307 en la instancia de Cloud SQL de destino.
- Si te conectas con sockets de dominio UNIX, confirma que los sockets se hayan creado mediante la lista del directorio especificado con el -dir cuando iniciaste el proxy de Cloud SQL Auth.
- Conectores de Cloud SQL y código específico de lenguaje
- ¿La string de conexión se formó correctamente?
- ¿Comparaste tu código con el código de muestra para tu lenguaje de programación?
- ¿Estás usando un entorno de ejecución o framework para el que no tenemos un código de muestra?
- Si es así, ¿te dirigiste a la comunidad para obtener el material de referencia relevante?
- Certificados SSL/TLS autoadministrados
- ¿El certificado de cliente está instalado en la máquina de origen?
- ¿El certificado de cliente está escrito correctamente en los argumentos de conexión?
- ¿El certificado de cliente sigue siendo válido?
- ¿Recibes errores cuando te conectas con SSL?
- ¿El certificado del servidor sigue siendo válido?
- Redes autorizadas
- ¿La dirección IP de origen está incluida?
- ¿Usas una dirección IP que no es RFC 1918?
- ¿Estás usando una dirección IP no compatible?
- Fallas de conexión
- ¿Estás autorizado para conectarte?
- ¿Ves errores de límite de conexión?
- ¿Tu aplicación cierra las conexiones correctamente?
- Autenticando
- Autenticación de la base de datos nativa (nombre de usuario/contraseña)
- ¿Ves errores de
access denied
? - ¿El nombre de usuario y la contraseña son correctos?
- Autenticación de la base de datos de IAM
- ¿Habilitaste la marca
cloudsql.iam_authentication
en tu instancia? - ¿Agregaste una vinculación de política a la cuenta?
- ¿Estás usando el proxy de Cloud SQL Auth con el
-enable_iam_login
o un token de OAuth 2.0 como la contraseña de la base de datos? - Si usas una cuenta de servicio, ¿usas el nombre de correo electrónico abreviado?
- Obtén más información sobre la autenticación de bases de datos de IAM en PostgreSQL.
Mensajes de error
Para ver mensajes de error de API específicos, consulta la página de referencia Mensajes de error.
Solución de problemas de conectividad adicionales
Para otros problemas, consulta la sección Conectividad de la página de solución de problemas.
Problemas comunes de conexión
Verifica que tu aplicación cierre las conexiones de forma adecuada
Si ves errores que contienen “Aborted connection nnnn to db:
”, por lo general, eso indica que la aplicación no detiene las conexiones de forma adecuada. Los problemas de red también pueden causar este error. El error no significa que haya problemas con tu instancia de Cloud SQL. También se recomienda que ejecutes tcpdump
para inspeccionar los paquetes a fin de encontrar el origen del problema.
Para obtener ejemplos sobre las prácticas recomendadas de administración de conexiones, consulta Cómo administrar conexiones.
Verifica que tus certificados no hayan vencido
Si tu instancia está configurada para usar SSL, ve a la página Instancias de Cloud SQL en la consola de Google Cloud y abre la instancia. Abre la página Conexiones, selecciona la pestaña Seguridad y asegúrate de que tu certificado de servidor sea válido. Si caducó, debes agregar uno nuevo y rotarlo.
Verifica que estés autorizado para conectarte
Si se generan fallas en tus conexiones, verifica que estés autorizado para conectarte:
- Si tienes problemas para conectarte mediante una dirección IP, por ejemplo, si te conectas desde tu entorno local con el cliente MySQL, asegúrate de que la dirección IP desde la que deseas conectarte esté autorizada para conectarse a la instancia de Cloud SQL.
Las conexiones a una instancia de Cloud SQL mediante una dirección IP privada se autorizan de forma automática para los rangos de direcciones RFC 1918. De esta manera, todos los clientes privados pueden acceder a la base de datos sin pasar por el proxy de Cloud SQL Auth. Los rangos de direcciones que no son RFC 1918 deben configurarse como redes autorizadas.
De forma predeterminada, Cloud SQL no procesa rutas de subred de tu VPC que no son RFC 1918. Debes actualizar el intercambio de tráfico entre redes a Cloud SQL para exportar cualquier ruta que no sea RFC 1918. Por ejemplo:
gcloud compute networks peerings update cloudsql-mysql-googleapis-com \ --network=NETWORK \ --export-subnet-routes-with-public-ip \ --project=PROJECT_ID
Aquí encontrarás tu dirección IP actual.
- Prueba el comando
gcloud sql connect
para conectarte a la instancia. Este comando autoriza tu dirección IP por un período breve. Puedes ejecutar este comando en un entorno que tenga la CLI de gcloud y el cliente MySQL instalados. También puedes ejecutar este comando en Cloud Shell, que está disponible en la consola de Google Cloud y tiene la CLI de gcloud y el cliente MySQL preinstalados. Cloud Shell proporciona una instancia de Compute Engine que puedes usar para conectarte a Cloud SQL. - Permite que todas las direcciones IP se conecten de manera transitoria a una instancia. Para IPv4, autoriza
0.0.0.0/0
(para IPv6, autoriza::/0
).
Verifica cómo te conectas
Si ves un mensaje de error como el siguiente:ERROR 1045 (28000): Access denied for user 'root'@'1.2.3.4' (using password: NO)
cuando te conectas, verifica que proporcionas una contraseña.
Si ves un mensaje de error como el siguiente:
ERROR 1045 (28000): Access denied for user 'root'@'1.2.3.4' (using password: YES)
cuando te conectas, verifica que usas la contraseña correcta y que te conectas a través de SSL si la instancia lo requiere.
Determina cómo se inician las conexiones
Para ver información sobre tus conexiones actuales, conéctate a tu base de datos y ejecuta el siguiente comando:
SHOW PROCESSLIST;
Las conexiones en las que se muestra una dirección IP, como 1.2.3.4
, se conectan mediante una IP.
Las conexiones con cloudsqlproxy~1.2.3.4
usan el proxy de Cloud SQL Auth, o se originaron en App Engine. Algunos procesos internos de Cloud SQL pueden usar conexiones de localhost
.
Límites de conexión
No hay límites de QPS para las instancias de Cloud SQL. Sin embargo, en su lugar, existen conexiones, tamaños y límites específicos de App Engine. Consulta Cuotas y límites.
Las conexiones de bases de datos consumen recursos en el servidor y en la aplicación de conexión. Usa siempre prácticas adecuadas de administración de conexión para minimizar el espacio de tu aplicación y reducir la posibilidad de superar los límites de conexión de Cloud SQL. Para obtener más información, consulta la página sobre cómo administrar conexiones de bases de datos.
Muestra subprocesos y conexiones
Si recibes el mensaje de error “Demasiadas conexiones” o quieres saber qué sucede en una instancia, puedes mostrar la cantidad de conexiones y subprocesos con SHOW PROCESSLIST
.
Desde un cliente MySQL, ejecuta lo siguiente:
mysql> SHOW PROCESSLIST;
Obtendrás un resultado similar al que se muestra a continuación:
+----+-----------+--------------+-----------+---------+------+-------+----------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-----------+--------------+-----------+---------+------+-------+----------------------+ | 3 | user-name | client-IP | NULL | Query | 0 | NULL | SHOW processlist | | 5 | user-name | client-IP | guestbook | Sleep | 1 | | SELECT * from titles | | 17 | user-name | client-IP | employees | Query | 0 | NULL | SHOW processlist | +----+-----------+--------------+-----------+---------+------+-------+----------------------+ 3 rows in set (0.09 sec)
Para obtener más información sobre cómo interpretar las columnas que muestra PROCESSLIST
, consulta la referencia de MySQL.
Para obtener un recuento de subprocesos, puedes usar lo siguiente:
mysql> SHOW STATUS WHERE Variable_name = 'Threads_connected';
Obtendrás un resultado similar al que se muestra a continuación:
+-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_connected | 7 | +-------------------+-------+ 1 row in set (0.08 sec)
Tiempo de espera de las conexiones (desde Compute Engine)
Las conexiones con una instancia de Compute Engine agotan el tiempo de espera después de 10 minutos de inactividad, lo que puede afectar las conexiones de larga duración sin usar entre la instancia de Compute Engine y la instancia de Cloud SQL. Para obtener más información, consulta Herramientas de redes y firewalls en la documentación de Compute Engine.
Para mantener las conexiones sin usar de larga duración en funcionamiento, puedes establecer TCP keepalive. Los siguientes comandos establecen el valor de TCP keepalive en un minuto y hacen que la configuración sea permanente en los reinicios de las instancias.
Muestra el valor tcp_keepalive_time actual.
cat /proc/sys/net/ipv4/tcp_keepalive_time
Establece tcp_keepalive_time en 60 segundos y haz que sea permanente en todos los reinicios.
echo 'net.ipv4.tcp_keepalive_time = 60' | sudo tee -a /etc/sysctl.conf
Aplica el cambio.
sudo /sbin/sysctl --load=/etc/sysctl.conf
Muestra el valor tcp_keepalive_time para verificar que se aplicó el cambio.
cat /proc/sys/net/ipv4/tcp_keepalive_time
Conéctate con IPv6
Si ves alguno de los siguientes mensajes de error
Can't connect to MySQL server on '2001:1234::4321' (10051) Can't connect to MySQL server on '2001:1234::4321' (101)
cuando te conectas, es probable que estés intentando conectarte a la dirección IPv6 de tu instancia, pero no tengas IPv6 disponible en tu estación de trabajo. Puedes verificar si IPv6 funciona en tu estación de trabajo en ipv6.google.com. Si no carga, IPv6 no está disponible. Conéctate a la dirección IPv4 o a tu instancia de Cloud SQL. Es posible que primero debas agregar una dirección IPv4 a tu instancia.
Herramientas para depurar la conectividad
tcpdump
tcpdump
es una herramienta que se usa para capturar paquetes. Se recomienda ejecutar tcpdump
para capturar e inspeccionar los paquetes entre el host y las instancias de Cloud SQL cuando depures los problemas de conectividad.
Ubica tu dirección IP local
Si no conoces la dirección local del host, ejecuta el comando ip -br address show
. En Linux, este muestra la interfaz de red, el estado de la interfaz, la IP local y las direcciones MAC. Por ejemplo: eth0 UP 10.128.0.7/32 fe80::4001:aff:fe80:7/64
Como alternativa, puedes ejecutar ipconfig
o ifconfig
para ver el estado de tus interfaces de red.
Realiza pruebas de conectividad
Las pruebas de conectividad son una herramienta de diagnóstico que te permite verificar la conectividad entre extremos de tu red. Analiza la configuración y, en algunos casos, la verificación del entorno de ejecución. Actualmente, es compatible con Cloud SQL. Sigue estas instrucciones para ejecutar pruebas con las instancias de Cloud SQL.
Probar la conexión
Puedes usar el cliente MySQL a fin de probar tu capacidad de conexión desde tu entorno local. Si quieres obtener más información, consulta Conecta un cliente MySQL mediante una dirección IP y la página para conectar el cliente MySQL con el proxy de Cloud SQL Auth.
Define la dirección IP de la aplicación
Para definir la dirección IP de una computadora que ejecuta tu aplicación a fin de que puedas autorizar el acceso a la instancia de Cloud SQL desde esa dirección, debes usar una de las siguientes opciones:
- Si la computadora no se encuentra detrás de un proxy o firewall, accede a esta y usa el sitio What is my IP? para determinar su dirección IP.
- Si la computadora se encuentra detrás de un proxy o firewall, accede a esta y usa una herramienta o servicio como whatismyipaddress.com para definir su dirección IP verdadera.
Abre puertos locales
Para verificar que tu host esté escuchando en los puertos que crees que está, ejecuta el comando ss -tunlp4
. Este te indica qué puertos están abiertos y escuchando.
Por ejemplo, si tienes una base de datos MySQL activa, el puerto 3306 debe estar activo y escuchando. Para SSH, deberías ver el puerto 22.
Por ejemplo, si tienes una base de datos PostgreSQL en ejecución, el puerto 5432 debe estar activo y escuchando. Para SSH, deberías ver el puerto 22.
Toda la actividad del puerto local
Usa el comando netstat
para ver toda la actividad del puerto local. Por ejemplo, netstat -lt
muestra todos los puertos activos en el momento.
Conéctate a tu instancia de Cloud SQL con telnet
Para verificar que puedes conectarte a tu instancia de Cloud SQL con TCP
, ejecuta el comando telnet
. Telnet intenta conectarse a la dirección IP y al puerto que le proporcionas.
telnet 35.193.198.159 3306
.
Por ejemplo, si tu instancia de Cloud SQL ejecuta una base de datos PostgreSQL, deberías poder ejecutar telnet en ella en el puerto 5432: telnet 35.193.198.159 5432
.
Si el proceso se completa correctamente, verás lo siguiente:
Trying 35.193.198.159...
Connected to 35.193.198.159.
.
Si se produce un error, verás interrupciones de telnet
hasta que fuerces el cierre del intento:
Trying 35.193.198.159...
^C.
.
Autenticación de clientes
La autenticación del cliente se controla mediante un archivo de configuración, que se denomina pg_hba.conf
(HBA significa autenticación basada en host).
Asegúrate de que la sección de conexiones de replicación del archivo pg_hba.conf
en la base de datos de origen se actualice para aceptar conexiones del rango de direcciones IP de la VPC de Cloud SQL.
Cloud Logging
Cloud SQL usa Cloud Logging. Consulta la documentación de Cloud Logging para obtener información completa y revisa las consultas de muestra de Cloud SQL.
Ver registros
Puedes ver los registros de las instancias de Cloud SQL y otros proyectos de Google Cloud, como instancias de Cloud VPN o de Compute Engine. Sigue estos pasos para ver los registros de las entradas de registro de una instancia de Cloud SQL:
Console
-
En la consola de Google Cloud, ve a la página de Cloud Logging.
- Selecciona un proyecto existente de Cloud SQL en la parte superior de la página.
- En el compilador de consultas, agrega lo siguiente:
- Recurso: Selecciona Base de datos de Cloud SQL. En el cuadro de diálogo, selecciona una instancia de Cloud SQL.
- Nombres de registros: Desplázate a la sección de Cloud SQL y selecciona los archivos de registro apropiados para la instancia. Ejemplos:
- cloudsql.googlapis.com/mysql-general.log
- cloudsql.googleapis.com/mysql.err
- cloudsql.googleapis.com/postgres.log
- Gravedad: Selecciona un nivel de registro.
- Intervalo de tiempo: Selecciona un ajuste predeterminado o crea un intervalo personalizado.
gcloud
Usa el comando gcloud logging
para ver las entradas del registro. En el siguiente ejemplo, reemplaza PROJECT_ID
.
La marca limit
es un parámetro opcional que indica la cantidad máxima de entradas que se mostrarán.
gcloud logging read "projects/PROJECT_ID/logs/cloudsql.googleapis.com/mysql-general.log" \ --limit=10
gcloud logging read "projects/PROJECT_ID/logs/cloudsql.googleapis.com/postgres.log" \ --limit=10
Direcciones IP privadas
Las conexiones a una instancia de Cloud SQL mediante una dirección IP privada se autorizan de forma automática para los rangos de direcciones RFC 1918. Los rangos de direcciones que no son RFC 1918 se deben configurar en Cloud SQL como redes autorizadas. También debes actualizar el intercambio de tráfico entre redes a Cloud SQL para exportar cualquier ruta que no sea RFC 1918. Por ejemplo:
gcloud compute networks peerings update cloudsql-mysql-googleapis-com
--network=NETWORK
--export-subnet-routes-with-public-ip
--project=PROJECT_ID
Solución de problemas de VPN
Consulta la página de solución de problemas de Cloud VPN.