2010-04-12 36 views
67

Tengo un archivo .sql de un volcado 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 a una base de datos de MS SQL Server?Importar base de datos MySQL en un servidor MS SQL

+1

¿Tiene también acceso a la base de datos original?¿O el archivo de exportación es básicamente todo lo que tienes? – Whakkee

+0

También tengo acceso a la base de datos original. Solo pensé que usar el volcado podría ser más fácil – marionmaiden

Respuesta

13

he encontrado una manera para esto en la red

Exige un poco de trabajo, ya que tiene que ser hecho por la mesa de mesa. Pero de todos modos, podría copiar las tablas, los datos y las restricciones en una base de datos MS SQL.

Aquí está el enlace

http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx

+0

Eso es cuando Mysql y SQL están en una máquina o están conectados a través de una red. Esto no es útil cuando existen dos máquinas diferentes y tiene un archivo de volcado de mysql. ¿derecho? – Espanta

4

Si realiza una exportación con PhpMyAdmin, puede cambiar el modo de compatibilidad sql a 'MSSQL'. De esta forma, solo ejecuta el script exportado contra 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í.

+3

@marga, no funcionó para MS SQL 2008. – marionmaiden

+1

Esta respuesta funcionó para mí, con modificaciones mínimas al guión generado. Lo trajo a SQL Server 2012. No vi el modo de compatibilidad antes. – Kiel

15

puedo sugerir que use mysqldump así:

mysqldump --compatible=mssql

phpMyAdmin sigue siendo una aplicación web y, potencialmente, podrían tener algunas limitaciones para grandes bases de datos (tiempo de ejecución del script, memoria asignable, etc.)

+4

@deklin, no funcionó para MS SQL 2008. – marionmaiden

+4

Por desgracia, esto me da todo tipo de problemas de compatibilidad. La secuencia de comandos contendrá trazos en torno a los nombres de las columnas, los tipos de datos que no existen en MSSQL, violará la restricción de máx. 1000 inserciones, palabras clave de autoincremento, etc. Esta respuesta es una sugerencia lógica, pero me temo que no No funciona demasiado bien (al menos: no fue para mí). – Jeroen

46

Uso SQL Server Migration Assistant (SSMA)

Además de MySQL soporta Oracle, Sybase y MS Access.

Parece ser bastante inteligente y capaz de manejar incluso transferencias no triviales. También tiene alguna interfaz de línea de comandos (además de GUI) por lo que teóricamente puede integrarse en algún proceso de carga por lotes.

Esta el enlace de descarga actual de MySQL versión http://www.microsoft.com/en-us/download/details.aspx?id=42657

La corriente (junio de 2016) versión estable 6.0.1 bloquea con la corriente (5.3.6) controlador MySQL ODBC mientras la transferencia de datos. Todo 64 bit. La versión 5.3 con el controlador ODBC 5.1.13 funciona bien.

+5

Esta herramienta solo funciona si puede instalar un conector ODBC desde su PC a su base de datos MySQL. Si solo tiene un archivo de volcado .sql, no puede usar SSMA. –

+8

El motor MySQL es software gratuito, y también hay una versión para Windows. Instalarlo y cargar el volcado es un trabajo trivial. Si esperas encontrar una herramienta (incluso comercial, y mucho menos gratuita) que convierta de manera confiable una secuencia de comandos MySQL arbitraria a su equivalente de SQL Server, bueno, buena suerte con eso. –

+0

Buen punto. Y eso es lo que terminé haciendo ayer. A menos que escriba su propia utilidad de conversión personalizada, la instalación de MySQL parece ser la mejor opción. SSMA fue un dolor en el trasero para usar, pero eventualmente conseguí que funcionara. –

7

Aquí está mi enfoque para la importación.archivos SQL para MS SQL:

  1. 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

  2. Dividir el archivo exportado con PowerShell 300000 líneas por archivo:

    $i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}

  3. Ejecutar cada archivo en MS SQL Server Management Studio

Hay algunos consejos how to speed up the inserts.

Other approach is to use mysqldump –where option. Al usar esta opción, puede dividir su tabla en cualquier condición que sea compatible con la cláusula where sql.

+0

cómo podemos exportar toda la base de datos en lugar de tabla por tabla – MonsterMMORPG

+0

intente con la palabra clave '--databases [nombre_db]' como se explica en esta respuesta: http://stackoverflow.com/a/26096339/155687 – Vladislav

1

que tenían un problema muy similar en la actualidad - que necesitaba para copiar una tabla grande (5 millones de filas) a partir de MySQL en MS SQL.

Estos son los pasos que he hecho (bajo Ubuntu Linux):

  1. crea una tabla en MS SQL, que coincide con la estructura de la tabla de origen en MySQL.

  2. instalada la línea de comandos de MS SQL: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu

  3. mesa Dumped de MySQL a un archivo:

 
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" 
  1. En mi caso el vertedero el archivo era bastante grande, así que decidí dividirlo en varias piezas pequeñas (1000 líneas cada una) - split --lines=1000 "$FILENAME" part-

  2. Por último, me repiten a lo largo de estos pequeños archivos, hicieron algunos reemplazos de texto, y ejecutado las piezas una a una en contra de MS SQL Server:

 
export SQLCMD=/opt/mssql-tools/bin/sqlcmd 

x=0 

for file in part-* 
do 
    echo "Exporting file [$file] into MS SQL. $x thousand(s) processed" 

    # replaces \' with '' 
    sed -i "s/\\\'/''/g" "$file" 

    # removes all " 
    sed -i 's/"//g' "$file" 

    # allows to insert records with specified PK(id) 
    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" 
    echo "" 
    echo "" 

    x=$((x+1)) 
done 

echo "Done" 

Por supuesto que tendrá que reemplazar mis variables como $AZURE_SERVER, $TABLE, etc. con tigo.

Espero que ayude.

Cuestiones relacionadas