एक MS SQL सर्वर में MySQL डेटाबेस आयात करें


89

मेरे पास एक MySQL डंप है जिसमें टेबल्स, परिभाषा और डेटा इन टेबल में डाले जाने वाली .sql फाइल है। मैं डंप फ़ाइल में प्रतिनिधित्व किए गए इस डेटाबेस को एमएस SQL ​​सर्वर डेटाबेस में कैसे बदल सकता हूं?


1
क्या आपके पास मूल डेटाबेस तक भी पहुँच है? या निर्यात फ़ाइल मूल रूप से आपके पास है?
व्हिक्की

मेरे पास मूल डीबी के लिए भी डे है। मैंने सिर्फ सोचा था कि डंप का उपयोग करना आसान हो सकता है
marionmaiden

जवाबों:


62

SQL सर्वर माइग्रेशन सहायक (SSMA) का उपयोग करें

MySQL के अलावा यह Oracle, Sybase और MS Access को सपोर्ट करता है।

यह काफी स्मार्ट प्रतीत होता है और यहां तक ​​कि nontrivial स्थानान्तरण से निपटने में सक्षम है। इसे कुछ कमांड लाइन इंटरफ़ेस भी मिला (GUI के अलावा) इसलिए सैद्धांतिक रूप से इसे कुछ बैच लोड प्रक्रिया में एकीकृत किया जा सकता है।

MySQL वर्जन के लिए यह वर्तमान डाउनलोड लिंक https://www.microsoft.com/en-us/download/details.aspx?id=54547

वर्तमान (जून 2016) स्थिर संस्करण 6.0.1 डेटा स्थानांतरित करते समय वर्तमान (5.3.6) MySQL ODBC ड्राइवर के साथ क्रैश हो जाता है। सब कुछ 64 बिट। 5.1.13 ODBC ड्राइवर के साथ 5.3 संस्करण ठीक काम करता है।


9
यह टूल तभी काम करता है जब आप अपने PC से अपने MySQL DB में ODBC कनेक्टर स्थापित कर सकते हैं। यदि आपके पास सिर्फ .sql डंप फ़ाइल है तो आप SSMA का उपयोग नहीं कर सकते।
जेक मुनसन

10
MySQL इंजन मुफ्त सॉफ्टवेयर है, और विंडोज़ के लिए एक संस्करण भी है। इसे स्थापित करना और डंप को लोड करना एक तुच्छ काम है। यदि आप एक उपकरण (यहां तक ​​कि एक वाणिज्यिक, अकेले मुक्त) खोजने की उम्मीद कर रहे हैं, जो मज़बूती से एक मनमाने ढंग से MySQL स्क्रिप्ट को अपने SQL सर्वर समकक्ष में बदल देगा - अच्छी तरह से, इसके साथ सौभाग्य।
ज़ार शारदान

1
अच्छी बात। और यही मैंने कल किया। अपनी स्वयं की कस्टम रूपांतरण उपयोगिता लिखने के लिए, MySQL स्थापित करना सबसे अच्छा विकल्प लगता है। SSMA उपयोग करने के लिए बट में दर्द था, लेकिन मुझे अंततः यह काम करने के लिए मिला।
जेक मुनसन

2
SSMA एक बेहतरीन विकल्प है, यह स्वीकृत उत्तर होना चाहिए। मुझे इसका उपयोग करना कठिन नहीं लगा।
डॉनबेकर

2
इसमें SQL सर्वर एजेंट की आवश्यकता होती है जो SQL सर्वर एक्सप्रेस के साथ नहीं आता है।
विनीसियस रोचा

18

मेरा सुझाव है कि आप mysqldump का उपयोग करना चाहते हैं:

mysqldump --compatible=mssql

phpMyAdmin अभी भी एक वेब-ऐप है और संभवतः बड़े डेटाबेस (स्क्रिप्ट निष्पादन समय, आवंटन योग्य स्मृति और इसी तरह) के लिए कुछ सीमाएं हो सकती हैं ।


6
काश, इससे मुझे हर तरह की अनुकूलता मिलती। स्क्रिप्ट में कॉलम के नाम, डेटा प्रकार जो MSSQL में मौजूद नहीं हैं, के आसपास बैकटिक्स होंगे, अधिकतम-1000-आवेषण बाधा, ऑटो_साइनमेंट कीवर्ड आदि का उल्लंघन करेंगे। आदि यह एक तार्किक सुझाव है, लेकिन मुझे डर है कि यह नहीं है टी बहुत अच्छी तरह से काम (कम से कम: यह मेरे लिए नहीं था)।
Jeroen

mysqldump --compatible = ansi "अन्य डेटाबेस सिस्टम के साथ या पुराने MySQL सर्वर के साथ अधिक सुसंगत आउटपुट उत्पन्न करता है। इस विकल्प के लिए एकमात्र अनुमत मान एएनएसआई है, जिसका सर्वर SQL मोड सेट करने के लिए इसी विकल्प के समान अर्थ है।"
थॉमस टेलर

14

मुझे इसके लिए नेट पर एक रास्ता मिला

यह थोड़ा काम मांगता है, क्योंकि इसे टेबल से टेबल पर करना होता है। लेकिन फिर भी, मैं एक MS SQL डेटाबेस में तालिकाओं, डेटा और बाधाओं को कॉपी कर सकता हूं।

लिंक यहां दिया गया है

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


1
यह तब होता है जब मैसकल और एसक्यूएल दोनों एक मशीन में होते हैं या वे एक नेटवर्क के माध्यम से जुड़े होते हैं। यह उपयोगी नहीं है जब दो अलग-अलग मशीन मौजूद हैं और आपके पास mysql से एक डंप फ़ाइल है। सही?
एस्पांता

