Maison  >  Article  >  base de données  >  Comment modifier la structure des tables de la base de données MySQL en ligne

Comment modifier la structure des tables de la base de données MySQL en ligne

WBOY
WBOYavant
2022-09-05 17:45:282394parcourir

Apprentissage recommandé : Tutoriel vidéo mysql

1. Verrouillage des métadonnées MDL

Avant de modifier la structure de la table, examinons les problèmes possibles.

1. Qu'est-ce que le verrouillage MDL

MySQL a un verrou appelé verrouillage des métadonnées MDL Lorsque la table est modifiée, ce verrou sera automatiquement ajouté à la table, c'est-à-dire qu'il n'est pas nécessaire de l'utiliser explicitement.

  • Lors de l'ajout, de la suppression, de la modification et de l'interrogation de la table, le verrou de lecture MDL est ajouté
  • Lorsque la structure de la table est modifiée, le verrou d'écriture MDL est ajouté

La lecture et la lecture ne s'excluent pas mutuellement. write, write et write s'excluent mutuellement, donc

  • Lorsqu'un thread effectue des ajouts, des suppressions et des modifications à la table, il bloquera les demandes des autres threads pour modifier la structure de la table
  • Lorsqu'un thread modifie la structure de la table Quand. , il bloquera les demandes d'ajouts, de suppressions, de modifications et de requêtes des autres threads

2 Problème de verrouillage MDL

Et une fois le MDL verrouillé, il ne sera libéré qu'après la soumission de la transaction actuellement demandée si elle l'est. une longue transaction, ou il y a une grande quantité de données en ligne, et le verrou en écriture MDL est verrouillé par défaut lors de la modification de la structure de la table, ce qui prendra beaucoup de temps et bloquera d'autres requêtes ultérieures.

Imaginez un scénario où A(select), B(alter), C(select), D(select)... sont des requêtes pour la même table MySQL en séquence. Ces requêtes formeront une file d'attente.
Lorsque A (sélectionner) acquiert le verrou de lecture MDL de la table, il bloquera B (modifier), car B doit ajouter un verrou d'écriture MDL. Une fois B bloqué, les autres requêtes dans la file d'attente seront bloquées. , provoquant finalement l'épuisement des connexions disponibles de Mysql, des délais d'attente des demandes et d'autres problèmes.

2. Comment modifier la structure de la table MySQL en ligne

Compte tenu du verrou MDL ci-dessus, nous savons que la modification de la structure de la table bloquera d'autres requêtes normales, l'opération de modification doit donc être effectuée en dehors des heures de pointe, habituellement, mettez-le à 2h-4h du matin.

Étapes spécifiques :

  • Ajouter un verrou en lecture-écriture à la table pour que la table soit en lecture seule à ce moment,
  • Copier la structure physique de la table d'origine
  • Modifier la structure physique de la nouvelle table, y compris l'ajout de nouveaux champs ou la modification d'autres structures de table
  • Importez la structure de la table dans la nouvelle table, la synchronisation des données est terminée, verrouillez la table intermédiaire, supprimez la table d'origine
  • Renommez la nouvelle table avec le nom de la table d'origine
  • Relâchez le verrou

Le problème avec la solution ci-dessus est que lorsque la quantité de données est importante, l'importation des données prend du temps et pendant ce processus, le service est inaccessible.

Amélioration :

Créez une nouvelle table A_new, qui contient plusieurs champs de plus que la table d'origine Abonnez-vous à la table A d'origine via l'abonnement aux données et synchronisez les données de la table en ligne A avec cette nouvelle table dans A_new. , ce processus se poursuivra et la table A pourra être ajoutée, supprimée, modifiée et vérifiée au cours de ce processus. Il y aura toujours un moment où les données des deux tables seront complètement synchronisées et il n'y aura aucune différence dans les données. cette fois, l'original Le nom de la table A est modifié et la nouvelle table A_new est modifiée en table A d'origine. Cette opération est une opération courte et peut être complétée instantanément sans impact significatif.
Avantages et inconvénients :

  • L'avantage est que le processus de synchronisation n'affectera pas l'activité normale.
  • L'inconvénient est qu'un espace de stockage supplémentaire est nécessaire pour stocker la nouvelle table pendant le processus. Une fois le changement de nom terminé, l'ancienne table peut être supprimée.

Apprentissage recommandé : Tutoriel vidéo MySQL

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer