2008-10-01 19 views
52

Le titre est explicite. Y a-t-il un moyen de faire directement ce genre d'importation?Comment importer un fichier .bak SQL Server dans MySQL?

+3

également [couvert sur dba.stackexchange] (http://dba.stackexchange.com/q/20078/1580) –

+0

Epic question bro! J'ai finalement réussi à importer le fichier bak de mon fournisseur d'hébergement merdique où tous les outils SQL ont été brisés. – ppumkin

Répondre

58

Les fichiers .BAK de serveur SQL sont dans Microsoft Tape Format (MTF) ref: http://www.fpns.net/willy/msbackup.htm

Le fichier bak contiendra probablement le LDF et fichiers MDF que SQL Server utilise pour stocker la base de données.

Vous devrez utiliser le serveur SQL pour les extraire. SQL Server Express est gratuit et fera l'affaire. Par conséquent, installez l'édition SQL Server Express et ouvrez SQL Server Powershell. Exécutez sqlcmd -S <COMPUTERNAME>\SQLExpress (en étant connecté en tant qu'administrateur)

puis d'exécuter la commande suivante.

restore filelistonly from disk='c:\temp\mydbName-2009-09-29-v10.bak'; 
GO 

Ceci listera le contenu de la sauvegarde - ce dont vous avez besoin est les premiers champs qui vous indiquent les noms logiques - on sera la base de données réelle et l'autre le fichier journal.

RESTORE DATABASE mydbName FROM disk='c:\temp\mydbName-2009-09-29-v10.bak' 
WITH 
    MOVE 'mydbName' TO 'c:\temp\mydbName_data.mdf', 
    MOVE 'mydbName_log' TO 'c:\temp\mydbName_data.ldf'; 
GO 

A ce stade, vous avez extrait la base de données - puis installez Microsoft's "Sql Web Data Administrator". avec this export tool et vous aurez un script SQL qui contient la base de données.

+1

merci Richard! Je suis sorti d'une confiture. –

+3

Le problème est que SQL Server 2008 Express Edition ne peut gérer que les fichiers de base de données de 10 Go ou moins. J'ai un fichier de 30 Go avec lequel je dois travailler. La connexion Internet au travail est trop lente pour télécharger l'image .iso de 4 Go de la version complète de SQL Server 2008 R2, que je reçois gratuitement de dreamspark.com en tant qu'étudiant. J'ai donc exactement la même question. – systemovich

+0

Le premier lien du logiciel d'installation est rompu –

2

Bien que mon environnement MySQL soit limité, je ne pense pas que vous ayez beaucoup de chance de le faire. Cependant, vous devriez pouvoir migrer toutes vos données en restaurant la base de données sur un serveur MSSQL, puis en créant un paquet SSIS ou DTS pour envoyer vos tables et vos données au serveur MySQL.

espérons que cela aide

0

Je doute fortement. Vous pouvez utiliser DTS/SSIS pour faire cela comme le dit Levi. On pense que vous pourriez vouloir faire est de commencer le processus sans réellement importer les données. Faites juste assez pour obtenir les structures de base de la table ensemble. Ensuite, vous allez vouloir changer autour de la structure de table résultante, parce que toute structure qui sera probablement créée sera fragile au mieux.

Il se peut également que vous deviez aller plus loin en créant une zone de transfert qui prend en compte toutes les données d'abord sous forme de chaîne (varchar). Vous pouvez ensuite créer un script qui effectue la validation et la conversion pour l'intégrer dans la base de données "réelle", car les deux bases de données ne fonctionnent pas toujours bien ensemble, en particulier pour les dates.

0

Les bases de données SQL Server sont très propriétaires de Microsoft. Deux options que je peux penser sont:

  1. Dump la base de données au format CSV, XML ou en format similaire que vous souhaitez charger ultérieurement dans MySQL.

  2. La configuration de la connexion ODBC à MySQL, puis l'utilisation de DTS transportent les données. Comme l'a suggéré Charles Graham, vous devrez peut-être construire les tables avant de faire cela. Mais c'est aussi simple qu'un copier-coller des fenêtres de SQL Enterprise Manager vers la fenêtre MySQL correspondante.

+0

Cela fonctionnera-t-il si je prépare le vidage au format .sql !! – sandeep

8

Je n'ai pas réussi à trouver un moyen de le faire directement. A la place, j'ai importé le fichier bak dans SQL Server 2008 Express, puis j'ai utilisé MySQL Migration Toolkit.

A travaillé comme un charme!

+0

Oui l'importation a bien fonctionné pour moi. Cliquez avec le bouton droit sur le noeud 'bases de données' cliquez sur Import - Sélectionnez d'abord le fichier BAK puis choisissez base de données - Il récupère automatiquement le nom de la base de données du fichier .bak chargé et le place dans la liste. importation .. Woohoo - 6 jours plus tard! – ppumkin

+0

MySQL Migration Toolkit a atteint EOL. voir http://dev.mysql.com/downloads/gui-tools/5.0.html – Jakob

+1

La fonctionnalité 'Migration de base de données' fait maintenant partie de [MySQL Workbench] (http://dev.mysql.com/downloads/tools/ workbench /) – dazweeja

0

La méthode que j'utilisé une partie inclus de la méthode de Richard Harrison:

, installez SQL Server 2008 Express édition,

Cela nécessite le téléchargement du Web Platform Installer « wpilauncher_n.exe " Une fois que vous avez installé ceci, cliquez sur la sélection de la base de données (vous devez également télécharger Frameworks et Runtimes)

Après l'installation, allez à t il invite de commande Windows et:

utilisation sqlcmd -S \ SQLExpress (tout connecté en tant qu'administrateur)

puis exécutez la commande suivante.

restaurer filelistonly à partir de disk = 'c: \ temp \ mydbName-2009-09-29-v10.bak'; GO Cela va lister le contenu de la sauvegarde - ce dont vous avez besoin est le premier les champs qui vous indiquent les noms logiques - l'un sera la base de données réelle et l'autre le fichier journal.

RESTORE mydbName de base de données disque = 'c: \ temp \ mydbName-29/09/2009-v10.bak' AVEC MOVE 'mydbName' TO 'c: \ temp \ mydbName_data.mdf', DEPLACER ' mydbName_log 'TO ' c: \ temp \ nom_de_données_mon_données.ldf '; GO

Je Fired Up Web Platform Installer et du nouvel onglet ce qui est installé I SQL Server Management Studio et le naviguerez db pour vous assurer que les données ont été là ...

À ce moment-là je l'ai essayé l'outil inclus avec MSSQL "Assistant d'importation et d'exportation SQL" mais le résultat du vidage csv incluait uniquement les noms de colonnes ...

Donc, je viens d'exporter les résultats de requêtes comme "select * from users" de SQL Server Management Studio

0

Pour ceux qui tentent la solution de Richard un ci-dessus, voici quelques informations supplémentaires qui pourraient aider à naviguer les erreurs courantes:

1) Lors de l'exécution de la restauration de filelistonly, vous pouvez obtenir Erreur 5 du système d'exploitation (Accès refusé). Si c'est le cas, ouvrez le Gestionnaire de configuration SQL Server et modifiez la connexion pour SQLEXPRESS à un utilisateur disposant de privilèges d'écriture locaux. 2) @ "Ceci va lister le contenu de la sauvegarde - ce dont vous avez besoin sont les premiers champs qui vous indiquent les noms logiques" - si votre fichier liste plus de deux en-têtes, vous devrez également tenir compte de ce qu'il faut faire avec ces fichiers dans la commande RESTORE DATABASE. Si vous n'indiquez pas quoi faire avec les fichiers au-delà de la base de données et du journal, le système essaiera apparemment d'utiliser les attributs répertoriés dans le fichier .bak. La restauration d'un fichier à partir de l'environnement de quelqu'un d'autre produira un 'Le chemin a des attributs invalides. Il doit s'agir d'un répertoire '(car le chemin en question n'existe pas sur votre machine). La simple fourniture d'une instruction MOVE résout ce problème.

Dans mon cas, il y avait un troisième fichier de type FTData.La commande MOVE J'ai ajouté:

MOVE 'mydbName_log' TO 'c:\temp\mydbName_data.ldf', 
MOVE 'sysft_...' TO 'c:\temp\other'; 

Dans mon cas, j'ai dû créer un nouveau répertoire pour le troisième fichier. Initialement, j'ai essayé de l'envoyer dans le même dossier que le fichier .mdf, mais cela a produit une erreur 'failed to initialize correctement' sur le troisième fichier FTData lorsque j'ai exécuté la restauration. Ouvrez SQL Server Management Studio sur votre ordinateur local.

3
  1. Cliquez avec le bouton droit sur le dossier Bases de données. Dans le menu contextuel, sélectionnez Nouvelle base de données.
  2. Entrez un nom de base de données, puis cliquez sur OK.
  3. Cliquez avec le bouton droit sur l'icône de la nouvelle base de données. Dans le menu contextuel, sélectionnez Tâches -> Restaurer -> Base de données.
  4. Sélectionnez l'option À partir du périphérique, puis cliquez sur le bouton Parcourir.
  5. Cliquez sur Ajouter et naviguez jusqu'au fichier approprié. Cliquez sur OK.
  6. Dans la fenêtre Restaurer la base de données, cochez la case en regard de votre fichier BAK.
  7. Passez à la page Options. Cochez la case Remplacer la base de données existante. Cliquez sur OK.
  8. Vérifiez le contenu de votre base de données, qui est maintenant active sur votre ordinateur local. MySQL a une application pour importer la base de données depuis microsoft sql.
+0

Parfait - cela a fonctionné pour moi. Pour la prochaine (10ème) étape, j'ai utilisé le programme "Import and Export Data" qui est installé avec SQL Express. Il ne pouvait pas exporter vers Excel, mais CSV allait bien. – Ben

+6

s'il vous plaît lire attentivement la question et ensuite répondre. il a écrit une copie de SQL Server vers le serveur sqls mySql au serveur sql " – logcat

6

Étapes:

  1. Ouvrir MySql Workbench
  2. Cliquez sur "Migration Database" (si elle ne vous avez semble pas l'installer de mise à jour MySql)
  3. suivre la migration Liste des tâches à l'aide de l'Assistant simple.
+2

MySql Workbench est nul, il ne peut pas gérer les encodages de caractères assez bon – Xiao

+9

@Sean, si vous voyez un problème avec MySQL Workbench, puis envoyez un rapport de bogue. , donc les implémentations ont besoin de quelques tours pour devenir stables. –

0

Le fichier .bak de SQL Server est spécifique à ce dialecte de base de données et non compatible avec MySQL.

Essayez d'utiliser etlalchemy pour migrer votre base de données SQL Server dans MySQL. C'est un outil open-source que j'ai créé pour faciliter les migrations entre différents SGBDR.

Une installation rapide et des exemples sont fournis ici sur the github page, et une explication plus détaillée des origines du projet peut être trouvée here.

Questions connexes