101 votes

Importer une base de données MySQL dans un serveur SQL

J'ai un .sql à partir d'un fichier 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 dump en une base de données SQL Server ?

1 votes

Avez-vous également accès à la base de données originale ? Ou bien le fichier d'exportation est-il tout ce dont vous disposez ?

0 votes

J'ai également perdu l'accès à la base de données originale. J'ai juste pensé qu'il serait plus facile d'utiliser le dump.

5voto

Vladimir Korobkov Points 487

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 suivies (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. Déchargement d'une table 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"

  4. Dans mon cas, le fichier dump était assez volumineux, j'ai donc décidé de le diviser en plusieurs petits morceaux (1000 lignes chacun). split --lines=1000 "$FILENAME" part-

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

    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"

Bien entendu, vous devrez remplacer mes variables comme $AZURE_SERVER , $TABLE avec les vôtres.

J'espère que cela vous aidera.

3voto

Pinguin Pinguin Points 43

Pour moi, la meilleure solution consiste à exporter toutes les données à l'aide de cette commande :

mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql

--extended-insert=FALSE est nécessaire pour éviter la limite d'importation de 1000 lignes de mssql.

J'ai créé mes tables avec mon outil de migration, donc je ne suis pas sûr que le CREATE du fichier backup.sql fonctionnera.

Dans le SSMS de SQL Server, j'ai dû importer les données table par table avec IDENTITY_INSERT ON pour écrire les champs 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 vous avez des relations, vous devez d'abord importer l'enfant, puis la table avec la clé étrangère.

0voto

amir Points 1619

Vous pouvez également utiliser 'ODBC' + 'SQL Server Import and Export Wizard'. Le lien ci-dessous le décrit : https://www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/

enter image description here

0voto

Exécutez :

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

-1voto

gorgino Points 1

Vous pouvez utiliser l'application sqlie pour convertir MySQL en SQL Server. vous pouvez regarder cette vidéo https://www.youtube.com/watch?v=iTVEqys_vTQ&t=108s

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X