मेरे पास एक MySQL डंप है जिसमें टेबल्स, परिभाषा और डेटा इन टेबल में डाले जाने वाली .sql फाइल है। मैं डंप फ़ाइल में प्रतिनिधित्व किए गए इस डेटाबेस को एमएस SQL सर्वर डेटाबेस में कैसे बदल सकता हूं?
मेरे पास एक MySQL डंप है जिसमें टेबल्स, परिभाषा और डेटा इन टेबल में डाले जाने वाली .sql फाइल है। मैं डंप फ़ाइल में प्रतिनिधित्व किए गए इस डेटाबेस को एमएस SQL सर्वर डेटाबेस में कैसे बदल सकता हूं?
जवाबों:
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 संस्करण ठीक काम करता है।
मेरा सुझाव है कि आप mysqldump का उपयोग करना चाहते हैं:
mysqldump --compatible=mssql
phpMyAdmin अभी भी एक वेब-ऐप है और संभवतः बड़े डेटाबेस (स्क्रिप्ट निष्पादन समय, आवंटन योग्य स्मृति और इसी तरह) के लिए कुछ सीमाएं हो सकती हैं ।
मुझे इसके लिए नेट पर एक रास्ता मिला
यह थोड़ा काम मांगता है, क्योंकि इसे टेबल से टेबल पर करना होता है। लेकिन फिर भी, मैं एक MS SQL डेटाबेस में तालिकाओं, डेटा और बाधाओं को कॉपी कर सकता हूं।
लिंक यहां दिया गया है
http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx
यदि आप PhpMyAdmin के साथ एक निर्यात करते हैं , तो आप sql संगतता मोड को 'MSSQL' में बदल सकते हैं। इस तरह आप सिर्फ अपने MS SQL डेटाबेस के खिलाफ निर्यात की गई स्क्रिप्ट चलाते हैं और आपका काम हो गया।
यदि आप PhpMyAdmin का उपयोग नहीं कर सकते हैं या नहीं करना चाहते हैं, तो mysqldump में एक अनुकूलता विकल्प भी है , लेकिन व्यक्तिगत रूप से मेरे पास PhpMyAdmin होगा।
यहाँ MS SQL में .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 सर्वर प्रबंधन स्टूडियो में प्रत्येक फ़ाइल चलाएँ
आवेषण में तेजी लाने के लिए कुछ सुझाव दिए गए हैं ।
अन्य दृष्टिकोण mysqldump –where
विकल्प का उपयोग करना है । इस विकल्प का उपयोग करके आप अपनी तालिका को किसी भी शर्त पर विभाजित कर सकते हैं जो कि where
sql खंड द्वारा समर्थित है ।
--databases [db_name]
कीवर्ड को आज़माएं क्योंकि इस उत्तर में बताया गया है: stackoverflow.com/a/26096339/155687
आज मेरे पास एक समान मुद्दा था - मुझे MS SQL में MySql से एक बड़ी तालिका (5 लाख पंक्तियों) की प्रतिलिपि बनाने की आवश्यकता थी।
यहां वे चरण हैं जो मैंने (उबंटू लिनक्स के तहत) किए हैं:
MS SQL में एक तालिका बनाई गई है जो संरचना MySql में स्रोत तालिका से मेल खाती है।
स्थापित MS SQL कमांड लाइन: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu
MySql से फ़ाइल में डंप की गई तालिका:
mysqldump \ - संपर्क करें - अधूरा-डालें \ -नहीं-बनाएँ-जानकारी \ - असंगत = mssql \ - अनुकूलित-सम्मिलित = FALSE \ --होस्ट "$ MYSQL_HOST" --user "$ MYSQL_USER" -p "$ MYSQL_PASS" "$ MYSQL_DB" "$ TABLE"> "$ FILENAME"
मेरे मामले में डंप फ़ाइल काफी बड़ी थी, इसलिए मैंने इसे कई छोटे टुकड़ों में विभाजित करने का निर्णय लिया (प्रत्येक 1000 लाइनें) - split --lines=1000 "$FILENAME" part-
अंत में मैंने इन छोटी फाइलों पर ध्यान दिया, कुछ पाठ प्रतिस्थापन किए, और एमएस 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
तुम्हारा साथ, आदि।
उम्मीद है की वो मदद करदे।
मेरे लिए इस आदेश के साथ सभी डेटा निर्यात करने के लिए सबसे अच्छा काम किया:
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
यदि आपके पास रिश्ते हैं तो आपको बच्चे को विदेशी कुंजी के साथ तालिका से पहले और आयात करना होगा।
इसके अलावा आप 'ODBC' + 'SQL सर्वर आयात और निर्यात विज़ार्ड' का उपयोग कर सकते हैं। नीचे दिए गए लिंक में इसका वर्णन किया गया है: https://www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/
Daud:
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