Eu tenho um arquivo .sql de um despejo do MySQL contendo tabelas, definições e dados a serem inseridos nessas tabelas. Como posso converter este banco de dados representado no arquivo de despejo em um banco de dados MS SQL Server?
Eu tenho um arquivo .sql de um despejo do MySQL contendo tabelas, definições e dados a serem inseridos nessas tabelas. Como posso converter este banco de dados representado no arquivo de despejo em um banco de dados MS SQL Server?
Respostas:
Use o SQL Server Migration Assistant (SSMA)
Além do MySQL, ele oferece suporte a Oracle, Sybase e MS Access.
Parece ser bastante inteligente e capaz de lidar até com transferências não triviais. Ele também tem alguma interface de linha de comando (além da GUI), portanto, teoricamente, pode ser integrado a algum processo de carregamento em lote.
Este é o link de download atual para a versão MySQL https://www.microsoft.com/en-us/download/details.aspx?id=54257
A versão estável 6.0.1 atual (junho de 2016) falha com o driver ODBC MySQL atual (5.3.6) durante a transferência de dados. Tudo de 64 bits. A versão 5.3 com o driver ODBC 5.1.13 funciona bem.
Eu sugiro que você use o mysqldump assim:
mysqldump --compatible=mssql
phpMyAdmin ainda é um aplicativo da web e pode ter algumas limitações para bancos de dados grandes (tempo de execução de script, memória alocável e assim por diante).
Eu encontrei um jeito para isso na net
Exige um pouco de trabalho, porque tem que ser feito mesa a mesa. Mas de qualquer maneira, eu poderia copiar as tabelas, dados e restrições em um banco de dados MS SQL.
Aqui está o link
http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx
Se você fizer uma exportação com PhpMyAdmin , poderá alternar o modo de compatibilidade sql para 'MSSQL'. Dessa forma, você apenas executa o script exportado em seu banco de dados MS SQL e pronto.
Se você não pode ou não deseja usar o PhpMyAdmin, há também uma opção de compatibilidade no mysqldump , mas pessoalmente prefiro que o PhpMyAdmin faça isso por mim.
Aqui está minha abordagem para importar arquivos .sql para MS SQL:
Exportar tabela do MySQL com opções --compatible=mssql
e --extended-insert=FALSE
:
mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql
Divida o arquivo exportado com PowerShell por 300.000 linhas por arquivo:
$i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}
Execute cada arquivo no MS SQL Server Management Studio
Existem algumas dicas para acelerar as inserções .
Outra abordagem é usar a –where
opção mysqldump . Usando esta opção, você pode dividir sua tabela em qualquer condição que seja suportada pela where
cláusula sql.
--databases [db_name]
palavra-chave conforme explicada nesta resposta: stackoverflow.com/a/26096339/155687
Tive um problema muito semelhante hoje - precisei copiar uma grande tabela (5 milhões de linhas) do MySql para o MS SQL.
Aqui estão as etapas que executei (no Ubuntu Linux):
Criou uma tabela em MS SQL cuja estrutura coincide com a tabela de origem no MySql.
Linha de comando MS SQL instalada: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu
Tabela descartada do MySql para um arquivo:
mysqldump \ --compact \ --complete-insert \ --no-create-info \ --compatible = mssql \ --extended-insert = FALSE \ --host "$ MYSQL_HOST" \ --user "$ MYSQL_USER" \ -p "$ MYSQL_PASS" \ "$ MYSQL_DB" \ "$ TABLE"> "$ FILENAME"
No meu caso, o arquivo de despejo era muito grande, então decidi dividi-lo em várias partes pequenas (1000 linhas cada) - split --lines=1000 "$FILENAME" part-
Finalmente, eu iterou sobre esses pequenos arquivos, fiz algumas substituições de texto e executei as partes uma a uma no servidor MS SQL:
export SQLCMD = / opt / mssql-tools / bin / sqlcmd x = 0 para arquivo em parte- * Faz echo "Exportando arquivo [$ file] para MS SQL. $ x mil (s) processado" # substitui \ 'por' ' sed -i "s / \\\ '/' '/ g" "$ arquivo" # remove tudo " sed -i 's / "// g'" $ arquivo " # permite inserir registros com PK (id) especificado sed -i "1s / ^ / SET IDENTITY_INSERT $ TABLE ON; \ n /" "$ arquivo" "$ SQLCMD" -S "$ AZURE_SERVER" -d "$ AZURE_DB" -U "$ AZURE_USER" -P "$ AZURE_PASS" -i "$ arquivo" echo "" echo "" x = $ ((x + 1)) feito echo "Done"
Claro que você vai precisar para substituir meus variáveis como $AZURE_SERVER
, $TABLE
, etc com o seu.
Espero que ajude.
Para mim, funcionou melhor exportar todos os dados com este comando:
mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql
--extended-insert = FALSE é necessário para evitar o limite de importação de 1000 linhas de mssql.
Criei minhas tabelas com minha ferramenta de migração, então não tenho certeza se o CREATE do arquivo backup.sql funcionará.
No SSMS do MSSQL, tive que importar os dados tabela por tabela com o IDENTITY_INSERT ON para escrever os campos de ID:
SET IDENTITY_INSERT dbo.app_warehouse ON;
GO
INSERT INTO "app_warehouse" ("id", "Name", "Standort", "Laenge", "Breite", "Notiz") VALUES (1,'01','Bremen',250,120,'');
SET IDENTITY_INSERT dbo.app_warehouse OFF;
GO
Se você tiver relacionamentos, terá que importar primeiro o filho e depois a tabela com a chave estrangeira.
Você também pode usar 'ODBC' + 'Assistente de importação e exportação do SQL Server'. O link abaixo o descreve: https://www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/
Corre:
mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql
Você quer ver uma barra de processo?
pv mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql