これらのテーブルに挿入されるテーブル、定義、データを含むMySQLダンプの.sqlファイルがあります。ダンプファイルで表されるこのデータベースをMS SQL Serverデータベースに変換するにはどうすればよいですか?
これらのテーブルに挿入されるテーブル、定義、データを含むMySQLダンプの.sqlファイルがあります。ダンプファイルで表されるこのデータベースをMS SQL Serverデータベースに変換するにはどうすればよいですか?
回答:
SQL Server Migration Assistant(SSMA)を使用する
MySQLに加えて、Oracle、Sybase、MS Accessをサポートしています。
非常にスマートで、重要な転送も処理できるようです。また、(GUIに加えて)いくつかのコマンドラインインターフェイスを備えているため、理論的には、バッチロードプロセスに統合できます。
これはMySQLバージョンの現在のダウンロードリンクhttps://www.microsoft.com/en-us/download/details.aspx?id=54257
現在の(2016年6月)安定バージョン6.0.1は、データの転送中に現在(5.3.6)のMySQL ODBCドライバーでクラッシュします。すべて64ビット。5.1.13 ODBCドライバーを含む5.3バージョンは正常に動作します。
mysqldumpを次のように使用することをお勧めします。
mysqldump --compatible=mssql
phpMyAdminは引き続きWebアプリであり、大規模なデータベース(スクリプトの実行時間、割り当て可能なメモリなど)にいくつかの制限がある可能性があります。
ネットでこれのための方法を見つけました
テーブルごとに行う必要があるため、少し作業が必要です。とにかく、テーブル、データ、制約をMS SQLデータベースにコピーすることができました。
こちらがリンクです
http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx
PhpMyAdminでエクスポートを行う場合、SQL互換モードを「MSSQL」に切り替えることができます。そうすれば、MS SQLデータベースに対してエクスポートされたスクリプトを実行するだけで完了です。
PhpMyAdminを使用できない場合、または使用したくない場合は、mysqldumpに互換性オプションもありますが、個人的には、PhpMyAdminでそれを実行することをお勧めします。
これが.sqlファイルをMS SQLにインポートするための私のアプローチです。
オプションを使用してMySQLからテーブルをエクスポート--compatible=mssql
し--extended-insert=FALSE
ます。
mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql
エクスポートしたファイルをPowerShellでファイルごとに300000行で分割します。
$i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}
MS SQL Server Management Studioで各ファイルを実行する
インサートを高速化するためのいくつかのヒントがあります。
他のアプローチはmysqldump –where
オプションを使用することです。このオプションを使用することで、where
sql句でサポートされている任意の条件でテーブルを分割できます。
--databases [db_name]
この回答で説明されているようにキーワードを試してください:stackoverflow.com/a/26096339/155687
今日、非常によく似た問題がありました。MySqlからMS SQLに大きなテーブル(500万行)をコピーする必要がありました。
これが私が行った手順です(Ubuntu Linuxで):
MySqlのソーステーブルと一致する構造を持つMS SQLでテーブルを作成しました。
インストールされたMS SQLコマンドライン:https : //docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu
MySqlからファイルにダンプされたテーブル:
mysqldump \ -コンパクト\ --complete-insert \ --no-create-info \ --compatible = mssql \ --extended-insert = FALSE \ --host "$ MYSQL_HOST" \ --user "$ MYSQL_USER" \ -p "$ MYSQL_PASS" \ 「$ MYSQL_DB」\ "$ TABLE"> "$ FILENAME"
私の場合、ダンプファイルは非常に大きいため、それをいくつかの小さな部分(各1000行)に分割することにしました。 split --lines=1000 "$FILENAME" part-
最後に、これらの小さなファイルを繰り返し処理し、テキストをいくつか置き換え、MS SQLサーバーに対して1つずつ実行しました。
SQLCMD = / opt / mssql-tools / bin / sqlcmdをエクスポートします x = 0 part- *のファイル 行う echo "ファイル[$ file]をMS SQLにエクスポートしています。$ x千処理されました" #\ 'を' 'に置き換えます sed -i "s / \\\ '/' '/ g" "$ file" #すべて削除します " sed -i 's / "// g'" $ file " #指定した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" エコー "" エコー "" x = $((x + 1)) できた エコー "完了"
もちろん、あなたは次のように私の変数を交換する必要があります$AZURE_SERVER
、$TABLE
あなたに、など。
お役に立てば幸いです。
私にとっては、このコマンドを使用してすべてのデータをエクスポートすることが最もうまくいきました:
mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql
--extended-insert = FALSEは、mssqlの1000行のインポート制限を回避するために必要です。
移行ツールでテーブルを作成したので、backup.sqlファイルからのCREATEが機能するかどうかはわかりません。
MSSQLのSSMSでは、IDフィールドを書き込むために、IDENTITY_INSERT ONを指定してテーブルごとにデータをインポートする必要がありました。
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
関係がある場合は、最初に子をインポートし、外部キーを含むテーブルをインポートする必要があります。
また、「ODBC」+「SQL Serverインポートおよびエクスポートウィザード」を使用することもできます。以下のリンクで説明しています:https : //www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/
実行:
mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql
プロセスバーを表示しますか?
pv mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql