Passer au contenu

Comment résoudre les problèmes lorsque je me connecte à mon instance de base de données Amazon RDS ?

Lecture de 11 minute(s)
0

Je souhaite déterminer pourquoi je ne parviens pas à me connecter à mon instance de base de données Amazon Relational Database Service (Amazon RDS).

Brève description

La connexion à votre instance de base de données Amazon RDS peut échouer pour les raisons suivantes :

  • La source à partir de laquelle vous vous connectez à l’instance de base de données ne dispose pas d’un accès autorisé dans votre groupe de sécurité, vos listes de contrôle d’accès au réseau (ACL) ou vos pare-feux locaux.
  • Le chemin réseau entre l'application cliente et l'instance de base de données est manquant dans la table de routage.
  • Vous utilisez un nom DNS ou un point de terminaison erroné pour vous connecter à l’instance de base de données.
  • Votre instance de base de données n'est pas accessible au public et vous ne pouvez pas vous connecter via Internet.
  • L’instance de base de données Multi-AZ a échoué, et l’instance de base de données secondaire utilise un sous-réseau ou une table de routage qui n’autorise pas les connexions entrantes.
  • L'authentification de l'utilisateur n'est pas correcte.

Résolution

Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.

Pour résoudre les problèmes de connexion de votre instance de base de données Amazon RDS, effectuez les tâches suivantes :

Utiliser le diagnostic automatique

Commencez par utiliser des outils automatisés pour identifier rapidement les problèmes de connexion.

Procédez comme suit :

  1. Pour exécuter l'outil de diagnostic automatique, utilisez la commande start-automation-execution d’AWS Systems Manager suivante :
    aws ssm start-automation-execution \
        --document-name "AWSSupport-TroubleshootConnectivityToRDS" \
        --parameters "InstanceId=EC2-INSTANCE-ID,DBInstanceIdentifier=DB-INSTANCE-NAME"
    Remarque : remplacez EC2-INSTANCE-ID par votre ID d'instance EC2 et DB-INSTANCE-NAME par votre identifiant d'instance RDS.
  2. Pour vérifier les résultats de l'automatisation, exécutez la commande get-automation-execution suivante :
    aws ssm get-automation-execution \
        --automation-execution-id EXECUTION-ID
    Remarque : remplacez EXECUTION-ID par l'ID d'exécution de l'étape 1.

Pour obtenir des instructions sur la procédure d’exécution du dossier d’exploitation et des détails sur les éléments qu'il vérifie, consultez la section AWSSupport-TroubleshootConnectivityToRDS.

Vérifier l'état de l'instance de base de données

Vérifiez que votre instance de base de données est disponible et prête à être connectée.

Procédez comme suit :

  1. Pour vérifier l'état de votre instance de base de données, exécutez la commande describe-db-instances suivante :
    aws rds describe-db-instances \
        --db-instance-identifier DB-INSTANCE-NAME \
        --query 'DBInstances[*].DBInstanceStatus'
    Remarque : remplacez DB-INSTANCE-NAME par l'identifiant de votre instance Amazon RDS.
  2. Attendez que le statut indique Disponible avant de tenter de vous connecter. Les instances nouvelles ou redémarrées peuvent prendre jusqu'à 20 minutes pour être disponibles.

Vérifier les règles du groupe de sécurité

Les groupes de sécurité contrôlent l'accès réseau à votre instance Amazon RDS. Vérifiez qu'ils autorisent le trafic provenant de votre source.

Procédez comme suit :

  1. Pour identifier les groupes de sécurité associés à votre instance Amazon RDS, exécutez la commande describe-db-instances suivante :|
    aws rds describe-db-instances \
        --db-instance-identifier DB-INSTANCE-NAME \
        --query 'DBInstances[*].VpcSecurityGroups[*].VpcSecurityGroupId'
    Remarque : remplacez DB-INSTANCE-NAME par l’identifiant de l'instance RDS.
  2. Pour vérifier les règles entrantes pour chaque groupe de sécurité, exécutez la commande describe-security-groups suivante :
    aws ec2 describe-security-groups \
        --group-ids SECURITY-GROUP-ID \
        --query 'SecurityGroups[*].IpPermissions'
    Remarque : remplacez SECURITY-GROUP-ID par l'ID de chaque groupe de sécurité de l'étape 1.
  3. Pour ajouter une règle autorisant votre adresse IP, exécutez la commande authorize-security-group-ingress suivante :
    aws ec2 authorize-security-group-ingress \
        --group-id SECURITY-GROUP-ID \
        --protocol tcp \
        --port DATABASE-PORT \
        --cidr YOUR-IP-ADDRESS/32
    Remarque : remplacez SECURITY-GROUP-ID par l'ID de votre groupe de sécurité. Remplacez DATABASE-PORT par le port de votre base de données (3306 pour MySQL, 5432 pour PostgreSQL). Remplacez YOUR-IP-ADDRESS par votre adresse IP.

