Déboguer les problèmes de connexion

Présentation

Généralement, les problèmes de connexion relèvent de l'un des trois domaines suivants :

  • Connexion – parvenez-vous à accéder à votre instance via le réseau ?
  • Autorisation – êtes-vous autorisé à vous connecter à l'instance ?
  • Authentification – la base de données accepte-t-elle vos identifiants de base de données ?

Chacun de ces éléments peut être subdivisé en différentes pistes d'analyse. La section suivante présente des exemples de questions que vous pouvez vous poser afin de mieux cerner le problème :

Checklist des problèmes de connexion

Messages d'erreur

Pour en savoir plus sur les messages d'erreur liés à l'API, consultez la page de référence Messages d'erreur.

Résoudre des problèmes de connectivité supplémentaires

Pour d'autres problèmes, consultez la section Connectivité sur la page de dépannage.

Problèmes de connexion courants

Vérifier que l'application ferme correctement les connexions

Si vous constatez des erreurs contenant "Aborted connection nnnn to db:", cela indique généralement que votre application ne met pas fin aux connexions de manière appropriée. Des problèmes de réseau peuvent également provoquer cette erreur. Elle n'indique pas forcément des problèmes avec votre instance Cloud SQL. Vous êtes également invité à exécuter tcpdump pour inspecter les paquets afin d'identifier la source du problème.

Pour obtenir des exemples de bonnes pratiques en matière de gestion des connexions, consultez la page Gérer les connexions à la base de données.

Vérifier la date d'expiration des certificats

Si votre instance est configurée pour utiliser SSL, accédez à la page "Instances Cloud SQL" dans Google Cloud Console et ouvrez l'instance. Accédez à la page Connexions, sélectionnez l'onglet Sécurité et vérifiez que le certificat de serveur est valide. S'il a expiré, vous devez ajouter un nouveau certificat et effectuer une rotation pour le mettre en application.

Vérifier que vous êtes autorisé à vous connecter

En cas d'échec de connexion, vérifiez que vous êtes autorisé à vous connecter :

  • Si vous ne parvenez pas à vous connecter à l'aide d'une adresse IP (par exemple, vous vous connectez depuis votre environnement sur site avec le client sqlcmd), assurez-vous que l'adresse IP à laquelle vous vous connectez est autorisée à se connecter à l'instance Cloud SQL.

    Les connexions à une instance Cloud SQL à l'aide d'une adresse IP privée sont automatiquement autorisées pour les plages d'adresses RFC 1918. De cette manière, tous les clients privés peuvent accéder à la base de données sans passer par le proxy d'authentification Cloud SQL. Les plages d'adresses non-RFC 1918 doivent être configurées en tant que réseaux autorisés.

    Par défaut, Cloud SQL n'apprend pas les routes de sous-réseau non-RFC 1918 à partir de votre VPC. Vous devez mettre à jour l'appairage de réseaux vers Cloud SQL pour exporter les routes non-RFC 1918. Exemple :

    gcloud compute networks peerings update cloudsql-mysql-googleapis-com \
    --network=NETWORK \
    --export-subnet-routes-with-public-ip \
    --project=PROJECT_ID
    
  • Voici votre adresse IP actuelle.

Déterminer le mode de lancement des connexions

Pour afficher des informations sur vos connexions actuelles, connectez-vous à votre base de données et exécutez la commande suivante :

sp_who
go

Les connexions qui affichent une adresse IP, telle que 1.2.3.4, se connectent via une adresse IP. Les connexions avec cloudsqlproxy~1.2.3.4 utilisent le proxy d'authentification Cloud SQL, sinon elles proviennent d'App Engine. Les connexions à partir de localhost peuvent être utilisées par certains processus Cloud SQL internes.

Limites de connexion

Les instances Cloud SQL ne sont pas limitées en nombre de requêtes par seconde. Toutefois, il existe des limites spécifiques liées aux connexions, à la taille et à App Engine. Consultez la section Quotas et limites pour en savoir plus.

Les connexions aux bases de données consomment des ressources sur le serveur et sur l'application de connexion. Suivez toujours les bonnes pratiques en matière de gestion des connexions afin de réduire au maximum l'encombrement de votre application et les risques de dépassement des limites de connexion Cloud SQL. Pour en savoir plus, consultez la page Gérer les connexions à la base de données.

Afficher les connexions et les threads

Pour afficher les processus en cours d'exécution sur votre base de données, connectez-vous à celle-ci et exécutez la commande suivante :
sp_who
go

Pour en savoir plus sur l'interprétation des colonnes renvoyées par sp_who, consultez la documentation de référence sur SQL Server.

Délai avant expiration des connexions (depuis Compute Engine)

Les connexions à une instance Compute Engine expirent après 10 minutes d'inactivité, ce qui peut affecter les connexions inutilisées à longue durée de vie entre votre instance Compute Engine et votre instance Cloud SQL. Pour plus d'informations, consultez la section Mise en réseau et pare-feu dans la documentation Compute Engine.

Pour maintenir des connexions non utilisées à longue durée de vie, vous pouvez définir la valeur TCP keepalive. Les commandes suivantes définissent la valeur de TCP keepalive sur une minute et rendent la configuration permanente dans tous les redémarrages d'instance.

Affichez la valeur tcp_keepalive_time actuelle.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Définissez le paramètre tcp_keepalive_time sur 60 secondes et de manière permanente à chaque redémarrage.

echo 'net.ipv4.tcp_keepalive_time = 60' | sudo tee -a /etc/sysctl.conf

