Migração de dados de MySQL para SQL Server

Migrate · · 4 min de leitura

Vai levar tabelas do MySQL para o SQL Server? O dbSlice copia os dados por um app Windows ou pela linha de comando, mantém o SQL Server sincronizado enquanto o MySQL ainda está no ar e compara os dois lados chave a chave antes da troca.

Migrar de MySQL para SQL Server: o que muda no destino

Se a tabela não existe no SQL Server, o dbSlice para e mostra um CREATE TABLE traduzido para o SQL Server, para o seu DBA revisar e rodar. Por padrão, ele não cria nada nos seus bancos. Estes são os detalhes do MySQL para planejar:

  • Colunas JSON. O MySQL guarda JSON num tipo binário próprio. No SQL Server ele chega como texto em NVARCHAR(MAX); leia com JSON_VALUE e OPENJSON, e acrescente uma constraint ISJSON se quiser validá-lo.
  • Campos de bits BIT(n). BIT(1) vira BIT no SQL Server. Um BIT(8) ou BIT(64) mais largo é um campo de bits, não uma flag. Converta num SELECT (CAST(flags AS UNSIGNED)) e guarde como inteiro.
  • TIMESTAMP x DATETIME. Os valores TIMESTAMP do MySQL são guardados em UTC e mostrados no fuso da sessão; então eles chegam nesse fuso. Os dois tipos viram DATETIME2. Defina o fuso da conexão que você quer antes da primeira carga e mantenha o mesmo em todas as execuções.
  • Inteiros sem sinal. O SQL Server não tem tipos sem sinal; por isso, o dbSlice lê o tipo declarado e sugere um maior, em que o maior valor caiba: SMALLINT UNSIGNED → INT, INT UNSIGNED e MEDIUMINT UNSIGNED → BIGINT, BIGINT UNSIGNED → DECIMAL(20,0).
  • Datas zeradas. Dados antigos do MySQL podem ter 0000-00-00, que o SQL Server rejeita. O dbSlice lê uma data zerada como NULL, sem mudar nada no MySQL; por isso, a coluna de destino precisa aceitar NULL.
  • Collation e emoji. As tabelas do MySQL 8 costumam usar utf8mb4 com uma collation que não diferencia maiúsculas nem acentos. O texto vira NVARCHAR, que guarda emoji e qualquer caractere Unicode. Escolha uma collation do SQL Server com o mesmo comportamento para maiúsculas e acentos, ou chaves únicas que diferem só no acento vão colidir.
  • ENUM, SET e YEAR. São sugeridos como NVARCHAR(MAX). Dê um tamanho a eles e acrescente uma constraint CHECK com os valores permitidos; YEAR fica melhor como SMALLINT.
  • Ids AUTO_INCREMENT. O SQL Server só aceita ids explícitos com Keep identity, que exige permissão de ALTER e é confirmado na tela. Sem essa opção, ids novos são gerados; então não use o id como chave da sincronia.
  • O Upsert roda como MERGE e as cargas em massa usam SqlBulkCopy, com triggers e constraints verificados.
Aba Synchronize do dbSlice

Como o dbSlice controla a carga

  • Lê o MySQL em lotes pequenos, para o banco em uso continuar atendendo os usuários.
  • Casa as linhas por uma chave que você escolhe. Modos: Initial load, depois Upsert, Insert new, Update only ou incremental por coluna (updated_at ou o id AUTO_INCREMENT).
  • Confere antes de gravar com o Record Diff e as conferências na tela, e prova o resultado com o Compare e a lista completa de chaves divergentes.
  • Mascara no caminho as cópias de desenvolvimento e teste, mantendo chaves e chaves estrangeiras intactas.
  • Exportar em vez de carregar: quando você só precisa de um arquivo, o mesmo app exporta uma tabela do MySQL para CSV, JSON, XML ou HTML.

Passo a passo: converter uma tabela de MySQL para SQL Server

  1. Conecte no MySQL e no SQL Server.
  2. Escolha a tabela de origem (ou um SELECT, como no exemplo do BIT(n)) e a tabela de destino.
  3. Escolha a coluna-chave, e ligue Keep identity se os ids precisarem continuar iguais.
  4. Escolha o modo: Initial load, depois Upsert ou Insert new.
  5. Rode o Record Diff e depois a cópia, ou salve como job para a CLI e o Agendador de Tarefas do Windows.

Mover dados entre MySQL e SQL Server, com qualquer um dos dois como origem

O mesmo app move dados no outro sentido: veja SQL Server para MySQL. No MariaDB, veja MariaDB para SQL Server. Para PostgreSQL, veja MySQL para PostgreSQL.

Perguntas frequentes

O dbSlice converte stored procedures, triggers ou views?

Não. Ele move dados; as rotinas do MySQL precisam ser reescritas em T-SQL.

Preciso de binlog ou replicação ativos no MySQL?

Não. O dbSlice lê as tabelas com consultas comuns.

As execuções incrementais copiam as exclusões?

Não. Rode o Compare ou uma recarga antes da troca.

Existe versão gratuita?

Sim, na Microsoft Store: ela conecta, navega, compara e exporta para CSV. Gravar num destino exige uma licença Desktop ou Server.

Ainda não usa o dbSlice?
Experimente a versão gratuita da Microsoft Store: ela conecta, navega pelos dados, compara estruturas e exporta para CSV.

Experimente grátis Veja as demonstrações

Em produção há mais de 6 anos · Garantia de 14 dias · Roda na sua máquina