MySQL veritabanını bir MS SQL Sunucusuna aktarın


92

MySQL dökümünden bu tablolara eklenecek tablolar, tanımlar ve veriler içeren bir .sql dosyam var. Döküm dosyasında temsil edilen bu veritabanını bir MS SQL Server veritabanına nasıl dönüştürebilirim?


1
Orijinal veritabanına da erişiminiz var mı? Yoksa dışa aktarma dosyası temelde sahip olduğunuz tek şey mi?
Whakkee

Orijinal DB'ye de erişimim var.
Çöpü

Yanıtlar:


62

Kullanım SQL Server Migration Assistant (SSMA)

MySQL'e ek olarak Oracle, Sybase ve MS Access'i destekler.

Oldukça akıllı görünüyor ve önemsiz transferleri bile idare edebiliyor. Ayrıca bazı komut satırı arayüzüne de (GUI'ye ek olarak) sahiptir, bu nedenle teorik olarak bazı toplu yükleme işlemlerine entegre edilebilir.

Bu MySQL sürümü için mevcut indirme bağlantısı https://www.microsoft.com/en-us/download/details.aspx?id=54257

Mevcut (Haziran 2016) kararlı sürüm 6.0.1, veri aktarımı sırasında mevcut (5.3.6) MySQL ODBC sürücüsüyle çöküyor. Her şey 64 bit. 5.1.13 ODBC sürücüsüne sahip 5.3 sürümü iyi çalışıyor.


9
Bu araç yalnızca PC'nizden MySQL DB'nize bir ODBC konektörü kurabilirseniz çalışır. Yalnızca bir .sql döküm dosyanız varsa, SSMA kullanamazsınız.
Jake Munson

10
MySQL motoru ücretsiz bir yazılımdır ve Windows için de bir sürümü vardır. Onu kurmak ve dökümü yüklemek önemsiz bir iştir. Rasgele bir MySQL betiğini güvenilir bir şekilde SQL Server eşdeğerine dönüştürecek bir araç (hatta bir reklam, ücretsiz) bulmayı umuyorsanız - peki, bunda iyi şanslar.
Zar Shardan

1
İyi bir nokta. Ve dün yaptığım şey bu. Kendi özel dönüştürme aracınızı yazmanın kısası, MySQL'i kurmak en iyi seçenek gibi görünüyor. SSMA, kullanmak için can sıkıcı bir durumdu, ama sonunda işe yaradım.
Jake Munson

2
SSMA harika bir seçenektir, kabul edilen cevap bu olmalıdır. Kullanmayı hiç zor bulmadım.
DonBecker

2
SQL Server Express ile birlikte gelmeyen SQL Server Agent gerektirir.
Vinicius Rocha

18

Mysqldump'ı şu şekilde kullanmanızı öneririm :

mysqldump --compatible=mssql

phpMyAdmin hala bir web uygulamasıdır ve büyük veritabanları için potansiyel olarak bazı sınırlamalara sahip olabilir (komut dosyası yürütme süresi, ayrılabilir bellek vb.).


6
Ne yazık ki, bu bana her türlü uyumluluk problemi veriyor. Komut dosyası, sütun adları, MSSQL'de bulunmayan veri türleri etrafında geri işaretler içerecek, maksimum 1000 ekleme kısıtlamasını, auto_increment anahtar sözcüklerini vb. İhlal edecek. Bu yanıt mantıklı bir öneridir, ancak korkarım ki öyle değil Çok iyi çalışmıyor (en azından benim için olmadı).
Jeroen

mysqldump --compatible = ansi "Diğer veritabanı sistemleriyle veya daha eski MySQL sunucularıyla daha uyumlu çıktı üretin. Bu seçenek için izin verilen tek değer, sunucu SQL modunu ayarlamak için karşılık gelen seçenekle aynı anlama sahip olan ansi'dir."
Thomas Taylor

14

İnternette bunun için bir yol buldum

Biraz çalışma gerektiriyor, çünkü masa masa yapılması gerekiyor. Ama yine de tabloları, verileri ve kısıtlamaları bir MS SQL veritabanına kopyalayabilirim.

Bağlantı burada

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


1
Bu, hem Mysql hem de SQL'in bir makinede olduğu veya bir ağ üzerinden bağlandığı zamandır. Bu, iki farklı makine varken ve mysql'den bir Döküm dosyanız olduğunda kullanışlı değildir. sağ?
Espanta

7

PhpMyAdmin ile bir dışa aktarma yaparsanız, sql uyumluluk modunu 'MSSQL' olarak değiştirebilirsiniz. Bu şekilde, dışa aktarılan komut dosyasını MS SQL veritabanınızda çalıştırırsınız ve bitirdiniz.

PhpMyAdmin'i kullanamazsanız veya kullanmak istemiyorsanız, mysqldump'ta da bir uyumluluk seçeneği vardır , ancak şahsen PhpMyAdmin'in bunu benim için yapmasını tercih ederim.


1
Bu cevap, oluşturulan komut dosyasında minimum değişikliklerle benim için çalıştı. SQL Server 2012'ye getirildi. Uyumluluk modunu daha önce görmemiştim.
Kiel

7

.Sql dosyalarını MS SQL'e içe aktarma yaklaşımım:

  1. Tabloyu MySQL'den --compatible=mssqlve --extended-insert=FALSEseçenekleriyle dışa aktar :

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

  2. Dışa aktarılan dosyayı PowerShell ile dosya başına 300000 satıra bölün:

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

  3. Her dosyayı MS SQL Server Management Studio'da çalıştırın

Eklerin nasıl hızlandırılacağı konusunda birkaç ipucu var .

Diğer bir yaklaşım mysqldump –whereseçeneğini kullanmaktır . Bu seçeneği kullanarak tablonuzu wheresql cümlesinin desteklediği herhangi bir koşula bölebilirsiniz .


tablo yerine tüm veritabanını nasıl dışa aktarabiliriz
MonsterMMORPG

--databases [db_name]anahtar kelimeyi bu cevapta açıklandığı gibi deneyin : stackoverflow.com/a/26096339/155687
Vladislav

4

Bugün çok benzer bir sorunla karşılaştım - büyük bir tabloyu (5 milyon satır) MySql'den MS SQL'e kopyalamam gerekiyordu.

İşte yaptığım adımlar (Ubuntu Linux altında):

  1. MS SQL'de MySql'deki kaynak tabloyla eşleşen yapıya sahip bir tablo oluşturuldu.

  2. Yüklü MS SQL komut satırı: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu

  3. MySql'den bir dosyaya dökülmüş tablo:

mysqldump \
    --compact \
    --complete-insert \
    --no-create-info \
    --compatible = mssql \
    --extended-insert = FALSE \
    - ana bilgisayar "$ MYSQL_HOST" \
    - kullanıcı "$ MYSQL_USER" \
    -p "$ MYSQL_PASS" \
    "$ MYSQL_DB" \
    "$ TABLE"> "$ FILENAME"
  1. Benim durumumda döküm dosyası oldukça büyüktü, bu yüzden onu birkaç küçük parçaya bölmeye karar verdim (her biri 1000 satır) - split --lines=1000 "$FILENAME" part-

  2. Sonunda bu küçük dosyalar üzerinde yineledim, bazı metin değiştirmeleri yaptım ve parçaları tek tek MS SQL sunucusuna uyguladım:

dışa aktar SQLCMD = / opt / mssql-tools / bin / sqlcmd

x = 0

kısmen dosya için *
yapmak
  echo "[$ dosya] dosyası MS SQL'e aktarılıyor. $ x bin işlendi"

  #, \ 'ile' 'değiştirir
  sed -i "s / \\\ '/' '/ g" "$ dosya"

  # hepsini kaldırır "
  sed -i 's / "// g'" $ dosya "

  # belirtilen PK (id) ile kayıt eklemeye izin verir
  sed -i "1s / ^ / SET IDENTITY_INSERT $ TABLE ON; \ n /" "$ dosya"

  "$ SQLCMD" -S "$ AZURE_SERVER" -d "$ AZURE_DB" -U "$ AZURE_USER" -P "$ AZURE_PASS" -i "$ dosya"
  Eko ""
  Eko ""

  x = $ ((x + 1))
bitti

echo "Bitti"

Tabii ki $AZURE_SERVER, gibi değişkenlerimi $TABLEsizinki ile değiştirmeniz gerekecek .

Umarım yardımcı olur.


3

Benim için tüm verileri bu komutla dışa aktarmak en iyisi oldu:

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

--extended-insert = FALSE, mssql 1000 satır içe aktarma sınırını önlemek için gereklidir.

Tablolarımı taşıma aracımla oluşturdum, bu yüzden backup.sql dosyasından CREATE'in çalışıp çalışmayacağından emin değilim.

MSSQL'in SSMS'sinde, ID alanlarını yazmak için veri tablosunu IDENTITY_INSERT ON ile tabloya aktarmam gerekiyordu:

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 

İlişkileriniz varsa, önce çocuğu sonra da yabancı anahtarın bulunduğu tabloyu içe aktarmanız gerekir.



0

Çalıştırmak:

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

Bir işlem çubuğu görmek ister misiniz?

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

0

mysql'den sqlserver'a dönüştürmek için sqlie uygulamasını kullanabilirsiniz https://www.youtube.com/watch?v=iTVEqys_vTQ&t=108s bu videoyu izleyebilirsiniz


1
Stackoverflow @gorgino'ya hoş geldiniz! Bir bağlantı gönderirseniz, bağlantının gelecekte kesilmesi ihtimaline karşı lütfen içeriğin kısa bir özetini de gönderin. Bağlama ağırlıklı değil, cevabınızı genişletmek için kullanılması gerektiğini olmak Cevabınız.
Cribber
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.