web-dev-qa-db-fra.com

Importer une base de données MySQL sur un serveur MS SQL

J'ai un fichier .sql d'un dump MySQL contenant des tables, des définitions et des données à insérer dans ces tables. Comment puis-je convertir cette base de données représentée dans le fichier de vidage en une base de données MS SQL Server?

76
marionmaiden

J'ai trouvé un moyen pour cela sur le net

Cela demande un peu de travail, car il faut le faire table par table. Quoi qu'il en soit, je pourrais copier les tables, les données et les contraintes dans une base de données MS SQL.

Voici le lien

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

13
marionmaiden

Utiliser Assistant de migration SQL Server (SSMA)

En plus de MySQL, il prend en charge Oracle, Sybase et MS Access.

Il semble être assez intelligent et capable de gérer même des transferts non triviaux. Il dispose également d’une interface en ligne de commande (en plus de l’interface graphique), ce qui permet théoriquement de l’intégrer dans un processus de chargement par lots.

Ce lien de téléchargement actuel pour la version de MySQL http://www.Microsoft.com/en-us/download/details.aspx?id=42657

La version 6.0.1 actuelle (juin 2016) stable se bloque avec le pilote MySQL ODBC actuel (5.3.6) lors du transfert de données. Tout 64 bits. La version 5.3 avec le pilote 5.1.13 ODBC fonctionne bien.

55
Zar Shardan

Je vous suggère d'utiliser mysqldump like so:

mysqldump --compatible=mssql

phpMyAdmin est toujours une application Web et pourrait éventuellement comporter certaines limitations pour les {bases de données volumineuses} _ (durée d'exécution du script, mémoire allouable, etc.).

15
deklin

Voici mon approche pour importer des fichiers .sql vers MS SQL:

  1. Exporter une table à partir de MySQL avec les options --compatible=mssql et --extended-insert=FALSE:

    mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql

  2. Divisez le fichier exporté avec PowerShell par 300 000 lignes par fichier:

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

  3. Exécuter chaque fichier dans MS SQL Server Management Studio

Il existe quelques astuces comment accélérer les insertions .

Une autre approche consiste à utiliser l'option mysqldump –where . En utilisant cette option, vous pouvez fractionner votre table à n’importe quelle condition prise en charge par la clause where sql.

7
Vladislav

Si vous effectuez une exportation avec PhpMyAdmin , vous pouvez passer le mode de compatibilité SQL à 'MSSQL'. De cette façon, vous exécutez simplement le script exporté sur votre base de données MS SQL et vous avez terminé.

Si vous ne pouvez pas ou ne voulez pas utiliser PhpMyAdmin, il existe également une option de compatibilité dans mysqldump , mais personnellement, je préférerais que PhpMyAdmin le fasse pour moi.

5
Whakkee

J'ai eu un problème très similaire aujourd'hui - je devais copier une grande table (5 millions de lignes) de MySql vers MS SQL.

Voici les étapes que j'ai effectuées (sous Ubuntu Linux):

  1. Création d'une table dans MS SQL dont la structure correspond à la table source dans MySql.

  2. Ligne de commande MS SQL installée: https://docs.Microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu

  3. Table vidée de MySql dans un fichier:

 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. Dans mon cas, le fichier de vidage étant assez volumineux, j'ai donc décidé de le scinder en plusieurs petits morceaux (1 000 lignes chacun) - split --lines=1000 "$FILENAME" part-

  2. Enfin, j'ai itéré sur ces petits fichiers, fait quelques remplacements de texte et exécuté les morceaux un par un sur le serveur MS SQL:

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

 x = 0 

 pour le fichier en partie - * 
 do 
 echo "Exporter le fichier [$ file] vers MS SQL. $ x mille (s) traités" 

 # remplace\'par' '
 sed -i "s/\\\ '/' '/ g" "$ file" 

 # supprime tout "
 sed -i 's /" // g' "$ file" 

 # permet d'insérer des enregistrements avec PK (id) spécifié 
 sed -i "1s/^/SET IDENTITY_INSERT $ TABLE ON;\n /" "$ fichier" 

 "$ SQLCMD" -S "$ Azure_SERVER" -d "$ Azure_DB" -U "$ Azure_USER" -P "$ Azure_PASS" -i "$ fichier" 
 écho ""
 écho ""

 x = $ ((x + 1)) 
 done 

 echo "Done" 

Bien sûr, vous devrez remplacer mes variables telles que $Azure_SERVER, $TABLE, e.t.c. avec votre.

J'espère que cela pourra aider.

3
Vladimir Korobkov

Courir:

mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql

Voulez-vous voir une barre de processus? 

pv mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql
0

Vous pouvez également utiliser 'ODBC' + 'Assistant d'importation et d'exportation SQL Server' . Le lien ci-dessous le décrit: https://www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql- migration de données de serveur/

 enter image description here

0
amir