Introducción
Generalmente, los problemas de conexión se clasifican en una de las siguientes tres áreas:
- Conectando: ¿puede acceder a su instancia a través de la red?
- Autorización: ¿está autorizado para conectarse a la instancia?
- Autenticación: ¿La base de datos acepta sus credenciales de base de datos?
Cada uno de ellos puede desglosarse en diferentes vías de investigación. La siguiente sección incluye ejemplos de preguntas que puede plantearse para acotar aún más el problema:
Lista de verificación de problemas de conexión
- Conectando
- IP privada
- ¿Ha habilitado la
Service Networking API
para su proyecto? - ¿Estás utilizando una VPC compartida ?
- ¿Su cuenta de usuario o servicio tiene los permisos de IAM necesarios para administrar una conexión de acceso a servicios privados?
- ¿Está configurada la conexión de acceso a servicios privados para su proyecto?
- ¿ Asignaste un rango de direcciones IP para la conexión privada?
- ¿Sus rangos de direcciones IP asignados contienen al menos un espacio /24 para cada región donde planea crear instancias de SQL Server?
- Si está especificando un rango de direcciones IP asignadas para sus instancias de SQL Server, ¿el rango contiene al menos un espacio /24 para cada región donde planea crear instancias de SQL Server en este rango?
- ¿Se crea la conexión privada ?
- Si se modificó la conexión privada, ¿se actualizaron los emparejamientos de VPC ?
- ¿Los registros de VPC indican algún error?
- ¿La dirección IP de su máquina de origen es una dirección que no es RFC 1918 ?
- IP pública
- ¿Su IP de origen aparece como una red autorizada ?
- ¿Son necesarios los certificados SSL/TLS?
- ¿Su cuenta de usuario o servicio tiene los permisos de IAM necesarios para conectarse a una instancia de Cloud SQL?
- Autorización
- Proxy de autenticación de Cloud SQL
- ¿Está actualizado el proxy de autenticación de Cloud SQL?
- ¿Se está ejecutando el proxy de autenticación de Cloud SQL?
- ¿El nombre de conexión de la instancia se forma correctamente en el comando de conexión de Cloud SQL Auth Proxy ?
- ¿Has revisado la salida del proxy de autenticación de Cloud SQL? Transfiere la salida a un archivo o observa la terminal de Cloud Shell donde iniciaste el proxy de autenticación de Cloud SQL.
- ¿Su cuenta de usuario o servicio tiene los permisos de IAM necesarios para conectarse a una instancia de Cloud SQL?
- ¿Ha habilitado la
Cloud SQL Admin API
para su proyecto? - Si tiene una política de firewall de salida, asegúrese de que permita conexiones al puerto 3307 en la instancia de Cloud SQL de destino.
- Si se conecta mediante sockets de dominio UNIX, confirme que los sockets se crearon enumerando el directorio especificado con -dir cuando inició el proxy de autenticación de Cloud SQL.
- Conectores de Cloud SQL y código específico del lenguaje
- ¿Está formada correctamente la cadena de conexión ?
- ¿Has comparado tu código con el código de muestra de tu lenguaje de programación?
- ¿Estás utilizando un entorno de ejecución o un marco para el que no tenemos código de muestra ?
- Si es así, ¿ha buscado en la comunidad material de referencia relevante?
- Certificados SSL/TLS autogestionados
- ¿El certificado del servidor sigue siendo válido ?
- Redes autorizadas
- ¿Está incluida la dirección IP de origen ?
- ¿Estás utilizando una dirección IP que no sea RFC 1918 ?
- ¿Estás utilizando una dirección IP no compatible ?
- Fallos de conexión
- ¿Estas autorizado para conectarte ?
- ¿Estás viendo errores de límite de conexión ?
- ¿Su aplicación está cerrando las conexiones correctamente?
- Autenticación
- Autenticación de base de datos nativa (nombre de usuario/contraseña)
- ¿Estás viendo errores
access denied
? - ¿Son correctos el nombre de usuario y la contraseña ?
Mensajes de error
Para conocer mensajes de error de API específicos, consulte la página de referencia de mensajes de error .
Solución de problemas de conectividad adicionales
Para otros problemas, consulte la sección Conectividad en la página de solución de problemas.
Problemas de conexión comunes
Verifique que su aplicación esté cerrando las conexiones correctamente
Si ve errores que contienen " Aborted connection nnnn to db:
", generalmente indica que su aplicación no está deteniendo las conexiones correctamente. Los problemas de red también pueden causar este error. El error no significa que haya problemas con su instancia de Cloud SQL. También le recomendamos ejecutar tcpdump
para inspeccionar los paquetes y localizar el origen del problema.
Para obtener ejemplos de prácticas recomendadas para la administración de conexiones, consulte Administrar conexiones de base de datos .
Verifique que sus certificados no hayan expirado
Si su instancia está configurada para usar SSL, vaya a la página Instancias de Cloud SQL en el Google Cloud Abra la consola y la instancia. Abra la página Conexiones , seleccione la pestaña Seguridad y asegúrese de que el certificado de su servidor sea válido. Si ha caducado, debe agregar un nuevo certificado y rotarlo.
Verifique que esté autorizado para conectarse
Si sus conexiones fallan, verifique que esté autorizado para conectarse:
- Si tiene problemas para conectarse usando una dirección IP, por ejemplo, si se conecta desde su entorno local con el cliente sqlcmd, asegúrese de que la dirección IP desde la que se conecta 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 automáticamente para los rangos 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 rangos de direcciones que no cumplen con el RFC 1918 deben configurarse como redes autorizadas .
De forma predeterminada, Cloud SQL no aprende rutas de subred no RFC 1918 de su VPC. Debe actualizar el emparejamiento de red con Cloud SQL para exportar cualquier ruta no 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í está tu dirección IP actual .
Determinar cómo se inician las conexiones
Puede ver información sobre sus conexiones actuales conectándose a su base de datos y ejecutando el siguiente comando:
sp_who go
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
utilizan el proxy de autenticación de Cloud SQL o se originaron en App Engine. Algunos procesos internos de Cloud SQL pueden usar conexiones desde localhost
.
Límites de conexión
No hay límites de QPS 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 a bases de datos consumen recursos del servidor y de la aplicación que se conecta. Utilice siempre buenas prácticas de gestión de conexiones para minimizar el impacto de su aplicación y reducir la probabilidad de superar los límites de conexión de Cloud SQL. Para obtener más información, consulte Administrar conexiones a bases de datos .
Mostrar conexiones e hilos
Para ver los procesos que se están ejecutando en su base de datos, conéctese a su base de datos y ejecute el siguiente comando:sp_who go
Para obtener información sobre cómo interpretar las columnas devueltas por sp_who
, consulte la referencia de SQL Server .
Tiempo de espera de las conexiones (de Compute Engine)
Las conexiones con una instancia de Compute Engine agotan el tiempo de espera tras 10 minutos de inactividad, lo que puede afectar a las conexiones de larga duración sin usar entre la instancia de Compute Engine y la de Cloud SQL. Para obtener más información, consulte "Redes y firewalls" en la documentación de Compute Engine.
Para mantener activas las conexiones no utilizadas de larga duración, puede configurar el valor de keepalive de TCP . Los siguientes comandos establecen el valor de keepalive de TCP en un minuto y hacen que la configuración sea permanente tras los reinicios de la instancia.
Muestra el valor actual de tcp_keepalive_time.
cat /proc/sys/net/ipv4/tcp_keepalive_time
Establezca tcp_keepalive_time en 60 segundos y hágalo permanente en todos los reinicios.
echo 'net.ipv4.tcp_keepalive_time = 60' | sudo tee -a /etc/sysctl.conf
Aplicar 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
Herramientas para depurar la conectividad
volcado de tcp
tcpdump
es una herramienta para capturar paquetes. Se recomienda encarecidamente ejecutar tcpdump
para capturar e inspeccionar los paquetes entre el host y las instancias de Cloud SQL al depurar problemas de conectividad.
Localice su dirección IP local
Si desconoce la dirección local de su host, ejecute el comando ip -br address show
. En Linux, este comando muestra la interfaz de red, su estado, la IP local y las direcciones MAC. Por ejemplo: eth0 UP 10.128.0.7/32 fe80::4001:aff:fe80:7/64
.
Alternativamente, puede ejecutar ipconfig
o ifconfig
para ver el estado de sus interfaces de red.
Prueba con prueba de conectividad
La Prueba de Conectividad es una herramienta de diagnóstico que permite comprobar la conectividad entre los puntos finales de la red. Analiza la configuración y, en algunos casos, realiza una verificación en tiempo de ejecución. Ahora es compatible con Cloud SQL . Siga estas instrucciones para ejecutar pruebas con sus instancias de Cloud SQL.
Pruebe su conexión
Puede usar el cliente sqlcmd para probar su conexión desde su entorno local. Para obtener más información, consulte Conectar el cliente sqlcmd mediante direcciones IP y Conectar el cliente sqlcmd mediante el proxy de autenticación de Cloud SQL .
Determine la dirección IP de su aplicación
Para determinar la dirección IP de una computadora que ejecuta su aplicación para poder autorizar el acceso a su instancia de Cloud SQL desde esa dirección, utilice una de las siguientes opciones:
- Si la computadora no está detrás de un proxy o firewall, inicie sesión en la computadora y utilice el sitio ¿Cuál es mi IP? para determinar su dirección IP.
- Si la computadora está detrás de un proxy o firewall, inicie sesión en la computadora y use una herramienta o servicio como whatismyipaddress.com para determinar su verdadera dirección IP.
Abrir puertos locales
Para verificar que su host esté escuchando en los puertos que cree, ejecute el comando ss -tunlp4
. Esto le indicará qué puertos están abiertos y escuchando.
Toda la actividad portuaria local
Utilice el comando netstat
para ver toda la actividad del puerto local. Por ejemplo, netstat -lt
muestra todos los puertos activos actualmente.
Conéctese a su instancia de Cloud SQL mediante telnet
Para verificar que puede conectarse a su instancia de Cloud SQL mediante TCP
, ejecute el comando telnet
. Telnet intenta conectarse a la dirección IP y el puerto que le proporcione.
Si tiene éxito, verá lo siguiente: Intentando 35.193.198.159...
Conectado a 35.193.198.159. .
En caso de falla, verá que telnet
se bloquea hasta que fuerce el cierre del intento: Intentando 35.193.198.159...
^C. .
Registro en la nube
Cloud SQL y Cloud SQL utilizan Cloud Logging. Consulte la documentación de Cloud Logging para obtener información completa y revisar las consultas de ejemplo de Cloud SQL .
Ver registros
Puede ver los registros de las instancias de Cloud SQL y otros Google CloudProyectos como Cloud VPN o instancias de Compute Engine. Para ver los registros de las entradas de registro de su instancia de Cloud SQL:
Consola
En el Google Cloud consola, vaya a la página de Registro en la nube .
- Seleccione un proyecto de Cloud SQL existente en la parte superior de la página.
- En el generador de consultas, agregue lo siguiente:
- Recurso: Seleccione la base de datos de Cloud SQL . En el cuadro de diálogo, seleccione una instancia de Cloud SQL.
- Nombres de registro: Desplácese hasta la sección Cloud SQL y seleccione los archivos de registro adecuados para su instancia. Por ejemplo:
- Gravedad: seleccione un nivel de registro.
- Rango de tiempo: seleccione un ajuste preestablecido o cree un rango personalizado.
nube g
Use el comando gcloud logging
para ver las entradas del registro. En el siguiente ejemplo, reemplace PROJECT_ID
. El indicador limit
es un parámetro opcional que indica el número máximo de entradas que se devolverán.
Direcciones IP privadas
Las conexiones a una instancia de Cloud SQL que usan una dirección IP privada se autorizan automáticamente para los rangos de direcciones RFC 1918. Los rangos de direcciones no RFC 1918 deben configurarse en Cloud SQL como redes autorizadas . También debe actualizar el emparejamiento de red con Cloud SQL para exportar cualquier ruta no RFC 1918. Por ejemplo:
gcloud compute networks peerings update cloudsql-sqlserver-googleapis-com
--network=NETWORK
--export-subnet-routes-with-public-ip
--project=PROJECT_ID
Solución de problemas de VPN
Consulte la página de solución de problemas de VPN en la nube .