Todos os produtos
Search
Central de documentação

Data Management:Alteração de schema sem bloqueio

Última atualização: Jun 27, 2026

As alterações DDL sem bloqueio evitam o travamento de tabelas durante mudanças de schema, prevenindo interrupções nos negócios e atrasos de replicação causados por operações DDL online nativas.

Contexto

Ao alterar o schema de uma tabela grande, é necessário considerar o risco de bloqueios de tabela impedirem operações de escrita.

  • No MySQL 5.5 e em versões anteriores, o DDL oferece suporte a dois algoritmos de execução: Table-Copy e In-Place.

    • Table-Copy: Copia os dados para uma tabela temporária, bloqueando a tabela source e impedindo escritas até que a alteração seja concluída.

    • In-Place (disponível desde o MySQL 5.5): Permite operações de leitura e escrita durante a execução, mas suporta apenas operações relacionadas a índices.

  • O MySQL 5.6 e versões posteriores também introduziram o Innodb-OnlineDDL. Para obter mais informações sobre o Innodb-OnlineDDL, consulte Innodb-OnlineDDL.

    O Innodb-OnlineDDL abrange uma ampla variedade de tipos de DDL, como adicionar ou excluir colunas, renomear colunas e adicionar ou modificar índices. No entanto, ele não suporta alguns tipos comuns, como modificar tipos de coluna, alterar comprimentos de coluna ou mudar conjuntos de caracteres.

Casos de uso

  • Alterar o schema de uma tabela de banco de dados.

  • Modificar o conjunto de caracteres e a collation de uma tabela, ou ajustar seu fuso horário.

  • Evitar bloqueios de tabela decorrentes de operações OPTIMIZE TABLE que recuperam espaço e reduzem a taxa de fragmentação. Para mais detalhes, veja Desfragmentar espaço usando alteração de schema sem bloqueio.

Tipos de banco de dados suportados

RDS MySQL, PolarDB for MySQL, MyBase for MySQL e outros bancos de dados compatíveis com MySQL.

Recursos

  • O recurso de alteração de schema sem bloqueio do DMS permite controlar a velocidade de execução, ajudando a prevenir atrasos de replicação e minimizando o impacto no desempenho do banco de dados. Ele também suporta alterações nas quais o DDL online nativo normalmente bloquearia a tabela.

  • Diferentemente do pt-online-schema-change e do OSC, o recurso de alteração de schema sem bloqueio do DMS não depende de triggers. Ele é executado de forma assíncrona, com impacto mínimo no banco de dados, e pode ser interrompido com segurança a qualquer momento.

  • Este recurso possui alta compatibilidade com o DTS e não interrompe links de replicação do DTS no nível de tabela.

    Nota

    O link de replicação do DTS deve ter sido reiniciado após 14 de fevereiro de 2020.

  • A tabela a seguir compara as capacidades nativas de DDL online do MySQL com o recurso de alteração de schema sem bloqueio do DMS:

    Operação

    MySQL 5.5 e anteriores

    MySQL 5.6 e posteriores

    Alteração de schema sem bloqueio do DMS

    Adicionar uma coluna

    Excluir uma coluna

    Renomear uma coluna

    Adicionar um índice

    Modificar um índice

    Desfragmentar uma tabela

    Modificar o tipo de uma coluna

    Modificar o comprimento de uma coluna

    Modificar um conjunto de caracteres

    Converter um conjunto de caracteres

    Ajustar um fuso horário

    Mitigar ou eliminar atraso de réplica de leitura

    Adicionar uma chave única

    Adicionar uma restrição

    Importante

    Ao adicionar uma chave única ou uma restrição usando o recurso de alteração de schema sem bloqueio do DMS, observe que quaisquer dados na tabela source que violem a nova chave única ou restrição são descartados automaticamente pelo MySQL durante o processo de cópia para a tabela temporária.

