Executar operações de linguagem de definição de dados (DDL) online no banco de dados de source enquanto uma tarefa de mesclagem de tabelas está em andamento causa perda de dados no banco de dados de destino. Para evitar esse problema, exclua as operações DDL online da configuração da tarefa ou evite executá-las no banco de dados de source durante a execução da tarefa.
Como funciona
Uma tarefa de mesclagem de tabelas consolida tabelas de múltiplos bancos de dados de source e sincroniza ou migra os dados para uma única tabela de destino.
Por exemplo, se você configure uma tarefa para mesclar tabelas de dois bancos de dados ApsaraDB RDS for MySQL (Banco de Dados 1 e Banco de Dados 2) no banco de dados de destino, o DTS mapeia os dados da seguinte forma:
Tabela A1 (Banco de Dados 1) → Tabela A (destino)
Tabela A2 (Banco de Dados 2) → Tabela A (destino)
Se a Tabela A1 tiver 100 registros e a Tabela A2 tiver 200 registros, a Tabela A no banco de dados de destino deverá conter 300 registros após a mesclagem.
Por que as operações DDL online causam perda de dados
As operações DDL online funcionam criando uma tabela temporária, aplicando alterações de esquema nela e, em seguida, usando RENAME TABLE para substituir a tabela original pela temporária. A sequência de operações é:
-
Crie uma tabela temporária:
CREATE TABLE tmp_table_table LIKE table_name -
Altere o esquema da tabela temporária:
ALTER TABLE tmp_table_table XXXX -
Copie os dados históricos para a tabela temporária:
INSERT IGNORE INTO tmp_table_table (SELECT %s FROM table_name FORCE INDEX (%s) WHERE xxx -
Sincronize os dados incrementais via logs binários:
UPDATA/INSERT/DELETE tmp_table_name -
Redirecione as cargas de trabalho para a tabela temporária:
RENAME TABLE table_name to old_tmp_table_table, tmp_table_name to table_name
Após a conclusão dessas operações, os dados da Tabela A1 do Banco de Dados 1 sobrescrevem os dados da Tabela A no banco de dados de destino. Com isso, os dados da Tabela A2 do Banco de Dados 2 são perdidos.
Para obter mais informações sobre operações DDL online, consulte
Perform lock-free DDL operations
.
Solução
Para evitar a perda de dados, adote uma das seguintes abordagens:
|
Abordagem |
Descrição |
|
Exclua DDL online da tarefa |
Ao configure a tarefa de sincronização de dados, não selecione a opção de sincronizar operações DDL online. |
|
Evitar DDL online nos bancos de dados de source |
Não execute operações DDL online em nenhum banco de dados de source enquanto a tarefa de mesclagem de tabelas estiver em andamento. |