J'ai un fichier .sql d'un vidage 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 base de données MS SQL Server?
J'ai un fichier .sql d'un vidage 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 base de données MS SQL Server?
Réponses:
Utiliser l' 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 les transferts non triviaux. Il a également une interface de ligne de commande (en plus de l'interface graphique) donc théoriquement, il peut être intégré dans un processus de chargement par lots.
Voici le lien de téléchargement actuel pour la version MySQL https://www.microsoft.com/en-us/download/details.aspx?id=54257
La version stable 6.0.1 actuelle (juin 2016) plante avec le pilote ODBC MySQL actuel (5.3.6) lors du transfert de données. Tout 64 bits. La version 5.3 avec le pilote ODBC 5.1.13 fonctionne correctement.
Je vous suggère d'utiliser mysqldump comme ceci:
mysqldump --compatible=mssql
phpMyAdmin est toujours une application Web et pourrait potentiellement avoir des limitations pour les grandes bases de données (temps d'exécution du script, mémoire allouable, etc.).
J'ai trouvé un moyen pour ça sur le net
Cela demande un peu de travail, car il faut le faire table par table. Mais de toute façon, 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
Si vous effectuez une exportation avec PhpMyAdmin , vous pouvez basculer le mode de compatibilité SQL sur «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 y a aussi une option de compatibilité dans mysqldump , mais personnellement je préfère que PhpMyAdmin le fasse pour moi.
Voici mon approche pour importer des fichiers .sql vers MS SQL:
Exporter la table depuis MySQL avec --compatible=mssql
et --extended-insert=FALSE
options:
mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql
Divisez le fichier exporté avec PowerShell par 300000 lignes par fichier:
$i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}
Exécutez chaque fichier dans MS SQL Server Management Studio
Il existe quelques astuces pour accélérer les inserts .
Une autre approche consiste à utiliser l' –where
option mysqldump . En utilisant cette option, vous pouvez fractionner votre table sur n'importe quelle condition prise en charge par la where
clause sql.
--databases [db_name]
mot-clé comme il est expliqué dans cette réponse: stackoverflow.com/a/26096339/155687
J'ai eu un problème très similaire aujourd'hui - j'avais besoin de copier une grande table (5 millions de lignes) de MySql dans MS SQL.
Voici les étapes que j'ai effectuées (sous Ubuntu Linux):
Création d'une table dans MS SQL dont la structure correspond à la table source dans MySql.
Ligne de commande MS SQL installée: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu
Table sauvegardée de MySql dans un fichier:
mysqldump \ --compact \ - insertion-complète \ --no-create-info \ --compatible = mssql \ --extended-insert = FALSE \ --host "$ MYSQL_HOST" \ --utilisateur "$ MYSQL_USER" \ -p "$ MYSQL_PASS" \ "$ MYSQL_DB" \ "$ TABLE"> "$ FILENAME"
Dans mon cas, le fichier de vidage était assez volumineux, j'ai donc décidé de le diviser en plusieurs petits morceaux (1000 lignes chacun) - split --lines=1000 "$FILENAME" part-
Enfin, j'ai parcouru ces petits fichiers, effectué quelques remplacements de texte et exécuté les morceaux un par un contre le serveur MS SQL:
export SQLCMD = / opt / mssql-tools / bin / sqlcmd x = 0 pour fichier en partie- * faire echo "Exportation du fichier [$ file] vers MS SQL. $ x mille (s) traité (s)" # remplace \ 'par' ' sed -i "s / \\\ '/' '/ g" "$ fichier" # enleve tout " sed -i 's / "// g'" $ fichier " # 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)) terminé echo "Terminé"
Bien sûr , vous aurez besoin de remplacer mes variables comme $AZURE_SERVER
, $TABLE
, etc avec le vôtre.
J'espère que cela pourra aider.
Pour moi, il était préférable d'exporter toutes les données avec 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 1 000 lignes de mssql.
J'ai créé mes tables avec mon outil de migration, donc je ne suis pas sûr que CREATE du fichier backup.sql fonctionnera.
Dans le SSMS de MSSQL, j'ai dû importer la table de données 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 et ensuite la table avec la clé étrangère.
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-server-data-migration/
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