Pergunta

Eu tenho que migrar uma tabela de MSSQL Server para MySql. O problema é que a tabela é muito grande (65 milhões de registros) e todo o processo leva muito tempo. Alguém tem alguma idéia de como acelerar as coisas? Quaisquer ferramentas úteis que poderiam melhorar isso?

Foi útil?

Solução

Você pode exportar os dados para texto e, em seguida, usar a instrução de carga mysql:

dados de carga '/somefolder/text_file_with_data.txt' infile local para uma tabela de campos some_table terminados por linhas '\t' terminados por '\n'

ou se você colocar o arquivo de dados no servidor MySQL você pode:

Os dados de carga INFILE '/somefolder_on_the_mysql_server/text_file_with_data.txt' na tabela campos some_table terminados por linhas '\t' terminados por '\n'

Eu não sou certo o que a sintaxe para MSSQL é exportar

Você sempre pode exportar em conjuntos de 10.000 ou 100.000.

Outras dicas

precisa fazê-lo apenas uma vez? Não perca muito tempo otimizando, espera 'até que é completamente e seguir em frente.

Necessidade de fazer isso mais vezes? Em seguida, elaborar o que as ferramentas / técnicas que você usa atualmente seria útil.

Aqui está como eu fiz para migrar uma tabela 800K registros do MS SQL Server para MySQL.

Crie uma consulta para exibir os dados em um formato tabular :

SELECT [PostalCode] + ' ' +
  [StateCode] + '   ' +
  [Latitude] + '    ' +
  [Longitude] + '   ' +
  [CityName]  
FROM [dbo].[PostalCode]

Executar a consulta com o SQL Server Management Studio, e selecione a saída dos resultados em um arquivo (Menu: Consulta -> resultados para -> resultados para arquivo)

O nome do arquivo deve ser o nome da tabela no MySQL. A extensão do arquivo não importa.

Em seguida, use mysqlimport.exe (no Windows) para importar os dados (a tabela deve existir no banco de dados MySQL):

mysqlimport.exe --user=user_name
  --columns=postalcode,statecode,latitude,longitude,cityname 
  --ignore-lines=2 databaseName pathToFile

Após a importação, eu tive que apagar os últimos 2 registros da tabela porque o final do arquivo continha algum lixo: (818.193 row (s) affected)

Para 800K é muito rápido:. 10 segundos para Exportar e, em seguida, 10 segundos para importação

Espero que isso ajude.

Certifique-se de que as tabelas mysql inicialmente não têm índices; adicioná-los uma vez que as cargas estão acabados.

Certifique-se o arquivo de tabela de armazenamento MySQL é grande o suficiente antes de iniciar a inserção usando essa declaração em seu arquivo my.ini:

innodb_data_file_path=ibdata1:1000M:autoextend

Tente se você pode obter os dados de MSSQL e no mysql usando o SSIS / DTS pacotes que você pode gerar com o assistente de importação / exportação de SQL Server. (Connect com o MySQL com o provedor OLEDB / ADO apropriado.

Iniciar quando você voltar para casa na sexta-feira, e volte depois do fim de semana;)

Certifique-se há colunas têm um índice sobre eles, e excluir quaisquer chaves estrangeiras (se você estiver usando InnoDB para o tipo de tabela) para a importação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top