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?
- ¿Tus intervalos de direcciones IP asignados contenían al menos un espacio /24 por cada región en la que tenías previsto crear instancias de MySQL?
- Si especificas un intervalo de direcciones IP asignadas para tus instancias de MySQL, ¿contiene el intervalo al menos un espacio /24 por cada región en la que tienes previsto crear instancias de MySQL 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, si te conectas desde tu entorno local con el cliente mysql), asegúrate de que la dirección IP desde la que te conectas 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 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-mysql-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 con la CLI de gcloud y el cliente de MySQL instalados. 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 de MySQL. 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. Para IPv4, autoriza
0.0.0.0/0
(para IPv6, autoriza::/0
.
Verificar cómo te conectas
Si aparece un mensaje de error como este:ERROR 1045 (28000): Access denied for user 'root'@'1.2.3.4' (using password: NO)
Cuando te conectes, comprueba que estás proporcionando una contraseña.
Si aparece un mensaje de error como este:
ERROR 1045 (28000): Access denied for user 'root'@'1.2.3.4' (using password: YES)
Cuando te conectes, comprueba que estás usando la contraseña correcta y que te conectas a través de SSL si la instancia lo requiere.
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:
SHOW PROCESSLIST;
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
Si recibes el mensaje de error "Demasiadas conexiones" o quieres saber qué ocurre en una instancia, puedes mostrar el número de conexiones y de subprocesos con SHOW PROCESSLIST
.
Desde un cliente de MySQL, ejecuta lo siguiente:
mysql> SHOW PROCESSLIST;
Obtendrá un resultado similar al siguiente:
+----+-----------+--------------+-----------+---------+------+-------+----------------------+ | 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 información sobre cómo interpretar las columnas devueltas por PROCESSLIST
, consulta la referencia de MySQL.
Para obtener el número de conversaciones, puedes usar lo siguiente:
mysql> SHOW STATUS WHERE Variable_name = 'Threads_connected';
Obtendrá un resultado similar al siguiente:
+-------------------+-------+ | 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 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
Conectarse con IPv6
Si recibes alguno de los 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 comprobar si IPv6 funciona en tu estación de trabajo accediendo a ipv6.google.com. Si no se carga, significa que no tienes IPv6 disponible. Conéctate a la dirección IPv4 o a tu instancia de Cloud SQL. Es posible que primero tengas que añadir una dirección IPv4 a tu instancia.
Errores de conexión ocasionales (alta disponibilidad antigua)
Cuando Cloud SQL reinicia una instancia debido a eventos de mantenimiento, las conexiones se pueden dirigir a la réplica de failover. Al conectarse a la réplica de conmutación por error:
- Las solicitudes de lectura de clientes que usan conexiones sin cifrar se completan con normalidad. Sin embargo, las solicitudes de escritura fallan y devuelven un mensaje de error, como "Error 1290: The MySQL server is running with the --read-only option so it cannot execute this statement." (Error 1290: El servidor MySQL se está ejecutando con la opción --read-only, por lo que no puede ejecutar esta instrucción).
- Las solicitudes de lectura y escritura de los clientes que usan conexiones cifradas fallan y devuelven un mensaje de error, como "x509: el certificado es válido para master-instance, no para failover-instance".
Una vez finalizado el evento, Cloud SQL restablece la conexión. Vuelve a intentar la conexión. Te recomendamos que diseñes tus aplicaciones para que gestionen los fallos de conexión ocasionales implementando una estrategia de gestión de errores como la retirada exponencial. Consulta Implementación de la aplicación para obtener más información.
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 mysql para comprobar si puedes conectarte desde tu entorno local. Para obtener más información, consulta Conectar el cliente mysql mediante direcciones IP y Conectar el cliente mysql 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 MySQL en ejecución, el puerto 3306 debería estar activo y en modo de 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 3306
.
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.
.
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.googlapis.com/mysql-general.log
- cloudsql.googleapis.com/mysql.err
- 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/mysql-general.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-mysql-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.