Introducción
Por lo general, los problemas de conexión se clasifican en una de las tres áreas siguientes:
- Conexión: ¿puedes acceder a tu instancia a través de la red?
- Autorización: ¿tienes autorización para conectarte a la instancia?
- Autenticación: ¿la base de datos acepta tus credenciales de base de datos?
Cada una de ellas se puede desglosar en diferentes rutas de investigación. En la siguiente sección se incluyen ejemplos de preguntas que puedes hacerte para acotar el problema:
Lista de comprobación de problemas de conexión
- Conectando
- IP privada
- ¿Has habilitado
Service Networking API
en tu proyecto? - ¿Utilizas una VPC compartida?
- ¿Tu usuario o cuenta de servicio tiene los permisos de gestión de identidades y accesos necesarios para gestionar una conexión de acceso a servicios privados?
- ¿Está configurada la conexión de acceso a servicios privados en tu proyecto?
- ¿Has asignado un intervalo de direcciones IP a la conexión privada?
- ¿Los intervalos de direcciones IP asignados contenían al menos un espacio /24 para cada región en la que tenías previsto crear instancias de PostgreSQL?
- Si especificas un intervalo de direcciones IP asignadas para tus instancias de PostgreSQL, ¿contiene el intervalo al menos un espacio /24 por cada región en la que tienes previsto crear instancias de PostgreSQL en este intervalo?
- ¿Se ha creado la conexión privada?
- Si se ha cambiado la conexión privada, ¿se han actualizado los vpc-peerings?
- ¿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 figura como red autorizada?
- ¿Los certificados SSL/TLS son obligatorios?
- ¿Tu cuenta de usuario o de servicio tiene los permisos de gestión de identidades y accesos necesarios para conectarse a una instancia de Cloud SQL?
- Autorizando
- Proxy de autenticación de Cloud SQL
- ¿El proxy de autenticación de Cloud SQL está actualizado?
- ¿El proxy de autenticación de Cloud SQL está en ejecución?
- ¿El nombre de conexión de la instancia está formado correctamente en el comando de conexión del proxy de autenticación de Cloud SQL?
- ¿Has comprobado la salida del proxy de autenticación de Cloud SQL? Dirige la salida a un archivo o consulta la terminal de Cloud Shell en la que has iniciado el proxy de autenticación de Cloud SQL.
- ¿Tu cuenta de usuario o de servicio tiene los permisos de gestión de identidades y accesos necesarios para conectarse a una instancia de Cloud SQL?
- ¿Has habilitado
Cloud SQL Admin API
en tu proyecto? - Si tienes una política de cortafuegos de salida, asegúrate de que permita las conexiones al puerto 3307 de la instancia de Cloud SQL de destino.
- Si te conectas mediante sockets de dominio Unix, comprueba que se hayan creado los sockets. Para ello, lista el directorio especificado con -dir al iniciar el proxy de autenticación de Cloud SQL.
- Conectores de Cloud SQL y código específico de cada lenguaje
- ¿La cadena de conexión tiene el formato correcto?
- ¿Has comparado tu código con el código de muestra de tu lenguaje de programación?
- ¿Utilizas un tiempo de ejecución o un framework para el que no tenemos código de ejemplo?
- Si es así, ¿has buscado en la comunidad material de referencia relevante?
- Certificados SSL/TLS autogestionados
- ¿El certificado de cliente está instalado en el equipo de origen?
- ¿El certificado de cliente está escrito correctamente en los argumentos de conexión?
- ¿El certificado de cliente sigue siendo válido?
- ¿Se producen errores al conectarse mediante SSL?
- ¿El certificado del servidor sigue siendo válido?
- Redes autorizadas
- ¿Se incluye la dirección IP de origen?
- ¿Estás usando una dirección IP que no sea RFC 1918?
- ¿Estás usando una dirección IP no admitida?
- Errores de conexión
- ¿Tienes autorización para conectarte?
- ¿Aparecen errores de límite de conexión?
- ¿Tu aplicación cierra las conexiones correctamente?
- Autenticando
- Autenticación de base de datos nativa (nombre de usuario y contraseña)
- ¿Aparecen errores de
access denied
? - ¿El nombre de usuario y la contraseña son correctos?
- Autenticación de bases de datos de gestión de identidades y accesos
- ¿Has habilitado la marca
cloudsql.iam_authentication
en tu instancia? - ¿Ha añadido un enlace de política a la cuenta?
- ¿Utilizas el proxy de autenticación de Cloud SQL con
-enable_iam_login
o un token de OAuth 2.0 como contraseña de la base de datos? - Si usas una cuenta de servicio, ¿utilizas el nombre de correo abreviado?
- Consulta más información sobre la autenticación de bases de datos de gestión de identidades y accesos en PostgreSQL.
Mensajes de error
Para ver mensajes de error específicos de la API, consulta la página de referencia Mensajes de error.
Solución de problemas de conectividad adicionales
Si tienes otros problemas, consulta la sección Conectividad de la página de solución de problemas.
Problemas de conexión habituales
Verifica que tu aplicación cierra las conexiones correctamente
Si ves errores que contienen "Aborted connection nnnn to db:
", suele indicar que tu aplicación no está deteniendo las conexiones correctamente. Los problemas de red también pueden provocar este error. Este error no significa que haya problemas con tu instancia de Cloud SQL. También te recomendamos que ejecutes tcpdump
para inspeccionar los paquetes y localizar el origen del problema.
Para ver ejemplos de prácticas recomendadas para la gestión de conexiones, consulta Gestionar conexiones de bases de datos.
Comprueba que los certificados no hayan expirado
Si tu instancia está configurada para usar SSL, ve a la página Instancias de Cloud SQL de la consola de Google Cloud y abre la instancia. Abre la página Conexiones, selecciona la pestaña Seguridad y comprueba que el certificado de tu servidor sea válido. Si ha caducado, debes añadir un nuevo certificado y cambiar a él.
Comprueba que tienes autorización para conectarte
Si las conexiones están fallando, comprueba que tienes autorización para conectarte:
- Si tienes problemas para conectarte mediante una dirección IP, por ejemplo, conéctate desde el entorno local con el cliente psql y, a continuación, asegúrate de que la dirección IP desde la que te conectas tiene autorización para conectarse a la instancia de Cloud SQL.
Las conexiones a una instancia de Cloud SQL mediante una dirección IP privada se autorizan automáticamente para los intervalos de direcciones RFC 1918. De esta forma, todos los clientes privados pueden acceder a la base de datos sin pasar por el proxy de autenticación de Cloud SQL. Los intervalos de direcciones que no sean RFC 1918 deben configurarse como redes autorizadas.
De forma predeterminada, Cloud SQL no aprende rutas de subredes que no sean RFC 1918 de tu VPC. Debes actualizar el peering de red a Cloud SQL para exportar cualquier ruta que no sea RFC 1918. Por ejemplo:
gcloud compute networks peerings update cloudsql-postgres-googleapis-com \ --network=NETWORK \ --export-subnet-routes-with-public-ip \ --project=PROJECT_ID
Aquí encontrarás la dirección IP actual.
- Prueba el comando
gcloud sql connect
para conectarte a tu instancia. Este comando autoriza tu dirección IP durante un breve periodo. Puedes ejecutar este comando en un entorno en el que estén instalados la CLI de gcloud y el cliente psql. También puedes ejecutar este comando en Cloud Shell, que está disponible en laGoogle Cloud consola y tiene preinstalados la CLI de gcloud y el cliente psql. Cloud Shell proporciona una instancia de Compute Engine que puedes usar para conectarte a Cloud SQL. - Permite temporalmente que todas las direcciones IP se conecten a una instancia autorizando
0.0.0.0/0
.
Verificar cómo te conectas
Si aparece un mensaje de error como este:FATAL: database `user` does not exist.
El comando gcloud sql connect --user
solo funciona con el usuario predeterminado (postgres
). La solución alternativa es conectarse con el usuario predeterminado y, a continuación, usar el comando "\c"
psql para volver a conectarse con otro usuario.
Determinar 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:
SELECT * from pg_stat_activity ;
Las conexiones que muestran una dirección IP, como 1.2.3.4
, se conectan mediante IP.
Las conexiones con cloudsqlproxy~1.2.3.4
usan el proxy de autenticación de Cloud SQL o proceden de App Engine. Algunos procesos internos de Cloud SQL pueden usar las conexiones de localhost
.
Límites de conexiones
No hay límites de consultas por segundo para las instancias de Cloud SQL. Sin embargo, existen límites específicos de conexión, tamaño y App Engine. Consulta Cuotas y límites.
Las conexiones de bases de datos consumen recursos en el servidor y en la aplicación que se conecta. Aplica siempre buenas prácticas de gestión de conexiones para minimizar la huella de tu aplicación y reducir la probabilidad de superar los límites de conexión de Cloud SQL. Para obtener más información, consulta Gestionar conexiones de bases de datos.
Mostrar conexiones y subprocesos
Para ver los procesos que se están ejecutando en tu base de datos, usa la tabla pg_stat_activity:
select * from pg_stat_activity;
Tiempo de espera de las conexiones (desde Compute Engine)
Las conexiones con una instancia de Compute Engine se agotan tras 10 minutos de inactividad, lo que puede afectar a las conexiones sin usar de larga duración entre tu instancia de Compute Engine y tu instancia de Cloud SQL. Para obtener más información, consulta la sección Redes y firewalls de la documentación de Compute Engine.
Si quieres que las conexiones no utilizadas de larga duración no caduquen, puedes configurar el valor TCP keepalive. Los siguientes comandos configuran el valor TCP keepalive en un minuto y mantienen los parámetros de forma permanente al reiniciar la instancia.
Muestra el valor actual de tcp_keepalive_time.
cat /proc/sys/net/ipv4/tcp_keepalive_time
Define tcp_keepalive_time en 60 segundos y haz que sea permanente en 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 de tcp_keepalive_time para verificar que se ha aplicado el cambio.
cat /proc/sys/net/ipv4/tcp_keepalive_time
Herramientas para depurar la conectividad
tcpdump
La tcpdump
es una herramienta para capturar paquetes. Te recomendamos que ejecutes tcpdump
para capturar e inspeccionar los paquetes entre tu host y las instancias de Cloud SQL cuando depures los problemas de conectividad.
Localizar tu dirección IP local
Si no sabes la dirección local de tu host, ejecuta el comando ip -br address show
. En Linux, se 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
.
También puedes ejecutar ipconfig
o ifconfig
para ver el estado de tus interfaces de red.
Hacer pruebas con Connectivity Test
Prueba de conectividad es una herramienta de diagnóstico que te permite comprobar la conectividad entre los endpoints de tu red. Analiza tu configuración y, en algunos casos, realiza una verificación en tiempo de ejecución. Ahora es compatible con Cloud SQL. Sigue estas instrucciones para ejecutar pruebas con tus instancias de Cloud SQL.
Probar la conexión
Puedes usar el cliente psql para comprobar si puedes conectarte desde tu entorno local. Para obtener más información, consulta Conectar el cliente psql mediante direcciones IP y Conectar el cliente psql mediante el proxy de autenticación de Cloud SQL.
Determinar la dirección IP de tu aplicación
Para determinar la dirección IP de un ordenador que ejecuta tu aplicación y poder autorizar el acceso a tu instancia de Cloud SQL desde esa dirección, usa una de las siguientes opciones:
- Si el ordenador no está detrás de un proxy o un cortafuegos, inicia sesión en el ordenador y usa la opción ¿Cuál es mi IP? para determinar su dirección IP.
- Si el ordenador está detrás de un proxy o un cortafuegos, inicia sesión en el ordenador y usa una herramienta o un servicio como whatismyipaddress.com para determinar su dirección IP real.
Abrir puertos locales
Para verificar que tu host está escuchando en los puertos que crees que son, ejecuta el comando ss -tunlp4
. De esta forma, sabrás qué puertos están abiertos y
en escucha.
Por ejemplo, si tienes una base de datos de PostgreSQL en ejecución, el puerto 5432 debería estar activo y en escucha. En el caso de SSH, debería ver el puerto 22.
Toda la actividad de los puertos locales
Usa el comando netstat
para ver toda la actividad del puerto local. Por ejemplo, netstat -lt
muestra todos los puertos activos.
Conectarse a una instancia de Cloud SQL mediante telnet
Para verificar que puedes conectarte a tu instancia de Cloud SQL mediante TCP
, ejecuta el comando telnet
. Telnet intenta conectarse a la dirección IP y al puerto que le indiques.
telnet 35.193.198.159 5432
.
Si la operación se realiza correctamente, verás lo siguiente:
Trying 35.193.198.159...
Connected to 35.193.198.159.
.
Si falla, verás que telnet
se queda colgado hasta que cierres el intento:
Trying 35.193.198.159...
^C.
.
Autenticación del cliente
La autenticación de clientes se controla mediante un archivo de configuración llamado 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
de la base de datos de origen se haya actualizado para aceptar conexiones del intervalo de direcciones IP de la VPC de Cloud SQL.
Cloud Logging
Cloud SQL y Cloud SQL usan Cloud Logging. Consulta la documentación de Cloud Logging para obtener información completa y revisa las consultas de ejemplo de Cloud SQL.
Ver registros
Puedes ver los registros de las instancias de Cloud SQL y de otros proyectos, como las instancias de Cloud VPN o Compute Engine. Google CloudPara ver los registros de tu instancia de Cloud SQL, sigue estos pasos:
Consola
-
En la Google Cloud consola, ve a la página Cloud Logging.
- En la parte superior de la página, selecciona un proyecto de Cloud SQL.
- En el creador de consultas, añade lo siguiente:
- Recurso: selecciona Base de datos de Cloud SQL. En el cuadro de diálogo, selecciona una instancia de Cloud SQL.
- Nombres de registro: desplázate hasta la sección Cloud SQL y selecciona los archivos de registro adecuados para tu instancia. Por ejemplo:
- cloudsql.googleapis.com/postgres.log
- Gravedad: selecciona un nivel de registro.
- Intervalo de tiempo: seleccione un intervalo predefinido o cree uno personalizado.
gcloud
Usa el comando gcloud logging
para ver las entradas de registro. En el ejemplo de abajo, sustituye PROJECT_ID
.
La marca limit
es un parámetro opcional que indica el número máximo de entradas que se van a
devolver.
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 automáticamente para los intervalos de direcciones RFC 1918. Los intervalos de direcciones que no sean RFC 1918 deben configurarse en Cloud SQL como redes autorizadas. También debes actualizar el peering de red a Cloud SQL para exportar las rutas que no sean RFC 1918. Por ejemplo:
gcloud compute networks peerings update cloudsql-postgres-googleapis-com
--network=NETWORK
--export-subnet-routes-with-public-ip
--project=PROJECT_ID
Solución de problemas de VPN
Consulta la página Solución de problemas de Cloud VPN.