Modifier 2016 : nous avons récemment (août 2016) publié gh-ost
, en modifiant ma réponse pour la refléter.
Aujourd'hui, il existe plusieurs outils qui vous permettent de faire des modifications de table en ligne pour MySQL. Ce sont :
- modifier 2016 : gh-ost :outil de migration de schéma sans déclencheur de GitHub (avertissement :je suis l'auteur de cet outil)
- oak-online- alter-table , dans le cadre du openark-kit (avertissement :je suis l'auteur de cet outil)
- pt-online-schema- changer , dans le cadre de la Percona Toolkit
- Facebook changement de schéma en ligne pour MySQL
Considérons le "ALTER TABLE" "normal" :
Une grande table prendra beaucoup de temps pour ALTER
. innodb_buffer_pool_size
est important, tout comme les autres variables, mais sur une très grande table, elles sont toutes négligeables. Cela prend juste du temps.
Ce que MySQL fait pour ALTER
un tableau consiste à créer un nouveau tableau avec un nouveau format, à copier toutes les lignes, puis à basculer. Pendant ce temps, la table est complètement verrouillée.
Étudiez votre propre suggestion :
Il effectuera très probablement la pire de toutes les options. Pourquoi donc? Parce que vous utilisez une table InnoDB, le INSERT INTO tablename_tmp SELECT * FROM tablename
fait une transaction. un énorme transaction. Cela créera encore plus de charge que le ALTER TABLE
normal .
De plus, vous devrez fermer votre application à ce moment-là pour qu'elle n'écrive pas (INSERT
, DELETE
, UPDATE
) à votre table. Si c'est le cas, toute votre transaction est inutile.
Ce que proposent les outils en ligne
Les outils ne fonctionnent pas tous de la même façon. Cependant, les bases sont partagées :
- Ils créent une table "fantôme" avec un schéma modifié
- Ils créent et utilisent des déclencheurs pour propager les modifications de la table d'origine à la table fantôme
- Ils lentement copiez toutes les lignes de votre table vers la table fantôme. Ils le font par tranches :disons, 1 000 lignes à la fois.
- Ils font tout ce qui précède pendant que vous pouvez toujours accéder à la table d'origine et la manipuler.
- Lorsqu'ils sont satisfaits, ils échangent les deux, en utilisant un
RENAME
.
Le kit openark outil est utilisé depuis 3,5 ans maintenant. L'outil Percona a quelques mois, mais peut-être plus testé que le premier. On dit que l'outil de Facebook fonctionne bien pour Facebook, mais ne fournit pas de solution générale à l'utilisateur moyen. Je ne l'ai pas utilisé moi-même.
Modifier 2016 : gh-ost
est une solution sans déclenchement, qui réduit considérablement la charge d'écriture du maître sur le maître, en dissociant la charge d'écriture de la migration de la charge normale. Il est auditable, contrôlable, testable. Nous l'avons développé en interne chez GitHub et l'avons publié en open source; nous effectuons toutes nos migrations de production via gh-ost
aujourd'hui. En savoir plus ici
.
Chaque outil a ses propres limites, regardez bien la documentation.
La manière conservatrice
La méthode conservatrice consiste à utiliser une réplication active-passive maître-maître, faites le ALTER
sur le serveur de secours (passif), puis changez de rôle et faites ALTER
à nouveau sur ce qui était le serveur actif, maintenant devenu passif. C'est également une bonne option, mais nécessite un serveur supplémentaire et une connaissance approfondie de la réplication.