Ho un file .sql da un dump MySQL contenente tabelle, definizioni e dati da inserire in queste tabelle. Come posso convertire questo database rappresentato nel file dump in un database MS SQL Server?
Ho un file .sql da un dump MySQL contenente tabelle, definizioni e dati da inserire in queste tabelle. Come posso convertire questo database rappresentato nel file dump in un database MS SQL Server?
Risposte:
Utilizzare SQL Server Migration Assistant (SSMA)
Oltre a MySQL supporta Oracle, Sybase e MS Access.
Sembra essere abbastanza intelligente e in grado di gestire anche trasferimenti non banali. Ha anche un'interfaccia a riga di comando (oltre alla GUI), quindi teoricamente può essere integrata in un processo di caricamento batch.
Questo è l'attuale collegamento per il download della versione di MySQL https://www.microsoft.com/en-us/download/details.aspx?id=54257
L'attuale versione stabile (giugno 2016) 6.0.1 si arresta in modo anomalo con l'attuale driver ODBC MySQL (5.3.6) durante il trasferimento dei dati. Tutto a 64 bit. La versione 5.3 con il driver ODBC 5.1.13 funziona bene.
Ti suggerisco di usare mysqldump in questo modo:
mysqldump --compatible=mssql
phpMyAdmin è ancora un'app Web e potrebbe potenzialmente avere alcune limitazioni per database di grandi dimensioni (tempo di esecuzione dello script, memoria allocabile e così via).
Ho trovato un modo per questo in rete
Richiede un po 'di lavoro, perché deve essere fatto tavolo per tavolo. Ma comunque, potrei copiare le tabelle, i dati e i vincoli in un database MS SQL.
Ecco il link
http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx
Se esegui un'esportazione con PhpMyAdmin , puoi cambiare la modalità di compatibilità sql su "MSSQL". In questo modo devi solo eseguire lo script esportato sul tuo database MS SQL e il gioco è fatto.
Se non puoi o non vuoi usare PhpMyAdmin, c'è anche un'opzione di compatibilità in mysqldump , ma personalmente preferirei che PhpMyAdmin lo facesse per me.
Ecco il mio approccio per importare file .sql in MS SQL:
Esporta tabella da MySQL con --compatible=mssql
e --extended-insert=FALSE
opzioni:
mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql
Dividi il file esportato con PowerShell di 300000 righe per file:
$i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}
Esegui ogni file in MS SQL Server Management Studio
Ci sono alcuni suggerimenti su come velocizzare gli inserti .
Un altro approccio consiste nell'usare l' –where
opzione mysqldump . Usando questa opzione puoi dividere la tua tabella in qualsiasi condizione supportata dalla where
clausola sql.
--databases [db_name]
parola chiave come spiegato in questa risposta: stackoverflow.com/a/26096339/155687
Oggi ho avuto un problema molto simile: avevo bisogno di copiare una grande tabella (5 milioni di righe) da MySql a MS SQL.
Ecco i passaggi che ho eseguito (con Ubuntu Linux):
Creata una tabella in MS SQL la cui struttura corrisponde alla tabella di origine in MySql.
Riga di comando MS SQL installata: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu
Tabella scaricata da MySql a un file:
mysqldump \ --compatto \ --complete-insert \ --no-create-info \ --compatibile = mssql \ --extended-insert = FALSE \ --host "$ MYSQL_HOST" \ --user "$ MYSQL_USER" \ -p "$ MYSQL_PASS" \ "$ MYSQL_DB" \ "$ TABLE"> "$ FILENAME"
Nel mio caso il file di dump era piuttosto grande, quindi ho deciso di dividerlo in un numero di piccoli pezzi (1000 righe ciascuno) - split --lines=1000 "$FILENAME" part-
Alla fine ho iterato su questi piccoli file, ho fatto alcune sostituzioni di testo ed eseguito i pezzi uno per uno sul server MS SQL:
esporta SQLCMD = / opt / mssql-tools / bin / sqlcmd x = 0 per file in parte- * fare echo "Esportazione del file [$ file] in MS SQL. $ x mille (s) elaborati" # sostituisce \ "con" " sed -i "s / \\\ '/' '/ g" "$ file" # rimuove tutto " sed -i 's / "// g'" $ file " # consente di inserire record con PK (id) specificato sed -i "1s / ^ / SET IDENTITY_INSERT $ TABLE ON; \ n /" "$ file" "$ SQLCMD" -S "$ AZURE_SERVER" -d "$ AZURE_DB" -U "$ AZURE_USER" -P "$ AZURE_PASS" -i "$ file" eco "" eco "" x = $ ((x + 1)) fatto echo "Fatto"
Naturalmente avrete bisogno di sostituire il mio variabili come $AZURE_SERVER
, $TABLE
, ecc con la vostra.
Spero che aiuti.
Per me ha funzionato meglio esportare tutti i dati con questo comando:
mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql
--extended-insert = FALSE è necessario per evitare il limite di importazione di 1000 righe di mssql.
Ho creato le mie tabelle con il mio strumento di migrazione, quindi non sono sicuro che CREATE dal file backup.sql funzionerà.
Nell'SSMS di MSSQL ho dovuto importare la tabella dei dati per tabella con IDENTITY_INSERT ON per scrivere i campi 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 hai relazioni devi prima importare il figlio e poi la tabella con la chiave esterna.
Inoltre è possibile utilizzare "ODBC" + "Importazione ed esportazione guidata di SQL Server". Il link sottostante lo descrive: https://www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/
Correre:
mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql
Vuoi vedere una barra dei processi?
pv mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql