Qu'est-ce qui se passe si vous tuez une requête alter de longue durée?
Question
Qu'est-ce qui se passe si vous tuez une requête alter de longue durée? Est-ce que la requête alter tout simplement revenir? Depuis combien de temps pourrait prendre que (en proportion du temps qu'il a déjà été en cours d'exécution)?
Et si cette requête est en cours de réplication sur un autre serveur? Est-ce que tuer le processus sur l'autre serveur revert requête alter du serveur d'origine?
Nous courons mysql
La solution
Cela dépend de ce que vous faites. Si vous utilisez la commande an alter table...add index
sur une table de InnoDB
(pas si sûr MyISAM
), il suffit d'exécuter et exécuter comme il copie l'ensemble table sacrément serrure stock et le baril d'abord: si elle est au milieu de la « copie à table de temp » il est à peu près impossible à arrêter.
Dans la plupart des cas, ALTER TABLE fonctionne par faire une copie temporaire de la table d'origine. L'altération est effectué sur la copie, puis le original est effacée, et le nouveau on est renommé. Alors que ALTER TABLE est l'exécution, la table d'origine est lisibles par d'autres sessions. Mises à jour et écrit à la table sont au point mort jusqu'à ce que la nouvelle table est prête, puis sont redirigés vers le nouvelle table sans aucune mise à jour a échoué.
Autres conseils
Et si cette requête est en cours de réplication sur un autre serveur?
Le ALTER sera exécuté sur ce serveur et, avec les impacts associés.
Will tuer le processus sur l'autre serveur revert requête alter du serveur d'origine?
Non. Le serveur d'origine n'a pas de canal arrière pour en savoir plus sur ce qui se passait (ou n'a pas) sur l'esclave. Si vous tuez le sur l'esclave ALTER, alors vous aurez le vent dans la situation où le maître a la nouvelle contrainte ou de l'indice, et l'esclave ne fonctionne pas. Ce qui est rarement une recette du bonheur:)
Une fois que le journal entre ALTER de réplication, vous avez soit de le laisser fonctionner partout, ou le tuer partout.