Vérifier les règles ACL du réseau

Les listes de contrôle d'accès au réseau (ACL) fournissent une sécurité au niveau du sous-réseau. Vérifiez qu'elles autorisent le trafic de base de données.

Procédez comme suit :

  1. Pour identifier la liste de contrôle d'accès au réseau (ACL) de votre sous-réseau Amazon RDS, exécutez la commande describe-network-acls suivante :
    aws ec2 describe-network-acls \
        --filters "Name=association.subnet-id,Values=SUBNET-ID" \
        --query 'NetworkAcls[*].NetworkAclId'
    Remarque : remplacez SUBNET-ID par votre ID de sous-réseau RDS :
  2. Pour vérifier les règles de la liste de contrôle d'accès au réseau (ACL), exécutez la commande describe-network-acls suivante :
    aws ec2 describe-network-acls \
        --network-acl-ids NETWORK-ACL-ID \
        --query 'NetworkAcls[*].Entries'
    Remarque : remplacez NETWORK-ACL-ID par l'ID de l’ACL réseau de l'étape 1.
  3. Vérifiez que les règles entrantes autorisent le trafic sur le port de votre base de données et que les règles sortantes autorisent les ports éphémères (1024-65535).

Vérifier la configuration de la table de routage

Les tables de routage dirigent le trafic réseau. Vérifiez qu'elles fournissent un routage approprié à votre instance Amazon RDS.

Procédez comme suit :

  1. Pour vérifier la table de routage de votre sous-réseau Amazon RDS, exécutez la commande describe-route-tables suivante :
    CMD
    Remarque : remplacez SUBNET-ID par votre ID de sous-réseau RDS.
  2. Pour un accès public, vérifiez qu'il existe un itinéraire vers une passerelle Internet ([IP_ADDRESS]).
  3. Pour un accès privé, vérifiez les itinéraires vers les passerelles NAT, les connexions d'appairage de VPC ou les passerelles VPN, selon le cas.

Pour en savoir plus, consultez Comment résoudre les problèmes liés aux adresses IP de mes instances de base de données Amazon RDS ?

Vérifier les échecs de résolution DNS

Vérifiez que la résolution de votre point de terminaison Amazon RDS correspond à la bonne adresse IP.

Procédez comme suit :

  1. Pour tester la résolution DNS depuis votre client, exécutez la commande suivante :

    nslookup RDS-ENDPOINT

    Remarque : remplacez RDS-ENDPOINT par le point de terminaison de votre instance RDS.

  2. Pour tester avec la commande dig, exécutez la commande suivante :

    dig RDS-ENDPOINT
  3. Si la résolution DNS échoue, vérifiez vos paramètres DNS Amazon VPC ou utilisez un autre serveur DNS.

Tester la connectivité réseau

Vérifiez la connectivité réseau à votre instance RDS avant de tester l'authentification de la base de données.

Procédez comme suit :

  1. Pour tester la connectivité à votre instance Amazon RDS, exécutez la commande telnet suivante :

    telnet RDS-ENDPOINT DATABASE-PORT

    Remarque : remplacez RDS-ENDPOINT par votre point de terminaison RDS et DATABASE-PORT par votre port de base de données.

  2. Pour effectuer un test avec netcat, exécutez la commande suivante :

    nc -zv RDS-ENDPOINT DATABASE-PORT
  3. Si la connexion aboutit, le problème est probablement lié à l'authentification. En cas d'échec, le problème est lié au réseau.

Pour en savoir plus, consultez Résoudre les problèmes de connectivité réseau aux bases de données Amazon RDS à l'aide de l’Analyseur d'accessibilité Amazon VPC

Authentification de base de données IAM