Para comparar o recurso de alteração de schema sem bloqueio do DMS com outras soluções, consulte Comparação de soluções de alteração de schema sem bloqueio.

Observações de uso

  • O DMS suporta alterações de schema para tabelas particionadas existentes.

  • É possível usar um único ticket de alteração de schema sem bloqueio para modificar várias tabelas dentro do mesmo banco de dados.

    Ao configurar as instruções SQL para o ticket, separe as instruções de tabelas diferentes com ponto e vírgula (;).

  • Não é possível atualizar a chave primária ou única de uma tabela durante uma alteração de schema sem bloqueio se ela for a única chave da tabela. Tentar essa operação causará falha na tarefa.

Como funciona

Ao enviar um ticket de alteração de schema sem bloqueio, o DMS executa automaticamente as etapas a seguir para concluir a mudança sem bloquear a tabela:

  1. Crie uma tabela temporária. O DMS cria uma nova tabela que espelha o schema da tabela source.

    A sintaxe SQL é CREATE TABLE tmp_table_name LIKE table_name.

  2. Altere o schema da tabela temporária. O DMS aplica as alterações DDL solicitadas à tabela temporária.

    A sintaxe SQL é ALTER TABLE tmp_table_name XXXX.

  3. Copie todos os dados. O DMS copia todos os dados da tabela source para a tabela temporária.

    A sintaxe SQL é INSERT IGNORE INTO tmp_table_name (SELECT %s FROM table_name FORCE INDEX (%s) WHERE XXX LOCK IN SHARE MODE).

  4. Analise o binlog para sincronizar dados incrementais. O DMS aplica alterações contínuas do binlog da tabela source à tabela temporária.

    A sintaxe SQL é UPDATE/INSERT/DELETE tmp_table_name.

  5. Troque as tabelas. O DMS renomeia atomicamente a tabela source para um nome de backup e a tabela temporária para o nome da tabela original.

    A sintaxe SQL é RENAME TABLE table_name to old_tmp_table_name, tmp_table_name to table_name.

Nota

tmp_table_name é um exemplo de nome de tabela temporária. Você encontra o nome específico da tabela temporária na área de progresso da tarefa de alteração de schema sem bloqueio. Para mais informações, consulte Visualize o progresso da alteração de schema sem bloqueio.

O formato dos nomes das tabelas temporárias é o seguinte:

  • Tabela de dados: tp_{change_ID}_ogt_{original_table_name}, tp_{change_ID}_g_{original_table_name}

  • Tabela de heartbeat: tp_{change_ID}_ogl_{original_table_name}, tp_{change_ID}_l_{original_table_name}

  • Tabela auxiliar antes do switchover e tabela original após o switchover: tp_{change_ID}_del_{original_table_name}, tp_{change_ID}_d_{original_table_name}

  • Detecção de bloqueio de tabela: tpa_xxx_xxx

Nota

O ID de alteração é o ID de execução do mecanismo interno do DMS. Não corresponde ao ID do ticket ou ao ID da tarefa.

Documentos relacionados

Perguntas frequentes

  • P: Uma alteração de schema sem bloqueio afeta meus serviços?

    R: Normalmente, uma alteração de schema sem bloqueio não afeta seus serviços. No entanto, o processo de cópia de dados pode impactar o desempenho da instância.

  • P: Recebi um erro ao tentar adicionar um índice com CREATE_INDEX em um ticket de alteração de schema sem bloqueio. O DMS não suporta a adição de índices?

    R: Sim, o DMS suporta a adição de índices. Execute a seguinte instrução ALTER TABLE para adicionar um índice:

    ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) ;
  • P: Recebi um erro ao tentar renomear uma coluna com rename column em um ticket de alteração de schema sem bloqueio. O DMS não suporta a renomeação de colunas?

    R: Sim, o DMS suporta a renomeação de colunas. Execute a seguinte instrução ALTER TABLE para renomear uma coluna:

    ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name datatype;