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?
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?
Jawaban:
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.
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).
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
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.
Berikut adalah pendekatan saya untuk mengimpor file .sql ke MS SQL:
Ekspor tabel dari MySQL dengan opsi --compatible=mssql
dan --extended-insert=FALSE
:
mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql
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}
Jalankan setiap file di MS SQL Server Management Studio
Ada beberapa tip bagaimana mempercepat penyisipan .
Pendekatan lainnya adalah dengan menggunakan –where
opsi mysqldump . Dengan menggunakan opsi ini Anda dapat membagi tabel Anda pada kondisi apa pun yang didukung oleh where
klausa sql.
--databases [db_name]
kata kunci seperti yang dijelaskan dalam jawaban ini: stackoverflow.com/a/26096339/155687
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):
Membuat tabel di MS SQL yang strukturnya sesuai dengan tabel sumber di MySql.
Baris perintah MS SQL yang diinstal: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu
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"
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-
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.
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.
Anda juga dapat menggunakan 'ODBC' + 'SQL Server Import and Export Wizard'. Tautan di bawah ini menjelaskannya: https://www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/
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
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