Vérifiez les informations d'identification et la méthode d'authentification de votre base de données.

Procédez comme suit :

  1. Pour tester l'authentification par mot de passe pour MySQL, exécutez la commande suivante :
    mysql -h RDS-ENDPOINT -P DATABASE-PORT -u USERNAME -p
    Remarque : remplacez RDS-ENDPOINT par votre point de terminaison, DATABASE-PORT par votre port et USERNAME par le nom d'utilisateur de votre base de données.
  2. Pour tester l'authentification par mot de passe pour PostgreSQL, exécutez la commande suivante :
    psql -h RDS-ENDPOINT -p DATABASE-PORT -U USERNAME -d DATABASE-NAME
    Remarque : remplacez RDS-ENDPOINT, DATABASE-PORT, USERNAME et DATABASE-NAME par vos valeurs.
  3. Pour réinitialiser le mot de passe principal si nécessaire, exécutez la commande modify-db-instance suivante :
    aws rds modify-db-instance \
        --db-instance-identifier DB-INSTANCE-NAME \
        --master-user-password NEW-PASSWORD \
        --apply-immediately
    Remarque : remplacez DB-INSTANCE-NAME par l'identifiant de votre instance et NEW-PASSWORD par votre nouveau mot de passe.

Vérifier les limites de connexion

Vérifiez que votre instance Amazon RDS n'a pas atteint les limites de connexion.

Procédez comme suit :

  1. Pour vérifier les connexions actuelles pour MySQL, connectez-vous à votre base de données et exécutez la requête suivante :

    SHOW STATUS LIKE 'Threads_connected';
    SHOW VARIABLES LIKE 'max_connections';
  2. Pour vérifier les connexions actuelles pour PostgreSQL, exécutez la requête suivante :

    SELECT count(*) FROM pg_stat_activity;
    SHOW max_connections;
  3. Pour vérifier les erreurs de connexion dans MySQL, exécutez la requête suivante :

    SHOW STATUS LIKE 'Connection_errors%';
    SHOW STATUS LIKE 'Max_used_connections';

Si votre instance Amazon RDS atteint les limites de connexion, procédez comme suit :

  1. Pour identifier les connexions inactives qui peuvent être interrompues, exécutez la requête suivante pour MySQL :

    SELECT id, user, host, db, command, time, state, info
    FROM information_schema.processlist
    WHERE command = 'Sleep' AND time > 300
    ORDER BY time DESC;
  2. Pour mettre fin aux connexions inactives dans MySQL, exécutez la commande suivante :

    CALL mysql.rds_kill(CONNECTION-ID);

    Remarque : remplacez CONNECTION-ID par l'ID de connexion de l'étape 1.

  3. Pour augmenter le paramètre max_connections, exécutez la commande modify-db-parameter-group suivante :

    aws rds modify-db-parameter-group \
        --db-parameter-group-name PARAMETER-GROUP-NAME \
        --parameters "ParameterName=max_connections,ParameterValue=NEW-VALUE,ApplyMethod=pending-reboot"

    Remarque : remplacez PARAMETER-GROUP-NAME par le nom de votre groupe de paramètres et NEW-VALUE par la limite de connexion souhaitée. Un redémarrage est nécessaire après avoir modifié max_connections.

  4. Pour appliquer les modifications de paramètres, redémarrez votre instance Amazon RDS. Exécutez la commande reboot-db-instance suivante :

    aws rds reboot-db-instance \
        --db-instance-identifier DB-INSTANCE-NAME

    Remarque : remplacez DB-INSTANCE-NAME par l'identifiant de votre instance Amazon RDS.

  5. Pour implémenter le regroupement de connexions avec le proxy RDS, exécutez la commande create-db-proxy suivante :

    aws rds create-db-proxy \
        --db-proxy-name PROXY-NAME \
        --engine-family mysql \
        --target-group-config DBInstanceIdentifiers=DB-INSTANCE-NAME \
        --vpc-subnet-ids SUBNET-ID-1,SUBNET-ID-2 \
        --auth AuthScheme=SECRETS,SecretArn=SECRET-ARN

    Remarque : remplacez PROXY-NAME, DB-INSTANCE-NAME, SUBNET-ID-1, SUBNET-ID-2 et SECRET-ARN par vos valeurs.

Vérifier les limites de connexion spécifiques à l'utilisateur

