Maison  >  Article  >  base de données  >  Comment indexer une énorme table de production MySQL sans interrompre les opérations ?

Comment indexer une énorme table de production MySQL sans interrompre les opérations ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-31 11:52:02592parcourir

How Can You Index a Huge MySQL Production Table Without Disrupting Operations?

Créer un index sur une énorme table de production MySQL

Énoncé du problème :

Création d'un index sur une grande production MySQL table peut potentiellement provoquer des verrouillages de la base de données. Cela présente un défi pour garantir un accès ininterrompu à la base de données pendant le processus d'indexation.

Solution :

MySQL 5.6 et versions ultérieures : mises à jour de l'index en ligne

Depuis MySQL 5.6, la base de données prend en charge les mises à jour incrémentielles d'index pendant les opérations. Cela signifie que la création ou la suppression d'index peut avoir lieu simultanément avec les lectures et les écritures, réduisant ainsi le risque de blocages et garantissant l'intégrité des données.

MySQL 5.5 et versions antérieures

Dans MySQL 5.5 et versions antérieures, les opérations UPDATE sur une table avec une mise à jour d'index active rencontrera des blocs. Cela peut avoir un impact significatif sur les performances et provoquer des pannes.

Pour éviter ces blocages, envisagez l'approche suivante :

1. Serveurs maîtres circulaires :

  • Établissez deux serveurs, l'un servant de maître principal et l'autre d'esclave.
  • Effectuez la mise à jour de l'index sur le serveur esclave pendant qu'il réplique les écritures du maître.
  • Autoriser l'esclave à rattraper le maître, garantissant la compatibilité entre les schémas mis à jour et les anciens.
  • Basculer atomiquement les clients du maître à l'esclave, ce qui rend l'esclave le nouveau maître avec le schéma mis à jour.
  • Répétez le processus avec le serveur maître, en faisant de lui le nouvel esclave.

2. Changement de schéma en ligne de Percona :

  • Créez une nouvelle table avec une structure identique à l'original.
  • Mettez à jour le schéma sur la nouvelle table.
  • Établissez un déclencheur sur la table d'origine pour synchroniser les modifications avec la copie.
  • Migrez les données par lots de la table d'origine vers la nouvelle table.
  • Remplacez la table d'origine par le nouvelle table.
  • Lâchez l'ancienne table.

3. Promotion de réplique en lecture RDS :

Si vous utilisez le RDS d'Amazon, vous pouvez créer une réplique en lecture seule et y effectuer la mise à jour de l'index. Une fois terminé, faites la promotion de la réplique pour qu'elle devienne le nouveau maître. Cette approche simplifie le processus en automatisant le basculement et la migration des données.

Remarque : Cette approche nécessite le redémarrage de l'application pour se reconnecter à l'instance de base de données mise à jour.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn