O Data Transmission Service (DTS) permite sincronizar dados continuamente de um cluster PolarDB for MySQL para um banco de dados Doris autogerenciado, ideal para análises em grande escala. Este tópico descreve a configuração usando um banco de dados Doris implantado em uma instância do Elastic Compute Service (ECS).
Pré-requisitos
Antes de começar, certifique-se de que possui:
Um banco de dados Doris de destino com espaço de armazenamento disponível maior que o espaço utilizado pelo cluster PolarDB for MySQL de origem
O log binário ativado no cluster PolarDB for MySQL de origem, com o parâmetro
loose_polar_log_bindefinido comoON. Consulte Enable binary logging e Modify parametersPeríodo de retenção do log binário de pelo menos três dias (sete dias recomendados)
Contas de banco de dados com as permissões necessárias (consulte Permissions required)
ative o log binário em um cluster PolarDB for MySQL gera cobranças de armazenamento para os arquivos de log binário.
Para as versões suportadas dos bancos de dados de origem e de destino, consulte Overview of data synchronization solutions.
Permissões necessárias
Banco de dados | Permissões necessárias | Referência |
Cluster PolarDB for MySQL de origem | Permissões de leitura e gravação nos objetos a serem sincronizados | |
Banco de dados Doris de destino | USAGE_PRIV e as seguintes: SELECT_PRIV, LOAD_PRIV, ALTER_PRIV, CREATE_PRIV, DROP_PRIV |
Faturamento
|
Tipo de sincronização |
Custo |
|
Sincronização de schema e sincronização completa de dados |
Gratuito |
|
Sincronização incremental de dados |
Pago. Consulte Billing overview |
Operações SQL suportadas para sincronização incremental
|
Tipo de operação |
Instruções |
|
DML (Data Manipulation Language) |
INSERT, UPDATE, DELETE |
|
DDL (Data Definition Language) |
ADD COLUMN, MODIFY COLUMN, CHANGE COLUMN, DROP COLUMN, DROP TABLE, TRUNCATE TABLE, RENAME TABLE |
A operação RENAME TABLE pode causar inconsistência de dados. Se você renomear uma tabela selecionada como objeto de sincronização, a sincronização de seus dados para o destino será interrompida. Para evitar isso, selecione o banco de dados inteiro como objeto de sincronização em vez de tabelas individuais e certifique-se de que a tabela original e a tabela renomeada pertençam a bancos de dados incluídos no escopo de sincronização.
Limitações
Banco de dados de origem
Tabelas com restrições PRIMARY KEY ou UNIQUE: todos os campos devem ser exclusivos, ou o destino poderá conter dados duplicados.
Tabelas sem restrições PRIMARY KEY ou UNIQUE: selecione Schema Synchronization para Synchronization Types e duplicate para Engine na etapa Configurations for Databases, Tables, and Columns.
Se você selecionar tabelas (e não bancos de dados) como objetos de sincronização e precisar renomear tabelas ou colunas no destino, cada tarefa suporta até 1.000 tabelas. Exceder esse limite gera um erro de solicitação. Configure várias tarefas ou sincronize o banco de dados inteiro.
-
Requisitos de log binário:
defina o parâmetro
loose_polar_log_bincomoONPeríodo de retenção: pelo menos três dias, sete dias recomendados
Não execute operações DDL que alterem os schemas de bancos de dados ou tabelas durante a sincronização inicial de schema ou a sincronização inicial completa de dados. O DTS consulta o banco de dados de origem durante a sincronização completa, gerando bloqueios de metadados que podem impedir operações DDL.
As alterações provenientes de operações não registradas em logs binários — como dados restaurados de backups físicos ou gerados por operações em cascata — não serão sincronizadas para o destino. Se isso ocorrer, remova e readicione o banco de dados ou tabela afetado dos objetos de sincronização, se o seu cenário de negócios permitir. Consulte Modify synchronization objects.
Limitações gerais
O DTS não sincroniza os nós de somente leitura do cluster PolarDB for MySQL de origem.
O DTS não sincroniza as tabelas externas do Object Storage Service (OSS) da origem.
Não há suporte para a troca entre primário e standby durante a sincronização inicial completa de dados. Se ocorrer uma troca, reconfigure a tarefa de sincronização.
-
Há suporte apenas para tabelas que usam o Unique Key Model ou Duplicate Key Model no Doris. Ao usar o Duplicate Key Model, o DTS converte instruções UPDATE e DELETE em instruções INSERT. Poderão surgir dados duplicados se ocorrer alguma das seguintes situações. Use as colunas adicionais
_is_deleted,_versione_record_idpara deduplicar, se necessário (consulte Additional columns added by DTS).Uma operação de retentativa é executada na instância de sincronização de dados
A instância é reiniciada
Duas ou mais operações DML são aplicadas à mesma linha após a inicialização da instância
Você pode especificar apenas o parâmetro
bucket_countna seção Selected Objects. O valor deve ser um número inteiro positivo. Padrão: auto.Não crie clusters no banco de dados Doris de destino durante a sincronização. Caso isso ocorra, a tarefa falhará. Reinicie a instância de sincronização de dados para retomar.
O Doris aceita apenas nomes de bancos de dados e tabelas iniciados com uma letra. Use o recurso de mapeamento de nomes de objetos para renomear qualquer objeto que comece com um caractere não alfabético.
Se o nome de um banco de dados, tabela ou coluna contiver caracteres chineses, use o mapeamento de nomes de objetos para renomeá-lo (por exemplo, para um nome em inglês). Caso contrário, a tarefa poderá falhar.
Não modifique operações DDL em várias colunas ao mesmo tempo, nem execute operações DDL consecutivas em uma mesma tabela.
Não adicione nós de backend (BE) ao banco de dados Doris de destino durante a sincronização. Caso isso ocorra, a tarefa falhará. Reinicie a instância de sincronização de dados para retomar.
Em cenários de mesclagem de várias tabelas (várias tabelas de origem sincronizadas com uma única tabela de destino), os schemas de todas as tabelas de origem devem ser idênticos. Caso contrário, poderá ocorrer inconsistência de dados ou falha na tarefa.
No PolarDB for MySQL,
VARCHAR(M)utiliza o comprimento em caracteres para M. No Doris,VARCHAR(N)utiliza o comprimento em bytes para N. Se não estiver usando a sincronização de schema, defina o comprimento do VARCHAR do Doris como quatro vezes o comprimento do VARCHAR correspondente do MySQL para evitar perda de dados.Ao usar o DMS ou gh-ost para executar alterações DDL online na origem, o DTS sincroniza apenas o DDL original para o destino. Não há suporte para alterações DDL online feitas com pt-online-schema-change, e elas podem causar perda de dados ou falha na sincronização.
Durante a sincronização inicial completa de dados, o DTS usa recursos de leitura e gravação de ambos os bancos de dados. Avalie o impacto no desempenho antecipadamente e agende a sincronização durante horários de baixa demanda, quando o uso da cpu em ambas as extremidades estiver abaixo de 30%.
Operações INSERT simultâneas durante a sincronização inicial completa de dados causam fragmentação nas tabelas do destino. Após a conclusão da sincronização completa, as tabelas de destino poderão ocupar mais armazenamento do que a origem.
Não use pt-online-schema-change ou ferramentas semelhantes para operações DDL online em objetos de sincronização durante a sincronização. Isso causa falhas na sincronização.
Se forem gravados dados no banco de dados de destino a partir de fontes diferentes do DTS durante a sincronização, poderá ocorrer inconsistência de dados entre a origem e o destino.
O DTS executa periodicamente
CREATE DATABASE IF NOT EXISTS \test\`` na origem para avançar a posição do log binário.Durante a sincronização incremental, o DTS usa uma estratégia em lote e grava em cada objeto de sincronização no máximo uma vez a cada cinco segundos. Isso pode gerar uma latência de sincronização esperada de menos de 10 segundos. Para reduzir a latência, atualize o parâmetro
selectdb.reservoir.timeout.milliseconds(intervalo: 1.000 a 10.000 milissegundos) no console do DTS. Intervalos de lote menores aumentam a frequência de gravação, o que pode elevar a carga e o tempo de resposta do destino.Se uma instância falhar, o suporte do DTS tentará a recuperação em até oito horas. Durante a recuperação, a instância poderá ser reiniciada ou ter seus parâmetros ajustados. O suporte modifica apenas os parâmetros da instância do DTS — os parâmetros do banco de dados permanecem inalterados.
Não há suporte para a sincronização de dados do tipo VECTOR.
Criar uma tarefa de sincronização de dados
Etapa 1: acesse a página de sincronização de dados
Use um dos seguintes métodos:
DTS console
Faça logon no console do DTS.console do DTS
No painel de navegação à esquerda, clique em Data Synchronization.
No canto superior esquerdo, selecione a região onde a tarefa de sincronização de dados está localizada.
DMS console
As etapas podem variar com base no modo e no layout do console do DMS. Consulte Simple mode e Customize the layout and style of the DMS console.
Faça logon no console do DMS.console do DMS
Na barra de navegação superior, passe o ponteiro do mouse sobre Data + AI e escolha DTS (DTS) > Data Synchronization.
Na lista suspensa ao lado de Data Synchronization Tasks, selecione a região onde a instância está localizada.
Etapa 2: configure os bancos de dados de origem e de destino
clique em Create Task.
configure o Task Name. O DTS gera um nome automaticamente. especifique um nome descritivo para facilitar a identificação da tarefa — o nome não precisa ser exclusivo.
configure as conexões dos bancos de dados de origem e de destino com os parâmetros abaixo.
Banco de dados de origem (PolarDB for MySQL)
|
Parâmetro |
Valor |
|
Select Existing Connection |
selecione uma instância registrada na lista para preencher automaticamente os campos a seguir, ou configure-os manualmente |
|
Database Type |
PolarDB for MySQL |
|
Access Method |
Alibaba Cloud Instance |
|
Instance Region |
A região onde o cluster PolarDB for MySQL de origem está localizado. |
|
Replicate Data Across Alibaba Cloud Accounts |
Não (este exemplo usa a conta atual) |
|
PolarDB Cluster ID |
O id do cluster PolarDB for MySQL de origem |
|
Database Account |
A conta do cluster de origem (consulte Permissions required) |
|
Database Password |
A senha da conta do banco de dados |
|
Encryption |
selecione conforme a necessidade. Para a configuração de SSL, consulte Configure SSL encryption |
Banco de dados de destino (Doris)
|
Parâmetro |
Valor |
|
Select Existing Connection |
selecione uma instância registrada na lista para preencher automaticamente os campos a seguir, ou configure-os manualmente |
|
Database Type |
Doris |
|
Access Method |
Self-managed Database on ECS (este exemplo). Para outros métodos de acesso, consulte Preparations |
|
Instance Region |
A região onde o banco de dados Doris de destino está localizado. |
|
ECS Instance ID |
O id da instância ECS que hospeda o banco de dados Doris. Se os nós BE ou frontend (FE) estiverem em instâncias ECS separadas, adicione os blocos CIDR dos servidores DTS às regras de segurança de cada instância |
|
Port Number |
A porta de service do banco de dados Doris de destino. Padrão: 9030 |
|
Database Account |
A conta do banco de dados de destino (consulte Permissions required) |
|
Database Password |
A senha da conta do banco de dados |
clique em Test Connectivity and Proceed. Na caixa de diálogo CIDR Blocks of DTS Servers, clique em Test Connectivity.
Certifique-se de que os blocos CIDR dos servidores DTS estejam adicionados às configurações de segurança dos bancos de dados de origem e de destino. Consulte Add DTS server IP addresses to a whitelist .
Etapa 3: selecione objetos de sincronização
Na etapa Configure Objects, configure os seguintes parâmetros:
Parâmetro | Descrição |
Synchronization Types | selecione Schema Synchronization, Full Data Synchronization e Incremental Data Synchronization. A sincronização completa estabelece os dados de linha de base antes que a sincronização incremental comece. Se você pular a sincronização de schema, crie as tabelas de destino usando o Unique Key Model ou Duplicate Key Model com antecedência. Consulte Data type mappings, Additional columns added by DTS e Unique Key Model |
Processing Mode of Conflicting Tables | Precheck and Report Errors: retorna um erro se existir uma tabela com o mesmo nome no destino. Ignore Errors and Proceed: ignora a verificação. Se os schemas das tabelas forem diferentes, a inicialização de dados poderá falhar ou haverá sincronização apenas de colunas parciais. Se os schemas forem iguais, os dados de origem substituirão os registros de destino com chaves primárias ou exclusivas correspondentes |
Capitalization of Object Names in Destination Instance | O valor padrão é DTS default policy. Ajuste conforme necessário. Consulte Specify the capitalization of object names |
Source Objects | selecione bancos de dados ou tabelas a serem sincronizados, e clique no ícone de seta para a direita para adicioná-los aos Selected Objects |
Selected Objects | Clique com o botão direito em um objeto para renomeá-lo, filtrar dados com condições WHERE ou selecionar operações SQL específicas. Se a sincronização de schema estiver ativada, clique com o botão direito em uma tabela e configure |
clique em Next: Advanced Settings e configure o seguinte:
|
Parâmetro |
Descrição |
|
Dedicated Cluster for Task Scheduling |
Por padrão, o DTS usa o cluster compartilhado. Para maior estabilidade, adquira um cluster dedicado. Consulte What is a DTS dedicated cluster |
|
Retry Time for Failed Connections |
Por quanto tempo o DTS tenta reconectar após uma falha de conexão. Intervalo: 10 a 1.440 minutos. Padrão: 720. defina como pelo menos 30. Se a reconexão for bem-sucedida dentro dessa janela, a sincronização será retomada; caso contrário, a tarefa falhará. Aplica-se o valor mais curto entre as tarefas que compartilham a mesma origem ou destino. |
|
Retry Time for Other Issues |
Por quanto tempo o DTS tenta executar novamente após falhas de DDL ou DML. Intervalo: 1 a 1.440 minutos. Padrão: 10. defina como pelo menos 10. Deve ser menor que Retry Time for Failed Connections |
|
Enable Throttling for Full Data Synchronization |
Limite a sincronização completa definindo o QPS (consultas por segundo) para a origem, RPS (linhas por segundo) da migração completa e a velocidade de migração de dados. Disponível apenas quando Full Data Synchronization estiver selecionada |
|
Enable Throttling for Incremental Data Synchronization |
Limite a sincronização incremental definindo o RPS e a velocidade de sincronização de dados |
|
Whether to delete SQL operations on heartbeat tables of forward and reverse tasks |
Yesconfigurações de notificação de alerta: não grava as operações SQL de heartbeat na origem (a latência pode ser exibida). No: grava as operações SQL de heartbeat (pode afetar o backup físico e a clonagem da origem) |
|
Environment Tag |
Opcional. Adicione uma tag à instância para identificação do ambiente |
|
Configure ETL |
ative a extração, transformação e carga (ETL) para aplicar transformações de dados. Consulte What is ETL? e Configure ETL |
|
Monitoring and Alerting |
configure alertas para falhas de tarefa ou latência que exceda um limiar. Consulte Configure monitoring and alerting |
(Opcional) clique em Next: Configure Database and Table Fields. especifique Primary Key Column, Distribution Key e Engine para cada tabela.
Esta etapa está disponível apenas quando Schema Synchronization estiver selecionada. defina Definition Status como All para visualize todas as tabelas.
Primary Key Column suporta várias colunas. Distribution Key deve ser um subconjunto das colunas de chave primária.
Para tabelas sem chaves primárias ou restrições UNIQUE, selecione duplicate para Engine . Caso contrário, a tarefa poderá falhar ou poderá ocorrer perda de dados.
Etapa 4: execute a pré-verificação
clique em Next: Save Task Settings and Precheck.
O DTS executa uma pré-verificação antes de iniciar a tarefa. A tarefa só começa após a aprovação em todas as verificações.
Se alguma verificação falhar, clique em View Details para ver a causa, corrija o problema e execute a pré-verificação novamente.
Se um aviso aparecer: corrija o problema e execute novamente se o item não puder ser ignorado; clique em Confirm Alert Details > Ignore > OK > Precheck Again se o item puder ser ignorado com segurança. Ignorar alertas pode causar inconsistência de dados.
Para visualize os parâmetros do OpenAPI para esta configuração de tarefa, passe o ponteiro do mouse sobre Next: Save Task Settings and Precheck e clique em Preview OpenAPI parameters.
Etapa 5: Adquirir uma instância
Aguarde até que Success Rate atinja 100% e clique em Next: Purchase Instance.
Na página de compra, configure o seguinte:
|
Parâmetro |
Descrição |
|
Billing Method |
Subscription: pagamento antecipado por um prazo fixo, mais econômico para uso a longo prazo. Pay-as-you-go: cobrança por hora, adequado para uso de curto prazo. exclua a instância quando não for mais necessária para interromper as cobranças |
|
Resource Group Settings |
O grupo de recursos para a instância. Padrão: default resource group. Consulte What is Resource Management? |
|
Instance Class |
selecione com base em seus requisitos de throughput. Consulte Instance classes of data synchronization instances |
|
Subscription Duration |
Disponível para faturamento por assinatura. Opções: 1 a 9 meses, 1, 2, 3 ou 5 anos |
Leia e selecione Data Transmission Service (Pay-as-you-go) Service Terms.
clique em Buy and Start e, em seguida, clique em OK na caixa de diálogo.
A tarefa aparece na lista de tarefas. Monitore seu progresso por lá.
Mapeamentos de tipos de dados
A tabela a seguir mostra o mapeamento dos tipos de dados do PolarDB for MySQL para os tipos de dados do Doris.
Categoria | PolarDB for MySQL | Doris |
Numérico | TINYINT | TINYINT |
TINYINT UNSIGNED | SMALLINT | |
SMALLINT | SMALLINT | |
SMALLINT UNSIGNED | INT | |
MEDIUMINT | INT | |
MEDIUMINT UNSIGNED | BIGINT | |
INT | INT | |
INT UNSIGNED | BIGINT | |
BIGINT | BIGINT | |
BIGINT UNSIGNED | LARGEINT | |
BIT(M) | INT | |
Decimal | Decimal | Decimal (ZEROFILL não suportado) |
Numeric | Decimal | |
Float | Float | |
Double | DOUBLE | |
BOOL / BOOLEAN | BOOLEAN | |
Data e hora | DATE | DATEV2 |
DATETIME[(fsp)] | DATETIMEV2 | |
Timestamp[(fsp)] | DATETIMEV2 | |
Time[(fsp)] | VARCHAR | |
YEAR[(4)] | INT | |
String | CHAR / VARCHAR | VARCHAR |
BINARY / VARBINARY | STRING | |
TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT | STRING | |
TINYBLOB / BLOB / MEDIUMBLOB / LONGBLOB | STRING | |
ENUM | STRING | |
SET | STRING | |
JSON | STRING |
Notas de conversão de CHAR e VARCHAR:
O DTS converte os valores CHAR e VARCHAR(n) para
VARCHAR(4*n)para evitar perda de dados. Isso compensa a diferença na forma como o PolarDB for MySQL (comprimento em caracteres) e o Doris (comprimento em bytes) definem o tamanho do VARCHAR.Se nenhum comprimento for especificado, o padrão é
VARCHAR(65533).O DTS converte valores que excedem 65.533 caracteres para o tipo STRING.
Se não estiver usando a sincronização de schema, defina o comprimento do VARCHAR do Doris como quatro vezes o comprimento do VARCHAR correspondente do MySQL.
Colunas adicionais adicionadas pelo DTS
Ao sincronizar dados com uma tabela usando o Duplicate Key Model, o DTS adiciona automaticamente as seguintes colunas à tabela de destino:
|
Coluna |
Tipo de dados |
Padrão |
Descrição |
|
|
Int |
0 |
Sinalizador de exclusão: 0 para operações INSERT e UPDATE, 1 para operações DELETE |
|
|
Bigint |
0 |
0 durante a sincronização completa; o timestamp do log binário correspondente (em segundos) durante a sincronização incremental |
|
|
Bigint |
0 |
0 durante a sincronização completa; o ID de registro exclusivo e incremental do log incremental durante a sincronização incremental |
Use essas colunas para deduplicar dados quando a tabela de destino usar o Duplicate Key Model.