Procédez comme suit :

  1. Pour vérifier les connexions max_user_connections actuelles, exécutez la requête suivante :

    SHOW VARIABLES LIKE 'max_user_connections';
  2. Pour vérifier les connexions actuelles par utilisateur, exécutez la requête suivante :

    SELECT user, COUNT(*) as connection_count
    FROM information_schema.processlist
    GROUP BY user
    ORDER BY connection_count DESC;
  3. Pour vérifier si un utilisateur spécifique a atteint sa limite de connexion, exécutez la requête suivante :

    SELECT user, max_user_connections
    FROM mysql.user
    WHERE user = 'USERNAME';

    Remarque : remplacez USERNAME par le nom d'utilisateur spécifique qui rencontre des problèmes de connexion.

Le paramètre max_user_connections peut empêcher des utilisateurs spécifiques de se connecter, même lorsque les limites de connexion globales ne sont pas atteintes.

Si votre instance Amazon RDS atteint le nombre maximum de connexions utilisateur, procédez comme suit :

  1. Pour augmenter globalement le paramètre max_user_connections, exécutez la commande modify-db-parameter-group suivante :
    aws rds modify-db-parameter-group \
        --db-parameter-group-name PARAMETER-GROUP-NAME \
        --parameters "ParameterName=max_user_connections,ParameterValue=NEW-VALUE,ApplyMethod=immediate"
    Remarque : remplacez PARAMETER-GROUP-NAME par le nom de votre groupe de paramètres et NEW-VALUE par la limite de connexion par utilisateur souhaitée.
  2. Pour modifier les limites de connexion pour un compte utilisateur spécifique, exécutez la requête suivante :
    ALTER USER 'USERNAME'@'%' WITH MAX_USER_CONNECTIONS NEW-LIMIT;
    Remarque : remplacez USERNAME par le nom d'utilisateur et NEW-LIMIT par la limite de connexion souhaitée pour cet utilisateur.

Pour plus d'informations, consultez la page Définition des limites de ressources du compte sur le site Web de MySQL.

Vérifier les limites d'erreurs de connexion

Procédez comme suit :

  1. Pour vérifier les erreurs max_connect_errors actuelles pour Amazon RDS for MySQL, exécutez la requête suivante :

    SHOW VARIABLES LIKE 'max_connect_errors';
  2. Pour vérifier si des hôtes sont actuellement bloqués, exécutez la requête suivante :

    SELECT * FROM performance_schema.host_cache
    WHERE SUM_CONNECT_ERRORS > 0;
  3. Pour vérifier le nombre actuel d'erreurs de connexion pour votre hôte, exécutez la requête suivante :

    SELECT HOST, SUM_CONNECT_ERRORS, COUNT_HANDSHAKE_ERRORS, COUNT_AUTHENTICATION_ERRORS
    FROM performance_schema.host_cache
    WHERE HOST = 'YOUR-CLIENT-IP';

    Remarque : remplacez YOUR-CLIENT-IP par l'adresse IP réelle de votre client.

  4. Pour vider le cache de l'hôte et débloquer tous les hôtes, exécutez la requête suivante :

    FLUSH HOSTS;
  5. Pour augmenter le paramètre max_connect_errors afin d'éviter tout blocage futur, exécutez la commande modify-db-parameter-group suivante :

    aws rds modify-db-parameter-group \
        --db-parameter-group-name PARAMETER-GROUP-NAME \
        --parameters "ParameterName=max_connect_errors,ParameterValue=NEW-VALUE,ApplyMethod=immediate"

    Remarque : remplacez PARAMETER-GROUP-NAME par le nom de votre groupe de paramètres et NEW-VALUE par une limite plus élevée, telle que 1000000.

  6. Pour vérifier que le changement de paramètre a été appliqué, exécutez à nouveau la requête à partir de l'étape 1 et confirmez la nouvelle valeur.

Pour plus d'informations, consultez la section Comment résoudre l'erreur « Host is blocked because of many connections errors » dans Amazon RDS pour MySQL ?

Informations connexes

Impossible de se connecter à une instance de base de données Amazon RDS

Utilisation du protocole SSL/TLS pour chiffrer une connexion à une instance ou un cluster de base de données

Comment me connecter à une instance de base de données Amazon RDS qui utilise un sous-réseau public ou privé d'un Amazon VPC ?