web-dev-qa-db-ja.com

SQL Server .bakファイルをMySQLにインポートする方法は?

タイトルは自明です。そのような種類のインポートを直接行う方法はありますか?

59
Marcel

SQLサーバーからの.BAKファイルは、Microsoft Tape Format(MTF)ref: http://www.fpns.net/willy/msbackup.htm にあります。

Bakファイルには、おそらくLDFと、SQLサーバーがデータベースの保存に使用するMDFファイルが含まれます。

これらを抽出するには、SQLサーバーを使用する必要があります。 SQL Server Expressは無料で、仕事をします。

そのため、SQL Server Expressエディションをインストールし、SQL Server Powershellを開きます。そこでsqlcmd -S <COMPUTERNAME>\SQLExpressを実行します(管理者としてログインしている間)

その後、次のコマンドを発行します。

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

これにより、バックアップの内容が一覧表示されます-必要なのは、論理名を示す最初のフィールドです-1つは実際のデータベースで、もう1つはログファイルです。

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

この時点で、データベースを抽出しました。次に、 Microsoftの「Sql Web Data Administrator」このエクスポートツール と一緒にインストールすると、データベースを含むSQLスクリプトが作成されます。

65

MySqlには、Microsoft SQLからdbをインポートするアプリケーションがあります。手順:

  1. MySql Workbenchを開きます
  2. 「データベースの移行」をクリックします(表示されない場合は、MySql updateからインストールする必要があります)
  3. シンプルなウィザードを使用して、移行タスクリストに従います。
8
AutoCiudad

私はそれを直接行う方法を見つけることができませんでした。

代わりに、bakファイルをSQL Server 2008 Expressにインポートし、 MySQL Migration Toolkit を使用しました。

魅力のように働いた!

8
Marcel
  1. ローカルマシンでSQL Server Management Studioを開きます。
  2. [データベース]フォルダーを右クリックします。ポップアップメニューから、[新しいデータベース]を選択します。
  3. データベース名を入力し、[OK]をクリックします。
  4. 新しいデータベースのアイコンを右クリックします。ポップアップメニューから、[タスク]-> [復元]-> [データベース]を選択します。
  5. [デバイスから]オプションを選択し、[参照]ボタンをクリックします。
  6. [追加]をクリックして、適切なファイルに移動します。 OKをクリックします。
  7. [データベースの復元]ウィンドウで、BAKファイルの横にあるチェックボックスを選択します。
  8. [オプション]ページに切り替えます。 [既存のデータベースを上書きする]チェックボックスを選択します。 OKをクリックします。
  9. ローカルマシンでアクティブになっているデータベースの内容を確認します。
3
RollerCosta

私のMySQLのバックグラウンドは限られていますが、それを行うのにそれほど幸運があるとは思いません。ただし、dbをMSSQLサーバーに復元し、SSISまたはDTSパッケージを作成してMySQLサーバーにテーブルとデータを送信することにより、すべてのデータを移行できます。

お役に立てれば

2
Levi Rosol

SQL Serverの.bakファイルは、そのデータベース方言に固有のものであり、MySQLと互換性がありません。

etlalchemy を使用して、SQL ServerデータベースをMySQLに移行してみてください。これは、異なるRDBMS間で簡単に移行できるようにするために作成したオープンソースのツールです。

クイックインストールと例は githubページ にあり、プロジェクトの起源の詳細な説明は here にあります。

1
The Aelfinn

上記のリチャードの解決策を試みている人のために、一般的なエラーをナビゲートするのに役立つかもしれないいくつかの追加情報があります:

1)restore filelistonlyを実行すると、オペレーティングシステムエラー5(アクセスが拒否されました)が表示される場合があります。その場合は、SQL Server構成マネージャーを開き、SQLEXPRESSのログインをローカルの書き込み特権を持つユーザーに変更します。

2)@「これはバックアップの内容をリストします-必要なのは論理名を示す最初のフィールドです」-ファイルに3つ以上のヘッダーがリストされている場合は、それらのファイルの処理も考慮する必要がありますRESTORE DATABASEコマンド。データベースとログ以外のファイルの処理を指定しない場合、システムは明らかに.bakファイルにリストされている属性を使用しようとします。他の人の環境からファイルを復元すると、「パスに無効な属性があります。これはディレクトリである必要があります(対象のパスがマシン上に存在しないため)。 MOVEステートメントを提供するだけでこの問題は解決します。

私の場合、3番目のFTDataタイプのファイルがありました。追加したMOVEコマンド:

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

私の場合、実際には3番目のファイル用に新しいディレクトリを作成する必要がありました。最初に.mdfファイルと同じフォルダーに送信しようとしましたが、復元を実行したときに3番目のFTDataファイルで「正しく初期化に失敗しました」というエラーが発生しました。

0
Andrew

私が使用した方法には、Richard Harrisonの方法の一部が含まれていました。

そのため、SQL Server 2008 Expressエディションをインストールし、

これには、Web Platform Installer "wpilauncher_n.exe"のダウンロードが必要です。インストールしたら、データベースの選択をクリックします(フレームワークとランタイムもダウンロードする必要があります)

インストール後、Windowsコマンドプロンプトに移動し、次の操作を行います。

sqlcmd -S\SQLExpressを使用します(管理者としてログインしている間)

その後、次のコマンドを発行します。

disk = 'c:\ temp\mydbName-2009-09-29-v10.bak'からfilelistonlyを復元します; GOこれにより、バックアップの内容が一覧表示されます-必要なのは、論理名を示す最初のフィールドです-1つは実際のデータベースで、もう1つはログファイルです。

Disk = 'c:\ temp\mydbName-2009-09-29-v10.bakからデータベースmydbNameをRESTORE MOVE' mydbName 'TO' c:\ temp\mydbName_data.mdf '、MOVE' mydbName_log 'TO' c:\ temp\mydbName_data.ldf ';行く

Web Platform Installerを起動し、新しいタブからSQL Server Management Studioをインストールし、dbを参照してデータがそこにあることを確認しました...

その時点で、MSSQLに含まれるツール「SQL Import and Export Wizard」を試しましたが、csvダンプの結果には列名のみが含まれていました...

その代わり、SQL Server Management Studioから「select * from users」などのクエリの結果をエクスポートしただけです。

0
Traveling_Monk

私はそれを非常に疑います。 Leviが言うように、DTS/SSISを使用してこれを行うことができます。実際にデータをインポートせずにプロセスを開始することをお勧めします。基本的なテーブル構造をまとめるだけで十分です。次に、tatが作成される可能性のある構造はせいぜい不安定になるため、結果のテーブル構造を変更する必要があります。

また、これをさらに一歩進めて、最初にすべてのデータを文字列(varchar)形式で取り込むステージング領域を作成する必要があります。次に、検証と変換を実行して「実際の」データベースに入れるスクリプトを作成できます。これは、特に日付を扱う場合、2つのデータベースが常に適切に機能するとは限らないためです。

0
Charles Graham

SQL Serverデータベースは、マイクロソフト独自のものです。私が考えることができる2つのオプションは次のとおりです。

  1. データベースをCSV、XML、または同様の形式でダンプし、MySQLにロードします。

  2. セットアップODBC MySQLへの接続とDTS=データの転送。CharlesGrahamが示唆したように、これを行う前にテーブルを構築する必要があります。しかし、それはSQL Enterprise Managerウィンドウから対応するMySQLウィンドウへのカットアンドペーストと同じくらい簡単です。

0
CyberFonic