Tengo un archivo .sql de un volcado de MySQL que contiene tablas, definiciones y datos para insertar en estas tablas. ¿Cómo puedo convertir esta base de datos representada en el archivo de volcado en una base de datos de MS SQL Server?
Tengo un archivo .sql de un volcado de MySQL que contiene tablas, definiciones y datos para insertar en estas tablas. ¿Cómo puedo convertir esta base de datos representada en el archivo de volcado en una base de datos de MS SQL Server?
Respuestas:
Usar el Asistente de migración de SQL Server (SSMA)
Además de MySQL, es compatible con Oracle, Sybase y MS Access.
Parece ser bastante inteligente y capaz de manejar transferencias no triviales. También tiene una interfaz de línea de comandos (además de la GUI), por lo que teóricamente se puede integrar en algún proceso de carga por lotes.
Este es el enlace de descarga actual para la versión de MySQL https://www.microsoft.com/en-us/download/details.aspx?id=54257
La versión estable actual (junio de 2016) 6.0.1 se bloquea con el controlador ODBC de MySQL actual (5.3.6) mientras se transfieren datos. Todo de 64 bits. La versión 5.3 con el controlador ODBC 5.1.13 funciona bien.
Le sugiero que use mysqldump así:
mysqldump --compatible=mssql
phpMyAdmin sigue siendo una aplicación web y podría tener algunas limitaciones para bases de datos grandes (tiempo de ejecución del script, memoria asignable, etc.).
Encontré una manera de esto en la red
Requiere un poco de trabajo, porque hay que hacerlo mesa por mesa. Pero de todos modos, podría copiar las tablas, los datos y las restricciones en una base de datos MS SQL.
Aqui esta el link
http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx
Si realiza una exportación con PhpMyAdmin , puede cambiar el modo de compatibilidad de SQL a 'MSSQL'. De esa manera, simplemente ejecute el script exportado en su base de datos MS SQL y listo.
Si no puede o no quiere usar PhpMyAdmin, también hay una opción de compatibilidad en mysqldump , pero personalmente prefiero que PhpMyAdmin lo haga por mí.
Aquí está mi enfoque para importar archivos .sql a MS SQL:
Exportar tabla de MySQL con --compatible=mssql
y --extended-insert=FALSE
opciones:
mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql
Divida el archivo exportado con PowerShell en 300000 líneas por archivo:
$i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}
Ejecute cada archivo en MS SQL Server Management Studio
Hay algunos consejos sobre cómo acelerar las inserciones .
Otro enfoque es usar la –where
opción mysqldump . Al usar esta opción, puede dividir su tabla en cualquier condición que sea compatible con la where
cláusula sql.
--databases [db_name]
palabra clave como se explica en esta respuesta: stackoverflow.com/a/26096339/155687
Hoy tuve un problema muy similar: necesitaba copiar una tabla grande (5 millones de filas) de MySql en MS SQL.
Estos son los pasos que he realizado (en Ubuntu Linux):
Creó una tabla en MS SQL cuya estructura coincide con la tabla de origen en MySql.
Línea de comando MS SQL instalada: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu
Tabla volcada de MySql a un archivo:
mysqldump \ --compacto \ - inserción-completa \ --no-crear-información \ --compatible = mssql \ --extended-insert = FALSE \ --host "$ MYSQL_HOST" \ --usuario "$ MYSQL_USER" \ -p "$ MYSQL_PASS" \ "$ MYSQL_DB" \ "$ TABLE"> "$ FILENAME"
En mi caso, el archivo de volcado era bastante grande, así que decidí dividirlo en varias partes pequeñas (1000 líneas cada una): split --lines=1000 "$FILENAME" part-
Finalmente, itere sobre estos pequeños archivos, hice algunos reemplazos de texto y ejecuté las piezas una por una contra el servidor MS SQL:
exportar SQLCMD = / opt / mssql-tools / bin / sqlcmd x = 0 para archivo en parte- * hacer echo "Exportando archivo [$ file] a MS SQL. $ x mil (s) procesados" # reemplaza \ 'con' ' sed -i "s / \\\ '/' '/ g" "$ archivo" # elimina todo " sed -i 's / "// g'" $ archivo " # permite insertar registros con PK (id) especificado sed -i "1s / ^ / SET IDENTITY_INSERT $ TABLE ON; \ n /" "$ archivo" "$ SQLCMD" -S "$ AZURE_SERVER" -d "$ AZURE_DB" -U "$ AZURE_USER" -P "$ AZURE_PASS" -i "$ archivo" eco "" eco "" x = $ ((x + 1)) hecho echo "Hecho"
Por supuesto que tendrá que reemplazar mis variables como $AZURE_SERVER
, $TABLE
, etc con la suya.
Espero que ayude.
Para mí, funcionó mejor para exportar todos los datos con este comando:
mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql
--extended-insert = FALSE es necesario para evitar el límite de importación de 1000 filas de mssql.
Creé mis tablas con mi herramienta de migración, así que no estoy seguro de si el archivo CREAR del archivo backup.sql funcionará.
En el SSMS de MSSQL tuve que importar la tabla de datos por tabla con IDENTITY_INSERT ON para escribir los 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
Si tiene relaciones, primero debe importar el hijo y luego la tabla con la clave externa.
También puede utilizar 'ODBC' + 'Asistente de importación y exportación de SQL Server'. El siguiente enlace lo describe: https://www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/
Correr:
mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql
¿Quieres ver una barra de proceso?
pv mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql