Você pode usar o Data Transmission service (DTS) para migrar dados do MongoDB para o MySQL. Este tópico usa o ApsaraDB for MongoDB (arquitetura ReplicaSet) como origem e uma instância do RDS for MySQL como destino.
Pré-requisitos
Se o banco de dados de origem for o ApsaraDB for MongoDB com arquitetura de cluster fragmentado (sharded cluster), solicite um endereço de conexão para todos os nós de shard e garanta que a conta e a senha sejam idênticas em todos os shards. Para mais informações, consulte Apply for a shard connection address.
-
Recomendamos que você crie uma instância do RDS for MySQL com espaço de armazenamento maior que o espaço utilizado pela instância de origem do ApsaraDB for MongoDB. Para mais informações, consulte crie uma instância do RDS for MySQL.
NotaAloque pelo menos 10% a mais de espaço de armazenamento para a instância de destino em relação ao uso do banco de dados de origem.
-
Recomendamos que você crie um banco de dados e tabelas com chaves primárias na instância de destino do RDS for MySQL para receber os dados migrados. Para mais informações, consulte gerencie bancos de dados.
ImportanteCertifique-se de que os tipos de dados das tabelas de destino sejam compatíveis com os dados da instância de origem do MongoDB. Por exemplo, se o campo
_idno MongoDB for do tipo ObjectId, a coluna correspondente na instância do RDS for MySQL deve ser do tipo varchar.Os nomes das colunas na tabela de destino da instância do RDS for MySQL não podem ser _id nem _value.
Considerações
Tipo | Descrição |
Limitações do banco de dados de origem |
|
Outras limitações |
|
Faturamento
Tipo de migração | Taxa de configuração da tarefa | Taxa de transferência de dados |
Migração completa de dados | Grátis. | Este tutorial é gratuito. No entanto, uma data transfer fee se aplica se o Access Method do banco de dados de destino for Public IP Address. |
Migração incremental de dados | Há cobrança de taxas. Para mais detalhes, consulte billing overview. |
Tipos de migração
|
Tipo de migração |
Descrição |
|
Migração completa |
Migra todos os dados históricos dos objetos selecionados da instância de origem do ApsaraDB for MongoDB para a instância de destino do RDS for MySQL. |
|
Migração incremental |
Após a migração completa, migra as atualizações incrementais da instância de origem do ApsaraDB for MongoDB para a instância de destino do RDS for MySQL. Nota
|
Permissões de conta do banco de dados
|
Banco de dados |
Migração completa |
Migração incremental |
Método de criação e autorização de conta |
|
ApsaraDB for MongoDB de origem |
Permissão de leitura no banco de dados a ser migrado. |
Permissão de leitura no banco de dados a ser migrado, no banco de dados admin e no banco de dados local. |
|
|
Instância de destino do RDS for MySQL |
Permissão de leitura e gravação no banco de dados de destino. |
||
Se você usar o ChangeStream como método de migração incremental, a conta do banco de dados de origem requer permissões de leitura de Change Streams em toda a instância (como readAnyDatabase). Se a origem for uma instância do ApsaraDB for MongoDB com uma conta personalizada, você também deve conceder à conta permissão de leitura no banco de dados admin. Para mais detalhes, consulte Permissions of the root account specified during instance creation.
Procedimento
-
acesse a página da lista de tarefas de migração para a região de destino usando um dos seguintes métodos.
No console do DTS
Faça login no console do Data Transmission service (DTS).
No painel de navegação à esquerda, clique em Data Migration.
No canto superior esquerdo da página, selecione a região da instância de migração.
No console do DMS
NotaAs operações reais podem variar dependendo do modo e do layout do console do DMS. Para mais informações, consulte Simple mode console e Customize the layout and style of the DMS console.
Faça login no console do Data Management (DMS).
Na barra de menu superior, escolha .
À direita de Data Migration Tasks, selecione a região da instância de migração.
Clique em Create Task para acessar a página de configuração da tarefa.
-
Configure os bancos de dados de origem e de destino.
Categoria
Configuração
Descrição
Nenhuma
Task Name
O DTS gera automaticamente um nome para a tarefa. Recomendamos que você especifique um nome descritivo para facilitar a identificação. O nome não precisa ser único.
Source Database
Select Existing Connection
Para usar uma instância de banco de dados que foi added to the system (criada ou salva), selecione a instância desejada na lista suspensa. As informações do banco de dados abaixo são configuradas automaticamente.
NotaNo console do DMS, este parâmetro se chama Select a DMS database instance..
Se você não registrou a instância de banco de dados no sistema ou não precisa usar uma instância registrada, configure manualmente as informações do banco de dados abaixo.
Database Type
Selecione MongoDB.
Access Method
Selecione Alibaba Cloud Instance.
Instance Region
Selecione a região da instância de origem do ApsaraDB for MongoDB.
Replicate Data Across Alibaba Cloud Accounts
Neste exemplo, usamos uma instância de banco de dados na conta atual do Alibaba Cloud. Selecione No.
Architecture
Neste exemplo, selecione Replica Set.
NotaSe a sua instância de origem do ApsaraDB for MongoDB usar Sharded Cluster, você também deve inserir a Shard account e a Shard password.
Migration Method
Selecione um método para migração incremental de dados com base nos seus requisitos.
-
Oplog (Recomendado):
Esta opção está disponível se o oplog estiver ativado para o banco de dados de origem.
NotaUm oplog é ativado por padrão tanto para bancos de dados MongoDB autogerenciados quanto para instâncias do ApsaraDB for MongoDB. Este método oferece menor latência para migração incremental de dados devido à extração de logs mais rápida. Portanto, recomendamos selecionar Oplog.
-
ChangeStream: Esta opção está disponível se os Change Streams estiverem ativados para o banco de dados de origem.
Nota-
Se o banco de dados de origem for uma instância do Amazon DocumentDB (cluster não elástico), você só pode selecionar ChangeStream.
-
Se você definir a Architecture como Sharded Cluster para o banco de dados de origem, não é necessário inserir uma Shard account ou Shard password.
-
Instance ID
Selecione o ID da instância de origem do ApsaraDB for MongoDB.
Authentication Database
insira o nome do banco de dados ao qual pertence a conta do banco de dados de origem do ApsaraDB for MongoDB. Se você não o alterou, o valor padrão é admin.
Database Account
insira a conta do banco de dados para a instância de origem do ApsaraDB for MongoDB. Para requisitos de permissão, consulte Database account permissions.
Database Password
insira a senha correspondente à conta do banco de dados.
Encryption
O DTS aceita três métodos de conexão: Non-encrypted, SSL-encrypted e Mongo Atlas SSL. As opções de Encryption variam com base no Access Method e na Architecture selecionados. As opções exibidas no console prevalecem.
Nota-
Um banco de dados MongoDB onde a Architecture é Sharded Cluster e o Migration Method é Oplog não aceita SSL-encrypted.
-
Se a origem for um banco de dados MongoDB autogerenciado (o Access Method não é Alibaba Cloud Instance) com arquitetura Replica Set e você selecionar SSL-encrypted, o DTS também permite o upload de um certificado CA para verifique a conexão.
Destination Database
Select Existing Connection
Para usar uma instância de banco de dados que foi added to the system (criada ou salva), selecione a instância desejada na lista suspensa. As informações do banco de dados abaixo são configuradas automaticamente.
NotaNo console do DMS, este parâmetro se chama Select a DMS database instance..
Se você não registrou a instância de banco de dados no sistema ou não precisa usar uma instância registrada, configure manualmente as informações do banco de dados abaixo.
Database Type
Selecione MySQL.
Access Method
Selecione Alibaba Cloud Instance.
Instance Region
Selecione a região da instância de destino do RDS for MySQL.
Replicate Data Across Alibaba Cloud Accounts
Neste exemplo, usamos uma instância de banco de dados na conta atual do Alibaba Cloud. Selecione No.
RDS Instance ID
Selecione o ID da instância de destino do RDS for MySQL.
Database Account
insira a conta do banco de dados para a instância de destino do RDS for MySQL. Para requisitos de permissão, consulte Database account permissions.
Database Password
insira a senha da conta do banco de dados.
Encryption
Selecione Non-encrypted ou SSL-encrypted com base nos requisitos do seu banco de dados. Se você definir este parâmetro como SSL-encrypted, deverá ativar a criptografia SSL para a instância do RDS for MySQL antes. Para mais informações, consulte Quickly enable SSL encryption using a cloud certificate.
-
Após concluir a configuração, clique em Test Connectivity and Proceed na parte inferior da página.
NotaCertifique-se de que o segmento de endereços IP do service do DTS seja adicionado automática ou manualmente às configurações de segurança dos bancos de dados de origem e de destino para permitir o acesso a partir dos servidores do DTS. Para mais informações, consulte Add DTS server IP addresses to a whitelist.
Se o banco de dados de origem ou de destino for um banco de dados autogerenciado (o Access Method não é Alibaba Cloud Instance), você também deve clicar em Test Connectivity na caixa de diálogo CIDR Blocks of DTS Servers que aparece.
-
Configure os objetos da tarefa.
-
Na página Configure Objects, configure os objetos que você deseja migrar.
Configuração
Descrição
Migration Types
Se você precisar executar apenas uma migração completa, selecione Full Data Migration.
Para executar uma migração sem tempo de inatividade, selecione Full Data Migration e Incremental Data Migration.
NotaSe você não selecionar Incremental Data Migration, não grave novos dados na instância de origem durante a migração de dados para garantir a consistência dos dados.
Processing Mode of Conflicting Tables
Precheck and Report Errors: Verifica se existem coleções com os mesmos nomes no banco de dados de destino. Se não existirem coleções com os mesmos nomes, a pré-verificação é concluída com êxito. Se existirem, o sistema relata um erro durante a pré-verificação e a tarefa de migração de dados não é iniciada.
NotaSe uma coleção no banco de dados de destino tiver o mesmo nome, mas não puder ser facilmente excluída ou renomeada, você pode alterar o nome da coleção no banco de dados de destino. Para mais informações, consulte Object name mapping.
Ignore Errors and Proceed: Ignora a verificação de coleções com os mesmos nomes.
AvisoSelecionar Ignore Errors and Proceed pode causar inconsistência de dados e riscos aos negócios. Por exemplo:
Se um registro no banco de dados de destino tiver o mesmo valor de chave primária que um registro no banco de dados de origem, o registro no banco de dados de destino é mantido. O registro do banco de dados de origem não é migrado para o banco de dados de destino.
A inicialização de dados pode falhar, apenas alguns dados podem ser migrados ou a migração pode falhar.
Capitalization of Object Names in Destination Instance
Você pode configurar a política de sensibilidade a maiúsculas e minúsculas para os nomes dos objetos migrados, como bancos de dados e coleções, na instância de destino. Por padrão, a DTS default policy é selecionada. Você também pode optar por manter a sensibilidade a maiúsculas e minúsculas consistente com a política padrão do banco de dados de origem ou de destino. Para mais informações, consulte Case sensitivity of object names in the destination database.
Source Objects
Na caixa Source Objects, clique em objetos a serem migrados e, em seguida, clique em
para movê-los para a caixa Selected Objects.NotaA granularidade para selecionar objetos de migração é a coleção.
Selected Objects
-
edite o mapeamento de nomes de banco de dados.
-
Clique com o botão direito no banco de dados que contém as coleções a serem migradas na caixa Selected Objects.
-
Altere o Schema Name para o nome do banco de dados na instância de destino do RDS for MySQL que receberá os dados. Na caixa de diálogo edite Schema que aparece, altere o Schema Name (por exemplo, para
dtsdb). Após a edição, o nome do schema no banco de dados de destino passa a ser o novo nome. -
Clique em OK.
-
-
edite o mapeamento de nomes de tabela.
-
Clique com o botão direito na coleção a ser migrada na caixa Selected Objects.
O painel exibe os objetos selecionados em uma estrutura de árvore: banco de dados (por exemplo, dtsdb) > tipo de objeto (por exemplo, Table) > nome do objeto (por exemplo, class).
-
Altere o Table Name para o nome da tabela na instância de destino do RDS for MySQL que receberá os dados. No painel edite Table que aparece, altere o Table Name (por exemplo, para
class). Após editar o nome da tabela ou da coluna, os nomes da tabela e da coluna no banco de dados de destino passam a ser os novos nomes. -
Opcional: Defina condições de filtro para a migração completa. Para instruções, consulte Filter task data with an SQL condition. Na seção Filter Conditions, para o ApsaraDB for MongoDB, a sintaxe aceita difere das cláusulas WHERE padrão do SQL. Por exemplo, para filtrar por ID de usuário:
{"_id": {$gt:"user100844658590795**",$lte:"user101674868045948**"}}, onde$gtsignifica maior que e$ltesignifica menor ou igual a. -
Opcional: Na seção Select DDL and DML Operations to Be Synchronized, selecione as operações de migração incremental a serem sincronizadas. Marque as operações DML a serem sincronizadas: insira, atualize, exclua.
-
-
Configure os campos (Field) a serem migrados do MongoDB.
O DTS mapeia os dados das coleções a serem migradas por padrão e configura expressões na coluna Parameter Value. Verifique se as expressões atendem aos seus requisitos e configure o Column Name, o Type, o Length e a Precision.
Importante-
A coluna de chave primária da tabela de destino deve receber o valor
bson_value("_id"). -
Ao configurar a expressão
bson_value(), especifique o caminho para o menor subcampo. Caso contrário, pode ocorrer perda de dados ou falha na tarefa.
-
Na expressão
bson_value()na coluna Parameter Value, visualize o nome do campo no MongoDB para essa linha.O nome do campo no MongoDB está dentro de
"". Por exemplo, se a expressão forbson_value("age"), o campo correspondente no MongoDB éage. -
Opcional: Exclua campos que não precisam ser migrados.
NotaPara campos que não requerem migração, você pode clicar no ícone
após a linha de dados. -
Configure os campos a serem migrados.
Dependendo se a expressão
bson_value()atende ou não aos seus requisitos, proceda da seguinte forma.Campos com expressões adequadas
-
insira o Column Name.
Notainsira o nome da coluna na tabela da instância de destino do RDS for MySQL que receberá os dados.
-
Selecione o Type para os dados da coluna.
ImportanteCertifique-se de que o tipo de dados na tabela de destino seja compatível com os dados na instância de origem do MongoDB. Para mapeamentos de tipos de dados, consulte Data type mapping.
-
Opcional: Configure o Length e a Precision para os dados da coluna.
-
Repita as etapas acima para mapear todos os campos relevantes.
Campos com expressões inadequadas
NotaPor exemplo, campos com estruturas hierárquicas (pai-filho).
-
Na coluna Operation, clique em
ao lado da linha. -
Clique em + Add Column.
-
Configure o Column Name, o Type, o Length e a Precision.
-
Na caixa de texto abaixo de Parameter Value, insira a expressão
bson_value(). Para mais detalhes, consulte Value configuration examples. -
Repita as etapas acima para mapear todos os campos relevantes.
-
-
-
Clique em OK.
-
Clique em Next: Advanced Settings para configurar parâmetros avançados.
Configuração
Descrição
Dedicated Cluster for Task Scheduling
Por padrão, o DTS agenda tarefas em um cluster compartilhado. Você não precisa selecionar um. Se desejar tarefas mais estáveis, você pode adquirir um dedicated cluster para executar tarefas de migração do DTS.
Retry Time for Failed Connections
Após o início da tarefa de migração, se a conexão com o banco de dados de origem ou de destino falhar, o DTS relata um erro e começa imediatamente a tentar reconectar. O tempo padrão de nova tentativa é de 720 minutos. Você pode personalizar o tempo de nova tentativa para um valor de 10 a 1440 minutos. Recomendamos definir o tempo como superior a 30 minutos. Se o DTS reconectar aos bancos de dados de origem e de destino dentro da duração especificada, a tarefa de migração é retomada automaticamente. Caso contrário, a tarefa falha.
NotaPara várias instâncias do DTS que compartilham a mesma origem ou destino, o tempo de nova tentativa de rede é determinado pela configuração da última tarefa criada.
Como a tarefa é cobrada durante o período de nova tentativa de conexão, recomendamos personalizar o tempo de nova tentativa com base nas suas necessidades de negócios ou liberar a instância do DTS o mais rápido possível após a liberação das instâncias de banco de dados de origem e de destino.
Retry Time for Other Issues
Após o início da tarefa de migração, se ocorrer um problema que não seja de conectividade, como uma exceção de execução de DDL ou DML, no banco de dados de origem ou de destino, o DTS relata um erro e começa imediatamente a tentar repetir a operação. O tempo padrão de nova tentativa é de 10 minutos. Você pode personalizar o tempo de nova tentativa para um valor de 1 a 1440 minutos. Recomendamos definir o tempo como superior a 10 minutos. Se as operações relacionadas forem bem-sucedidas dentro da duração de nova tentativa especificada, a tarefa de migração é retomada automaticamente. Caso contrário, a tarefa falha.
ImportanteO valor de Retry Time for Other Issues deve ser menor que o valor de Retry Time for Failed Connections.
Enable Throttling for Full Data Migration
Durante a migração completa, o DTS consome recursos de leitura e gravação nos bancos de dados de origem e de destino, o que pode aumentar a carga dos bancos de dados. Se necessário, você pode ativar o limitador de velocidade para a tarefa de migração completa. Você pode definir Queries per second (QPS) to the source database, RPS of Full Data Migration e Data migration speed for full migration (MB/s) para reduzir a carga no banco de dados de destino.
NotaEste item de configuração está disponível apenas se você selecionar Full Data Migration para Migration Types.
Você também pode adjust the full migration speed após a instância de migração estar em execução.
Only one data type for primary key _id in a table of the data to be synchronized
Especifica se o tipo de dados da chave primária
_idé único dentro da mesma coleção para os dados a serem migrados.Importante-
Selecione uma opção com base nos seus requisitos. Caso contrário, pode ocorrer perda de dados.
-
Este parâmetro está disponível apenas se você selecionar Full Data Migration para Migration Types.
-
Yes: O tipo de dados é único. Durante a migração completa de dados, o DTS não verifica os tipos de dados das chaves primárias nos dados de origem. Para uma única coleção, o DTS migra apenas os dados correspondentes a um tipo de dados de chave primária.
-
No: O tipo de dados não é único. Durante a migração completa de dados, o DTS verifica os tipos de dados das chaves primárias nos dados de origem e migra todos os dados.
Enable Throttling for Incremental Data Migration
Se necessário, você também pode optar por definir limites de velocidade para a tarefa de migração incremental. Você pode definir RPS of Incremental Data Migration e Data migration speed for incremental migration (MB/s) para reduzir a carga no banco de dados de destino.
NotaEste item de configuração está disponível apenas se você selecionar Incremental Data Migration para Migration Types.
Você também pode adjust the incremental migration speed após a instância de migração estar em execução.
Environment Tag
Selecione um rótulo de ambiente para identificar a instância. Nenhuma seleção é necessária para este exemplo.
Configure ETL
escolha se deseja ativar o recurso de extração, transformação e carga (ETL). Para mais informações, consulte What is ETL? Valores válidos:
-
Yes: Ativa o recurso ETL. insira instruções de processamento de dados no editor de código. Para mais informações, consulte Configure ETL in a data migration or data synchronization task.
-
No: Desativa o recurso ETL.
Monitoring and Alerting
Defina se deseja configurar alertas e receber notificações de alerta com base nas suas necessidades de negócios.
No: Não define alertas.
Yes: Configure alertas definindo uma alert threshold e um alert notifications. Se uma migração falhar ou a latência exceder o limiar, o sistema envia uma notificação de alerta.
-
-
salve a tarefa e execute uma pré-verificação.
visualize os parâmetros de configuração desta instância ao chamar a operação de API, mova o ponteiro sobre o botão Next: Save Task Settings and Precheck e clique em Preview OpenAPI parameters na dica exibida.
Se você não precisar visualizar ou já terminou de visualizar os parâmetros da API, clique em Next: Save Task Settings and Precheck na parte inferior da página.
NotaAntes do início da tarefa de migração, o DTS executa uma pré-verificação. A tarefa só inicia após a aprovação na pré-verificação.
Se a pré-verificação falhar, clique em View Details ao lado do item de verificação com falha, corrija o problema com base nas instruções e execute a pré-verificação novamente.
-
Se a pré-verificação gerar um aviso:
Para itens de verificação que não podem ser ignorados, clique em View Details ao lado do item com falha, corrija o problema com base nas instruções e execute a pré-verificação novamente.
Para itens de verificação que podem ser ignorados, você pode clicar em Confirm Alert Details, Ignore, OK e Precheck Again para ignorar o item de alerta e executar a pré-verificação novamente. Se você optar por ignorar um aviso, isso pode causar problemas como inconsistência de dados e representar riscos aos seus negócios.
-
Adquira a instância.
Quando a Success Rate for de 100%, clique em Next: Purchase Instance.
-
Na página Purchase, selecione a especificação do link para a instância de migração de dados. Para mais informações, consulte a tabela a seguir.
Categoria
Parâmetro
Descrição
New Instance Class
Resource Group Settings
Selecione o grupo de recursos ao qual a instância pertence. O valor padrão é o grupo de recursos padrão. Para mais informações, consulte What is resource management?
Instance Class
O DTS fornece especificações de migração com diferentes níveis de desempenho. A especificação do link afeta a velocidade da migração. Você pode selecionar uma especificação com base no seu cenário de negócios. Para mais informações, consulte Data migration link specifications.
Após concluir a configuração, leia e selecione Data Transmission Service (Pay-as-you-go) Service Terms.
-
Clique em Buy and Start. Na caixa de diálogo OK que aparece, clique em OK.
Você pode visualizar o progresso da tarefa de migração na página de lista Data Migration Tasks.
NotaSe a tarefa de migração não incluir migração incremental, ela é interrompida automaticamente após a conclusão da migração completa. Após a interrupção da tarefa, seu Status muda para Completed.
Se a tarefa de migração incluir migração incremental, ela não é interrompida automaticamente. A tarefa de migração incremental continua em execução. Enquanto a tarefa de migração incremental estiver em execução, o Status da tarefa é Running.
Mapeamento de tipos de dados
|
Tipo de dados do MongoDB |
Tipo de dados do MySQL |
|
ObjectId |
VARCHAR |
|
String |
VARCHAR |
|
Document |
VARCHAR |
|
DbPointer |
VARCHAR |
|
Array |
VARCHAR |
|
Date |
DATETIME |
|
TimeStamp |
DATETIME |
|
Double |
DOUBLE |
|
32-bit integer (BsonInt32) |
INTEGER |
|
64-bit integer (BsonInt64) |
BIGINT |
|
Decimal128 |
DECIMAL |
|
Boolean |
BOOLEAN |
|
Null |
VARCHAR |
Exemplos de configuração de valores
Estrutura de dados do MongoDB de origem
{
"_id":"62cd344c85c1ea6a2a9f****",
"person":{
"name":"neo",
"age":26,
"sex":"male"
}
}
Estrutura da tabela MySQL de destino
|
Nome da coluna |
Tipo |
|
mongo_id |
varchar Nota
Coluna de chave primária. |
|
person_name |
varchar |
|
person_age |
decimal |
Configuração de nova coluna
Você deve especificar o caminho hierárquico completo na expressão bson_value() para evitar perda de dados ou falha na tarefa. Por exemplo, se você definir a expressão como bson_value("person"), o DTS não conseguirá sincronizar dados incrementais dos subcampos do objeto person (como name, age e sex) para o destino.
|
Nome da coluna |
Tipo |
Atribuição |
|
mongo_id |
STRING |
bson_value("_id") |
|
person_name |
STRING |
bson_value("person","name") |
|
person_age |
DECIMAL |
bson_value("person","age") |