Impor database MySQL ke dalam MS SQL Server


92

Saya memiliki file .sql dari dump MySQL yang berisi tabel, definisi, dan data untuk dimasukkan ke dalam tabel ini. Bagaimana cara mengubah database ini yang direpresentasikan dalam file dump ke database MS SQL Server?


1
Apakah Anda juga memiliki akses ke database asli? Atau hanya file ekspor yang Anda miliki?
Whakkee

Saya juga memiliki akses ke DB asli. Saya hanya berpikir bahwa menggunakan tempat pembuangan sampah mungkin lebih mudah
marionmaiden

Jawaban:


62

Gunakan SQL Server Migration Assistant (SSMA)

Selain MySQL, ini mendukung Oracle, Sybase dan MS Access.

Tampaknya cukup pintar dan mampu menangani bahkan transfer nontrivial. Itu juga mendapat beberapa antarmuka baris perintah (selain GUI) sehingga secara teoritis dapat diintegrasikan ke dalam beberapa proses pemuatan batch.

Ini tautan unduhan saat ini untuk versi MySQL https://www.microsoft.com/en-us/download/details.aspx?id=54257

Versi stabil 6.0.1 saat ini (Juni 2016) mengalami crash dengan driver MySQL ODBC (5.3.6) saat mentransfer data. Semuanya 64 bit. Versi 5.3 dengan driver ODBC 5.1.13 berfungsi dengan baik.


9
Alat ini hanya berfungsi jika Anda dapat menginstal konektor ODBC dari PC Anda ke MySQL DB Anda. Jika Anda hanya memiliki file dump .sql, Anda tidak dapat menggunakan SSMA.
Jake Munson

10
Mesin MySQL adalah perangkat lunak gratis, dan ada juga versi untuk windows. Memasangnya dan memuat dump adalah pekerjaan yang sepele. Jika Anda berharap menemukan alat (bahkan yang komersial, apalagi gratis) yang andal akan mengubah skrip MySQL sewenang-wenang menjadi SQL Server yang setara - semoga berhasil.
Zar Shardan

1
Poin yang bagus. Dan itulah yang akhirnya saya lakukan kemarin. Singkatnya menulis utilitas konversi kustom Anda sendiri, menginstal MySQL tampaknya menjadi pilihan terbaik. SSMA sangat sulit digunakan, tetapi akhirnya saya berhasil.
Jake Munson

2
SSMA adalah pilihan yang bagus, ini harus menjadi jawaban yang diterima. Saya tidak merasa sulit untuk menggunakannya sama sekali.
DonBecker

2
Ini memerlukan Agen Server SQL yang tidak disertakan dengan SQL Server Express.
Vinicius Rocha

18

Saya menyarankan Anda untuk menggunakan mysqldump seperti ini:

mysqldump --compatible=mssql

phpMyAdmin masih merupakan aplikasi web dan berpotensi memiliki beberapa batasan untuk database besar (waktu eksekusi skrip, memori yang dapat dialokasikan, dan sebagainya).


6
Sayangnya, ini memberi saya segala macam masalah kompatibilitas. Script akan berisi backticks di sekitar nama kolom, tipe data yang tidak ada di MSSQL, akan melanggar max-1000-inserts constraint, auto_increment keywords, dll. Dll. Jawaban ini adalah saran yang logis, tapi sayangnya tidak. tidak bekerja terlalu baik (setidaknya: itu tidak untuk saya).
Jeroen

mysqldump --compatible = ansi "Menghasilkan keluaran yang lebih kompatibel dengan sistem database lain atau dengan server MySQL yang lebih lama. Satu-satunya nilai yang diizinkan untuk opsi ini adalah ansi, yang memiliki arti yang sama dengan opsi terkait untuk menyetel mode SQL server."
Thomas Taylor

14

Saya menemukan cara untuk ini di internet

Ini menuntut sedikit pekerjaan, karena itu harus dilakukan tabel demi tabel. Tapi bagaimanapun, saya bisa menyalin tabel, data dan batasan ke dalam database MS SQL.

Ini tautannya

http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx


1
Saat itulah Mysql dan SQL berada dalam satu mesin atau keduanya terhubung melalui jaringan. Ini tidak berguna bila ada dua mesin berbeda dan Anda memiliki file Dump dari mysql. Baik?
Espanta

7

Jika Anda melakukan ekspor dengan PhpMyAdmin , Anda dapat mengalihkan mode kompatibilitas sql ke 'MSSQL'. Dengan cara itu Anda hanya menjalankan skrip yang diekspor ke database MS SQL Anda dan selesai.