Appliquez la modification.

sudo /sbin/sysctl --load=/etc/sysctl.conf

Affichez la valeur tcp_keepalive_time pour vérifier que la modification a été appliquée.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Outils pour le débogage de la connectivité

tcpdump

tcpdump est un outil permettant de capturer des paquets. Nous vous encourageons vivement à exécuter tcpdump pour capturer et inspecter les paquets entre votre hôte et les instances Cloud SQL lorsque vous déboguez les problèmes de connectivité.

Localiser votre adresse IP locale

Si vous ne connaissez pas l'adresse locale de votre hôte, exécutez la commande ip -br address show. Sous Linux, cette commande affiche l'interface réseau, l'état de l'interface, l'adresse IP locale et les adresses MAC. Exemple : eth0 UP 10.128.0.7/32 fe80::4001:aff:fe80:7/64.

Vous pouvez également exécuter ipconfig ou ifconfig pour afficher l'état de vos interfaces réseau.

Effectuer des tests avec Tests de connectivité

Le module Tests de connectivité se présente comme un outil de diagnostic qui vous permet de vérifier la connectivité entre les points de terminaison de votre réseau. Il analyse votre configuration et, dans certains cas, procède à la vérification de l'exécution. Il est désormais compatible avec Cloud SQL. Suivez ces instructions pour exécuter des tests avec vos instances Cloud SQL.

Tester votre connexion

Le client sqlcmd permet de tester votre capacité à vous connecter depuis votre environnement local. Pour en savoir plus, consultez les pages Connecter un client sqlcmd à l'aide d'adresses IP et Connecter un client sqlcmd à l'aide du proxy d'authentification Cloud SQL.

Déterminer l'adresse IP de votre application

Pour déterminer l'adresse IP d'un ordinateur exécutant votre application et autoriser l'accès à votre instance Cloud SQL à partir de cette adresse, utilisez l'une des options suivantes :

  • Si l'ordinateur n'est pas situé derrière un proxy ou un pare-feu, vous devez vous y connecter et utiliser le site Quelle est mon adresse IP ? pour déterminer son adresse IP.
  • Si l'ordinateur est situé derrière un proxy ou un pare-feu, vous devez vous y connecter, et utiliser un outil ou un service (tel que whatismyipaddress.com) pour identifier son adresse IP réelle.

Ports locaux ouverts

Pour vérifier que votre hôte écoute bien sur les ports que vous pensez, exécutez la commande ss -tunlp4. Cela vous indique quels ports sont ouverts et à l'écoute.

Ensemble de l'activité sur les ports locaux

Exécutez la commande netstat pour afficher l'ensemble de l'activité des ports locaux. Par exemple, netstat -lt affiche tous les ports actuellement actifs.

Se connecter à l'instance Cloud SQL à l'aide de SSL

Pour vérifier que vous pouvez vous connecter à votre instance Cloud SQL à l'aide de TCP, exécutez la commande telnet. Telnet tente de se connecter à l'adresse IP et au port que vous lui indiquez.

En cas de réussite, les éléments suivants s'affichent :

Trying 35.193.198.159...

Connected to 35.193.198.159. .

En cas d'échec, telnet s'interrompt jusqu'à ce que vous forciez sa fermeture :

Trying 35.193.198.159...

^C. .

Cloud Logging

Cloud SQL et Cloud SQL utilisent Cloud Logging. Consultez la documentation de Cloud Logging pour obtenir des informations complètes et accéder à des exemples de requêtes Cloud SQL.

Afficher les journaux

Vous pouvez afficher les journaux des instances Cloud SQL et d'autres projets Google Cloud tels que des instances Cloud VPN ou Compute Engine. Pour afficher les journaux correspondant aux entrées de journal de votre instance Cloud SQL, procédez comme suit :

Console

  1. Dans Google Cloud Console, accédez à la page Cloud Logging.

    Accéder à Cloud Logging

  2. Sélectionnez un projet Cloud SQL existant en haut de la page.
  3. Dans le générateur de requêtes, ajoutez les éléments suivants :
    • Ressource : sélectionnez Base de données Cloud SQL. Dans la boîte de dialogue, sélectionnez une instance Cloud SQL.
    • Noms des journaux : faites défiler la page jusqu'à la section Cloud SQL et sélectionnez les fichiers journaux correspondant à votre instance. Par exemple :
      • Gravité : sélectionnez un niveau de journalisation.
      • Période : sélectionnez une valeur prédéfinie ou créez une période personnalisée.

    gcloud

    Exécutez la commande gcloud logging pour afficher les entrées de journal. Dans l'exemple ci-dessous, remplacez PROJECT_ID. L'option limit est un paramètre facultatif qui indique le nombre maximal d'entrées à renvoyer.

    Adresses IP privées

    Les connexions à une instance Cloud SQL à l'aide d'une adresse IP privée sont automatiquement autorisées pour les plages d'adresses RFC 1918. Les plages d'adresses non-RFC 1918 doivent être configurées dans Cloud SQL en tant que réseaux autorisés. Vous devez mettre à jour l'appairage de réseaux vers Cloud SQL pour exporter les routes non-RFC 1918. Exemple :

    gcloud compute networks peerings update cloudsql-sqlserver-googleapis-com 
    --network=NETWORK
    --export-subnet-routes-with-public-ip
    --project=PROJECT_ID

    Dépannage du VPN

    Consultez la page Dépannage de Cloud VPN.