Ce document explique comment créer, gérer et surveiller des index secondaires sur des instances dupliquées avec accès en lecture Cloud SQL.
Pour en savoir plus sur le fonctionnement des index d'instances dupliquées gérées, consultez Présentation des index d'instances dupliquées avec accès en lecture.
Index d'instances répliquées gérés
Le tableau suivant récapitule le workflow de création, de configuration et de surveillance des index d'instances répliquées gérées :
| Étape | Procédure stockée ou indicateur de base de données | Où effectuer l'étape |
|---|---|---|
| Créer une définition d'index | CALL mysql.cloudsql_replica_idx_defn_create('INDEX_DEFINITION_NAME', 'CREATE_INDEX_STATEMENT');
Cette procédure stockée renvoie un identifiant entier unique pour la définition d'index, |
Instance principale |
| Mapper la définition au groupe | CALL mysql.cloudsql_replica_idx_group_add(INDEX_DEFINITION_ID, 'GROUP_NAME');
|
Instance principale |
| Attribuer un groupe à l'instance répliquée | Indicateur de base de données : cloudsql_index_recreate_replica_group = GROUP_NAME |
Instance répliquée avec accès en lecture |
| Vérifier l'état | CALL mysql.cloudsql_replica_idx_show_status(); |
Instance répliquée avec accès en lecture |
| Erreurs d'audit | CALL mysql.cloudsql_replica_idx_show_errors(); |
Instance répliquée avec accès en lecture |
Chaque appel de procédure stockée exécute une instruction COMMIT qui finalise les modifications de votre session en cours. Par conséquent, les instructions de langage de manipulation de données (LMD) exécutées à l'aide de ces procédures stockées ne peuvent pas être annulées dans une transaction.
Cloud SQL ne permet pas de mettre à jour ni de modifier les métadonnées d'index existantes. Pour modifier un index d'instance répliquée géré, vous devez supprimer la définition d'index existante (ou la supprimer du groupe d'instances répliquées) et créer une définition d'index. Pour en savoir plus, consultez Modifier les index d'instances répliquées gérées.
Rôle et droits requis
Vous devez utiliser un compte utilisateur de base de données auquel est attribué le rôle cloudsqlsuperuser pour exécuter des procédures stockées pour les index d'instances répliquées gérées.
Créer des index d'instances répliquées gérées
Pour créer et gérer des index d'instances dupliquées gérées sur vos instances dupliquées avec accès en lecture, procédez comme suit :
Créez une définition d'index sur l'instance principale :
Appelez la procédure stockée
mysql.cloudsql_replica_idx_defn_createsur l'instance principale de votre base de données :CALL mysql.cloudsql_replica_idx_defn_create ('INDEX_DEFINITION_NAME', 'CREATE_INDEX_STATEMENT');
Remplacez les éléments suivants :
INDEX_DEFINITION_NAME: nom de la définition d'index.CREATE_INDEX_STATEMENT: instruction SQL qui crée l'index secondaire (par exemple,CREATE INDEX idx_age ON university.students (age)). Notez que cette instruction doit être précédée d'un schéma.
Notez l'élément
idx_idrenvoyé (un identifiant entier unique pour la définition) à partir du résultat de la procédure. Cloud SQL stocke ces données dansmysql.cloudsql_replica_idx_defn, et vous pouvez récupérer l'idx_idultérieurement en interrogeant cette table.Ajoutez la définition d'index à un groupe d'instances dupliquées :
Mappez la définition d'index à un nom de groupe d'instances répliquées désigné en appelant
mysql.cloudsql_replica_idx_group_addsur l'instance principale :CALL mysql.cloudsql_replica_idx_group_add (INDEX_DEFINITION_ID, 'GROUP_NAME');
Remplacez les éléments suivants :
INDEX_DEFINITION_ID: ID entier unique renvoyé lorsque vous avez exécuté la procédure stockéemysql.cloudsql_replica_idx_defn_createpour créer l'index secondaire.GROUP_NAME: nom du mappage du groupe d'instances répliquées (par exemple,reporting_group).GROUP_NAMEest un nom personnalisé que vous pouvez sélectionner. Si ce groupe n'existe pas, Cloud SQL en crée un.
Cloud SQL stocke ces données dans
mysql.cloudsql_replica_idx_group_map, et vous pouvez récupérer les mappages de groupes ultérieurement en interrogeant cette table.Attribuez le groupe à votre instance dupliquée :
Activez le groupe désigné sur votre instance dupliquée avec accès en lecture en définissant l'option de base de données
cloudsql_index_recreate_replica_groupsur le nom de votre groupe (par exemple,reporting_group).Vérifiez la progression de la restauration :
Connectez-vous à votre instance dupliquée avec accès en lecture, puis vérifiez la progression de la création et l'état de vos index.
Vérifiez la progression de la création de l'index en cours :
CALL mysql.cloudsql_replica_idx_show_status();Vérifiez les tentatives ayant échoué et les messages d'erreur :
CALL mysql.cloudsql_replica_idx_show_errors();Répertoriez l'état, les détails des nouvelles tentatives et les durées de tous les index gérés :
CALL mysql.cloudsql_replica_idx_show_all();
Vérifier l'état de l'index de l'instance répliquée gérée
Pour vérifier l'état de l'opération d'indexation, connectez-vous à votre instance répliquée avec accès en lecture et interrogez la table mysql.cloudsql_replica_idx_status :
SELECT * FROM mysql.cloudsql_replica_idx_status;
Le résultat ressemble à ce qui suit :
+--------+----------------------------------------------------+--------+-----------+---------------------+---------------------+-------------+---------+--------------------+---------+ | idx_id | create_stmt | action | thread_id | start_time | end_time | retry_count | err_msg | comment_tag | status | +--------+----------------------------------------------------+--------+-----------+---------------------+---------------------+-------------+---------+--------------------+---------+ | 2 | CREATE INDEX t1_fname ON sampletest.t1(first_name) | CREATE | 8140 | 2026-08-26 10:52:13 | NULL | 0 | NULL | [SIC_4_1787741231] | RUNNING | | 4 | CREATE INDEX t2_lname ON sampletest.t2(last_name) | DROP | NULL | 2026-08-26 10:52:13 | 2026-08-26 10:53:15 | 0 | NULL | [SIC_4_1787741533] | DONE | | 5 | CREATE INDEX t1_lname ON sampletest.t1(last_name) | CREATE | 8142 | 2026-08-26 10:53:14 | NULL | 0 | NULL | [SIC_5_1787741594] | RUNNING | +--------+----------------------------------------------------+--------+-----------+---------------------+---------------------+-------------+---------+--------------------+---------+
Cloud SQL effectue la maintenance des index des instances répliquées gérées par lots. Lorsque Cloud SQL récupère un groupe d'actions CREATE ou DROP, il crée une entrée d'état PENDING pour chaque index, puis exécute en série chaque instruction de langage de définition de données (LDD). Un échec sur un index ne bloque pas l'exécution des index suivants dans la file d'attente.
Cloud SQL récupère ensuite le lot suivant après environ cinq minutes.
Si la création d'un index échoue, Cloud SQL marque l'état comme FAILED et relance automatiquement l'opération au bout d'une heure.
La table mysql.cloudsql_replica_idx_status contient toutes les entrées d'état des opérations d'indexation et inclut les colonnes suivantes :
idx_id: identifiant entier unique de la définition d'index.create_stmt: instruction SQLCREATE INDEX.action: opération en cours d'exécution (CREATEouDROP).thread_id: ID du thread MySQL exécutant l'opération.start_time: code temporel du début de l'opération.end_time: code temporel de la fin de l'opération.retry_count: nombre de nouvelles tentatives pour l'opération. Cloud SQL réessaie de créer les index ayant échoué après une heure.err_msg: message d'erreur de la dernière opération ayant échoué.comment_tag: tag[SIC_X_Y]ajouté au commentaire de l'index. Ce tag est utilisé uniquement pour la gestion interne et n'a aucune fonctionnalité.status: état actuel de l'opération :PENDING: l'opération d'indexation a été ajoutée à la file d'attente.RUNNING: l'exécution de l'opération d'indexation a commencé.DONE: l'opération d'indexation a bien été effectuée.FAILED: l'opération d'indexation a échoué. Cloud SQL réessaie de créer les index ayant échoué après une heure.
Supprimer les index d'instances répliquées gérées
Pour supprimer un index d'un groupe d'instances répliquées ou supprimer entièrement une définition d'index, appelez la procédure stockée correspondante sur votre instance principale :
Supprimez une définition d'index d'un groupe d'instances répliquées :
Appelez
mysql.cloudsql_replica_idx_group_dropsur l'instance principale :CALL mysql.cloudsql_replica_idx_group_drop (INDEX_DEFINITION_ID, 'GROUP_NAME');
Remplacez les éléments suivants :
INDEX_DEFINITION_ID: ID entier unique renvoyé lorsque vous avez créé la définition de l'index secondaire.GROUP_NAME: nom du mappage du groupe d'instances répliquées (par exemple,reporting_group).
Supprimer une définition d'index :
Appelez
mysql.cloudsql_replica_idx_defn_dropsur l'instance principale :CALL mysql.cloudsql_replica_idx_defn_drop (INDEX_DEFINITION_ID);
Remplacez les éléments suivants :
INDEX_DEFINITION_ID: ID entier unique de la définition d'index à supprimer.
Pour en savoir plus sur les procédures stockées, consultez Procédures stockées des index d'instances répliquées gérées.
Modifier les index d'instances répliquées gérées
Cloud SQL ne permet pas de mettre à jour ni de modifier les métadonnées d'index existantes. Vous ne pouvez pas modifier directement une définition d'index existante ni son instruction SQL.
Pour modifier un index d'instance répliquée gérée (par exemple, pour modifier des colonnes indexées ou des options d'index), vous devez supprimer la définition d'index existante, puis en créer une autre.
Pour modifier un index d'instance répliquée gérée, procédez comme suit :
Supprimez la définition d'index existante sur l'instance principale :
Pour supprimer la définition d'index d'un groupe d'instances répliquées, appelez
mysql.cloudsql_replica_idx_group_drop:CALL mysql.cloudsql_replica_idx_group_drop (INDEX_DEFINITION_ID, 'GROUP_NAME');
Pour supprimer complètement la définition de l'index, appelez
mysql.cloudsql_replica_idx_defn_drop:CALL mysql.cloudsql_replica_idx_defn_drop (INDEX_DEFINITION_ID);
Remplacez les éléments suivants :
INDEX_DEFINITION_ID: ID entier unique de la définition d'index à supprimer.GROUP_NAME: nom du mappage du groupe d'instances répliquées (par exemple,reporting_group).
Créez une définition d'index sur l'instance principale :
Appelez
mysql.cloudsql_replica_idx_defn_createavec l'instruction d'index mise à jour :CALL mysql.cloudsql_replica_idx_defn_create ('INDEX_DEFINITION_NAME', 'CREATE_INDEX_STATEMENT');
Remplacez les éléments suivants :
INDEX_DEFINITION_NAME: nom de la nouvelle définition d'index.CREATE_INDEX_STATEMENT: instruction SQL mise à jour qui crée l'index secondaire (par exemple,CREATE INDEX idx_age ON university.students (age, name)).
Notez le nouveau
idx_idrenvoyé dans le résultat de la procédure stockée.Mappez la nouvelle définition d'index au groupe d'instances répliquées :
Appelez
mysql.cloudsql_replica_idx_group_addsur l'instance principale :CALL mysql.cloudsql_replica_idx_group_add (INDEX_DEFINITION_ID, 'GROUP_NAME');
Remplacez les éléments suivants :
INDEX_DEFINITION_ID: nouvel ID entier unique renvoyé à l'étape 2.GROUP_NAME: nom du mappage du groupe d'instances répliquées (par exemple,reporting_group).
Une fois que vous avez mappé la nouvelle définition d'index au groupe d'instances dupliquées, le processus de maintenance en arrière-plan supprime l'index existant de l'instance dupliquée avec accès en lecture, puis crée le nouvel index sur l'instance dupliquée à l'aide de la définition mise à jour.
Options de configuration de base de données pour les index d'instances répliquées gérées
Vous pouvez personnaliser le comportement de l'index de l'instance répliquée gérée de manière dynamique à l'aide des indicateurs de base de données globaux suivants :
cloudsql_index_recreate_enable: active ou désactive le processus de recréation. Par défaut, l'option est définie suron. Si vous définissez l'option suroff, les opérations de maintenance d'index en cours sont immédiatement arrêtées.cloudsql_index_recreate_replica_group: nom du groupe d'instances répliquées désigné pour l'instance répliquée (la valeur par défaut estNULL). Une instance répliquée ne peut être attribuée qu'à un seul groupe d'instances répliquées à la fois. Les instances répliquées créent tous les index mappés à ce nom de groupe d'instances répliquées.
Index d'instances répliquées autogérés
Cloud SQL inclut deux procédures stockées dans le schéma mysql que vous pouvez utiliser pour ajouter et supprimer des index secondaires sur une instance dupliquée avec accès en lecture MySQL. Notez que, bien que ces procédures stockées puissent s'exécuter sur une instance source principale, elles sont conçues pour les instances répliquées avec accès en lecture.
Ces index ne persistent pas si l'instance répliquée est recréée.
- mysql.addSecondaryIdxOnReplica
- Ajoute un index secondaire sur la base de données. Cette procédure stockée est un wrapper pour l'instruction LDD CREATE INDEX.
Paramètres :
idxType: type d'index à créer. Par exemple, transmettezUNIQUEpour créer un index unique.idxName: nom de l'index.tableName: nom de la table au formatschema.name.idxDefinition: définition de l'index. N'incluez pas les parenthèses extérieures.idxOption: toutes les options supplémentaires à transmettre lors de la création de l'index. Par exemple, dans MySQL 8.0, vous pouvez transmettre l'optionINVISIBLEpour un index invisible.
Syntaxe :
mysql.addSecondaryIdxOnReplica(idxType, idxName, tableName, idxDefinition, idxOption) - mysql.dropSecondaryIdxOnReplica
- Supprime un index secondaire sur la base de données. Cette procédure stockée est un wrapper pour l'instruction LDD DROP INDEX.
Paramètres :
idxName: nom de l'index.tableName: nom de la table au formatschema.name.idxOption: toutes les options supplémentaires à transmettre lors de la suppression d'un index. Par exemple, une option d'algorithme telle queINPLACE.
Syntaxe :
mysql.dropSecondaryIdxOnReplica(idxName, tableName, idxOption)
Pour les paramètres idxType et idxOption, consultez la documentation de la version majeure de MySQL exécutée sur l'instance Cloud SQL.
Exemples
Cette section fournit des exemples d'ajout ou de suppression corrects ou incorrects d'index d'instances répliquées autogérées.
Utilisation correcte
Voici quelques exemples d'appels des procédures. Supposons que vous disposiez d'une table avec la définition suivante :
CREATE TABLE sampletest.t1(
id int(10) unsigned NOT NULL AUTO_INCREMENT,
first_name varchar(64) NOT NULL,
last_name varchar(64) NOT NULL,
license_id int NOT NULL,
PRIMARY KEY (id),
KEY idx_fname (first_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Si vous souhaitez créer un index standard nommé t1_fname_lname sur les colonnes first_name et last_name, exécutez l'instruction suivante :
CALL mysql.addSecondaryIdxOnReplica('', 't1_fname_lname', 'sampletest.t1', 'first_name, last_name', '')
Si vous souhaitez également créer un index unique nommé t1_license_id sur la colonne license_id avec le commentaire "ID de licence unique", exécutez l'instruction suivante :
CALL mysql.addSecondaryIdxOnReplica('unique', 't1_license_id', 'sampletest.t1', 'license_id', 'comment "unique license ID"')
Si vous souhaitez supprimer l'index t1_fname_lname, exécutez l'instruction suivante :
CALL mysql.dropSecondaryIdxOnReplica('t1_fname_lname', 'sampletest.t1', '')
Utilisation incorrecte
La tentative suivante de création d'un index sur les colonnes first_name et last_name échoue en raison des parenthèses extérieures du paramètre idxDefinition :
CALL mysql.addSecondaryIdxOnReplica('', 't1_extra_parenthesis', 'sampletest.t1', '(first_name, last_name)', '')
Vous ne pouvez ajouter des index qu'aux tables créées par le client. La tentative suivante de création d'un index sur la colonne host de la table mysql.servers échoue :
CALL mysql.addSecondaryIdxOnReplica('', 'idx_invalid', 'mysql.servers', 'host', '')
Vous ne pouvez utiliser la procédure dropSecondaryIdxOnReplica que pour supprimer des index précédemment créés à l'aide de la procédure addSecondaryIdxOnReplica. Par exemple, l'appel suivant pour supprimer l'index idx_fname existant échoue :
CALL mysql.dropSecondaryIdxOnReplica('idx_fname', 'sampletest.t1', '')
L'injection SQL dans ces appels de procédure échoue. Par exemple, l'injection SQL suivante avec une séquence de commentaires échoue :
CALL mysql.addSecondaryIdxOnReplica("user 'a'@'%' --", 'idx_fname', 'sampletest.t1', 'first_name', '')
De même, cette tentative d'injection SQL avec un délimiteur échoue :
CALL mysql.addSecondaryIdxOnReplica('', 'idx_fname', 'sampletest.t1', 'first_name', ';flush status')
Migrer des index d'instances répliquées autogérés vers des index d'instances répliquées gérés
Bien que les index d'instances répliquées gérés et autogérés puissent coexister sur la même instance, vous pouvez migrer vers des index d'instances répliquées gérés.
Pour migrer d'index d'instances répliquées autogérés vers des index d'instances répliquées gérés, procédez comme suit :
Enregistrez les définitions d'index sur l'instance principale :
Appelez
mysql.cloudsql_replica_idx_defn_createsur votre instance principale pour chaque index secondaire :CALL mysql.cloudsql_replica_idx_defn_create ('INDEX_DEFINITION_NAME', 'CREATE INDEX INDEX_NAME ON DATABASE.TABLE (COLUMNS)');
Notez l'élément
idx_idrenvoyé (un identifiant entier unique pour la définition) à partir du résultat de la procédure.Ajoutez la définition d'index à un groupe d'instances dupliquées :
Mappez la définition d'index à un nom de groupe d'instances répliquées désigné en appelant
mysql.cloudsql_replica_idx_group_addsur l'instance principale :CALL mysql.cloudsql_replica_idx_group_add (INDEX_DEFINITION_ID, 'REPLICA_GROUP');
Configurez l'option de groupe d'instances dupliquées sur l'instance dupliquée avec accès en lecture :
Définissez l'indicateur de base de données
cloudsql_index_recreate_replica_groupsur votre instance d'instance répliquée avec accès en lecture pour cibler le nom du groupe :gcloud sql instances patch REPLICA_INSTANCE_NAME \ --database-flags=EXISTING_FLAGS,cloudsql_index_recreate_replica_group=REPLICA_GROUP
Assurez-vous que le nom du groupe fourni dans l'indicateur de base de données
cloudsql_index_recreate_replica_groupcorrespond exactement au nom du groupe spécifié dansmysql.cloudsql_replica_idx_group_add.Vérifiez ou effectuez la transition des index existants :
Étant donné que l'index existe déjà sur l'instance répliquée avec accès en lecture, des erreurs avec l'état
FAILEDpeuvent s'afficher dansmysql.cloudsql_replica_idx_statuslorsque le processus en arrière-plan tente de créer l'index. Vous pouvez choisir l'une des approches suivantes :- Attendez que l'instance répliquée soit recréée : vous pouvez ignorer l'état
FAILEDdans le tableau d'état. Cloud SQL recrée automatiquement l'index secondaire à l'aide de la méthode d'index d'instance répliquée gérée après un événement de recréation d'instance répliquée. Transition immédiate : si vous souhaitez que Cloud SQL gère l'index immédiatement sans attendre la recréation de l'instance dupliquée, connectez-vous à l'instance dupliquée avec accès en lecture et supprimez l'index autogéré à l'aide de la procédure stockée
mysql.dropSecondaryIdxOnReplica:CALL mysql.dropSecondaryIdxOnReplica('INDEX_NAME', 'DATABASE.TABLE', '');
Lors du cycle de maintenance en arrière-plan suivant (environ toutes les cinq minutes), Cloud SQL recrée et suit automatiquement l'index de l'instance répliquée gérée.
- Attendez que l'instance répliquée soit recréée : vous pouvez ignorer l'état
Résoudre les problèmes liés aux index d'instances dupliquées
Pour résoudre les problèmes liés aux index d'instances répliquées, vérifiez les points suivants :
Vérifiez que les index d'instances répliquées gérées sont activés pour l'instance répliquée :
Si vous utilisez des index d'instances répliquées gérées, assurez-vous que l'indicateur de base de données
cloudsql_index_recreate_enableest défini suronsur l'instance répliquée avec accès en lecture.Pour en savoir plus sur la configuration des indicateurs de base de données, consultez Configurer des indicateurs de base de données.
Vérifiez l'état de l'opération et les erreurs :
Connectez-vous à l'instance répliquée avec accès en lecture et interrogez
mysql.cloudsql_replica_idx_statusou exécutezCALL mysql.cloudsql_replica_idx_show_errors();pour afficher les messages d'erreur des opérations ayant échoué. Un échec sur un index ne bloque pas l'exécution des index suivants dans la file d'attente.
Étapes suivantes
- En savoir plus sur les index des instances dupliquées avec accès en lecture
- Découvrez comment gérer les instances dupliquées avec accès en lecture.
- Découvrez comment créer des instances répliquées avec accès en lecture.
- En savoir plus sur la réplication dans Cloud SQL.
- En savoir plus sur le retard de réplication.
- Découvrez comment configurer des indicateurs de base de données.
- Découvrez les procédures stockées pour Cloud SQL pour MySQL.
- Découvrez la reprise après sinistre (DR) avancée.
- Découvrez comment vous connecter à l'aide d'un client MySQL.