Jika Anda tidak dapat atau tidak ingin menggunakan PhpMyAdmin, ada juga opsi kompatibilitas di mysqldump , tetapi secara pribadi saya lebih suka PhpMyAdmin melakukannya untuk saya.


1
Jawaban ini berhasil untuk saya, dengan sedikit modifikasi pada skrip yang dihasilkan. Membawanya ke SQL Server 2012. Tidak melihat mode kompatibilitas sebelumnya.
Kiel

7

Berikut adalah pendekatan saya untuk mengimpor file .sql ke MS SQL:

  1. Ekspor tabel dari MySQL dengan opsi --compatible=mssqldan --extended-insert=FALSE:

    mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql

  2. Pisahkan file yang diekspor dengan PowerShell dengan 300.000 baris per file:

    $i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}

  3. Jalankan setiap file di MS SQL Server Management Studio

Ada beberapa tip bagaimana mempercepat penyisipan .

Pendekatan lainnya adalah dengan menggunakan –whereopsi mysqldump . Dengan menggunakan opsi ini Anda dapat membagi tabel Anda pada kondisi apa pun yang didukung oleh whereklausa sql.


bagaimana kita bisa mengekspor seluruh database alih-alih tabel demi tabel
MonsterMMORPG

coba --databases [db_name]kata kunci seperti yang dijelaskan dalam jawaban ini: stackoverflow.com/a/26096339/155687
Vladislav

4

Saya mengalami masalah yang sangat mirip hari ini - saya perlu menyalin tabel besar (5 juta baris) dari MySql ke MS SQL.

Berikut langkah-langkah yang telah saya lakukan (di bawah Ubuntu Linux):

  1. Membuat tabel di MS SQL yang strukturnya sesuai dengan tabel sumber di MySql.

  2. Baris perintah MS SQL yang diinstal: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu

  3. Tabel yang dibuang dari MySql ke file:

mysqldump \
    --compact \
    --complete-insert \
    --tidak ada info-buat \
    --compatible = mssql \
    --extended-insert = FALSE \
    --host "$ MYSQL_HOST" \
    --pengguna "$ MYSQL_USER" \
    -p "$ MYSQL_PASS" \
    "$ MYSQL_DB" \
    "$ TABLE"> "$ FILENAME"
  1. Dalam kasus saya, file dump cukup besar, jadi saya memutuskan untuk membaginya menjadi beberapa bagian kecil (masing-masing 1000 baris) - split --lines=1000 "$FILENAME" part-

  2. Akhirnya saya mengulangi file-file kecil ini, melakukan beberapa penggantian teks, dan mengeksekusi bagian-bagian itu satu per satu terhadap server MS SQL:

ekspor SQLCMD = / opt / mssql-tools / bin / sqlcmd

x = 0

untuk file di bagian- *
melakukan
  echo "Mengekspor file [$ file] ke MS SQL. $ x ribu diproses"

  # menggantikan \ 'dengan' '
  sed -i "s / \\\ '/' '/ g" "$ file"

  # hapus semua "
  sed -i 's / "// g'" $ file "

  # memungkinkan untuk memasukkan catatan dengan PK (id) tertentu
  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))
selesai

echo "Selesai"

Tentu saja Anda harus mengganti variabel saya seperti $AZURE_SERVER, $TABLE, dll dengan Anda.

Semoga membantu.


3

Bagi saya, ini bekerja paling baik untuk mengekspor semua data dengan perintah ini:

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

--extended-insert = FALSE diperlukan untuk menghindari batas impor mssql 1000 baris.

Saya membuat tabel saya dengan alat migrasi saya, jadi saya tidak yakin apakah CREATE dari file backup.sql akan berfungsi.

Dalam SSMS MSSQL saya harus mengimpor tabel data dengan tabel dengan IDENTITY_INSERT ON untuk menulis bidang 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 

Jika Anda memiliki hubungan, Anda harus mengimpor anak terlebih dahulu dan kemudian tabel dengan kunci asing.



0

Lari:

mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql

Apakah Anda ingin melihat bilah proses?

pv mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql

0

Anda dapat menggunakan aplikasi sqlie untuk mengkonversi dari mysql ke sqlserver Anda dapat menonton video ini https://www.youtube.com/watch?v=iTVEqys_vTQ&t=108s


1
Selamat datang di Stackoverflow @gorgino! Jika Anda memposting link, harap posting juga ringkasan singkat kontennya jika link tersebut akan turun di masa mendatang. Menghubungkan terutama harus digunakan untuk memperluas jawaban Anda, tidak menjadi jawaban Anda.
Cribber
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.