7

यदि आप PhpMyAdmin के साथ एक निर्यात करते हैं , तो आप sql संगतता मोड को 'MSSQL' में बदल सकते हैं। इस तरह आप सिर्फ अपने MS SQL डेटाबेस के खिलाफ निर्यात की गई स्क्रिप्ट चलाते हैं और आपका काम हो गया।

यदि आप PhpMyAdmin का उपयोग नहीं कर सकते हैं या नहीं करना चाहते हैं, तो mysqldump में एक अनुकूलता विकल्प भी है , लेकिन व्यक्तिगत रूप से मेरे पास PhpMyAdmin होगा।


1
इस उत्तर ने मेरे लिए काम किया, उत्पन्न स्क्रिप्ट के न्यूनतम संशोधनों के साथ। SQL सर्वर 2012 में लाया गया। इससे पहले संगतता मोड नहीं देखा था।
कील

7

यहाँ MS SQL में .sql फ़ाइलों को आयात करने के लिए मेरा दृष्टिकोण है:

  1. MySQL से निर्यात तालिका --compatible=mssqlऔर --extended-insert=FALSEविकल्पों के साथ :

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

  2. निर्यात की गई फ़ाइल को PowerShell के साथ प्रति फ़ाइल 300000 पंक्तियों के साथ विभाजित करें:

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

  3. MS SQL सर्वर प्रबंधन स्टूडियो में प्रत्येक फ़ाइल चलाएँ

आवेषण में तेजी लाने के लिए कुछ सुझाव दिए गए हैं ।

अन्य दृष्टिकोण mysqldump –whereविकल्प का उपयोग करना है । इस विकल्प का उपयोग करके आप अपनी तालिका को किसी भी शर्त पर विभाजित कर सकते हैं जो कि wheresql खंड द्वारा समर्थित है ।


हम टेबल के बजाय टेबल के बजाय पूरे डेटाबेस को कैसे निर्यात कर सकते हैं
मॉन्स्टरएमआरपीजी

--databases [db_name]कीवर्ड को आज़माएं क्योंकि इस उत्तर में बताया गया है: stackoverflow.com/a/26096339/155687
व्लादिस्लाव

4

आज मेरे पास एक समान मुद्दा था - मुझे MS SQL में MySql से एक बड़ी तालिका (5 लाख पंक्तियों) की प्रतिलिपि बनाने की आवश्यकता थी।

यहां वे चरण हैं जो मैंने (उबंटू लिनक्स के तहत) किए हैं:

  1. MS SQL में एक तालिका बनाई गई है जो संरचना MySql में स्रोत तालिका से मेल खाती है।

  2. स्थापित MS SQL कमांड लाइन: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu

  3. MySql से फ़ाइल में डंप की गई तालिका:

mysqldump \
    - संपर्क करें
    - अधूरा-डालें \
    -नहीं-बनाएँ-जानकारी \
    - असंगत = mssql \
    - अनुकूलित-सम्मिलित = FALSE \
    --होस्ट "$ MYSQL_HOST"
    --user "$ MYSQL_USER"
    -p "$ MYSQL_PASS"
    "$ MYSQL_DB"
    "$ TABLE"> "$ FILENAME"
  1. मेरे मामले में डंप फ़ाइल काफी बड़ी थी, इसलिए मैंने इसे कई छोटे टुकड़ों में विभाजित करने का निर्णय लिया (प्रत्येक 1000 लाइनें) - split --lines=1000 "$FILENAME" part-

  2. अंत में मैंने इन छोटी फाइलों पर ध्यान दिया, कुछ पाठ प्रतिस्थापन किए, और एमएस SQL ​​सर्वर के खिलाफ एक-एक करके टुकड़ों को निष्पादित किया:

निर्यात SQLCMD = / opt / mssql-tools / bin / sqlcmd

x = 0

भाग में फाइल के लिए- *
करना
  "निर्यात फ़ाइल [$ फ़ाइल] को MS SQL में इको करें। $ x हज़ार (संसाधित) किए गए"

  # की जगह '' ''
  sed -i "s / \\\ '/' '/ g" "$ फ़ाइल"

  # सभी को निकालता है "
  sed -i 's / "// g'" $ फ़ाइल "

  # निर्दिष्ट पीके (आईडी) के साथ रिकॉर्ड डालने की अनुमति देता है
  sed -i "1s / ^ / सेट IDENTITY_INSERT $ TABLE ON, \ n /" "20 फ़ाइल"

  "$ SQLCMD" -S "$ AZURE_SERVER" -d "$ AZURE_DB" -U "$ AZURE_USER"--P "$ AZURE_PASS" -i "$ फ़ाइल"
  गूंज ""
  गूंज ""

  एक्स = $ ((x + 1))
किया हुआ

इको "हो गया"

बेशक आप की तरह मेरे चर बदलना भी होगा $AZURE_SERVER, $TABLEतुम्हारा साथ, आदि।

उम्मीद है की वो मदद करदे।


2

मेरे लिए इस आदेश के साथ सभी डेटा निर्यात करने के लिए सबसे अच्छा काम किया:

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

--extended- सम्मिलित करें = mssql 1000 पंक्तियों आयात सीमा से बचने के लिए FALSE की आवश्यकता है।

मैंने अपने माइग्रेशन टूल के साथ अपनी तालिकाओं को बनाया है, इसलिए मुझे यकीन नहीं है कि अगर 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 

यदि आपके पास रिश्ते हैं तो आपको बच्चे को विदेशी कुंजी के साथ तालिका से पहले और आयात करना होगा।



हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.