Editar 2016: lançamos recentemente (agosto de 2016)
gh-ost
, modificando minha resposta para refleti-la. Hoje existem várias ferramentas que permitem que você altere tabelas online para MySQL. Esses são:
- editar 2016: gh-ost :Ferramenta de migração de esquema sem gatilho do GitHub (disclaimer:eu sou o autor desta ferramenta)
- oak-online- alter-tabela , como parte do kit openark (disclaimer:eu sou o autor desta ferramenta)
- pt-online-schema- mudar , como parte do Percona Toolkit
- Facebook alteração de esquema online para MySQL
Vamos considerar o "normal" `ALTER TABLE`:
Uma tabela grande levará muito tempo para
ALTER
. innodb_buffer_pool_size
é importante, assim como outras variáveis, mas em uma tabela muito grande elas são todas insignificantes. Só leva tempo. O que o MySQL faz para
ALTER
uma tabela é criar uma nova tabela com novo formato, copiar todas as linhas e depois alternar. Durante este tempo, a mesa fica completamente bloqueada. Considere sua própria sugestão:
Provavelmente terá o pior desempenho de todas as opções. Por que é que? Como você está usando uma tabela InnoDB, o
INSERT INTO tablename_tmp SELECT * FROM tablename
faz uma transação. um enorme transação. Ele criará ainda mais carga do que o ALTER TABLE
normal . Além disso, você terá que desligar seu aplicativo nesse momento para que ele não escreva (
INSERT
, DELETE
, UPDATE
) à sua mesa. Se isso acontecer - toda a sua transação é inútil. O que as ferramentas online oferecem
As ferramentas não funcionam todas da mesma forma. No entanto, o básico é compartilhado:
- Eles criam uma tabela "sombra" com esquema alterado
- Eles criam e usam gatilhos para propagar as alterações da tabela original para a tabela fantasma
- Eles lentamente copie todas as linhas da sua tabela para a tabela sombra. Eles fazem isso em partes:digamos, 1.000 linhas por vez.
- Eles fazem tudo isso enquanto você ainda pode acessar e manipular a tabela original.
- Quando satisfeitos, eles trocam os dois, usando um
RENAME
.
O kit openark ferramenta está em uso há 3,5 anos. A ferramenta Percona tem alguns meses, mas possivelmente mais testada que a anterior. Diz-se que a ferramenta do Facebook funciona bem para o Facebook, mas não fornece uma solução geral para o usuário médio. Eu mesmo não usei.
Editar 2016:
gh-ost
é uma solução sem gatilho, que reduz significativamente a carga de gravação do mestre no mestre, desacoplando a carga de gravação de migração da carga normal. É auditável, controlável, testável. Nós o desenvolvemos internamente no GitHub e o lançamos como código aberto; estamos fazendo todas as nossas migrações de produção via gh-ost
hoje. Veja mais aqui
. Cada ferramenta tem suas próprias limitações, observe atentamente a documentação.
A maneira conservadora
A maneira conservadora é usar uma replicação Mestre-Mestre Ativo-Passivo, faça o
ALTER
no servidor em espera (passivo), troque de função e faça o ALTER
novamente no que costumava ser o servidor ativo, agora passivo. Essa também é uma boa opção, mas requer um servidor adicional e um conhecimento mais profundo de replicação.