ฉันมีไฟล์. sql จากดัมพ์ MySQL ที่มีตารางคำจำกัดความและข้อมูลที่จะแทรกในตารางเหล่านี้ ฉันจะแปลงฐานข้อมูลนี้ที่แสดงในไฟล์ดัมพ์เป็นฐานข้อมูล MS SQL Server ได้อย่างไร
ฉันมีไฟล์. sql จากดัมพ์ MySQL ที่มีตารางคำจำกัดความและข้อมูลที่จะแทรกในตารางเหล่านี้ ฉันจะแปลงฐานข้อมูลนี้ที่แสดงในไฟล์ดัมพ์เป็นฐานข้อมูล MS SQL Server ได้อย่างไร
คำตอบ:
ใช้SQL Server Migration Assistant (SSMA)
นอกจาก MySQL แล้วยังรองรับ Oracle, Sybase และ MS Access
ดูเหมือนว่าจะค่อนข้างฉลาดและสามารถจัดการได้แม้กระทั่งการถ่ายโอนที่ไม่สำคัญ นอกจากนี้ยังมีอินเทอร์เฟซบรรทัดคำสั่ง (นอกเหนือจาก GUI) ดังนั้นในทางทฤษฎีจึงสามารถรวมเข้ากับกระบวนการโหลดแบทช์บางส่วนได้
นี่คือลิงค์ดาวน์โหลดปัจจุบันสำหรับเวอร์ชัน MySQL https://www.microsoft.com/en-us/download/details.aspx?id=54257
เวอร์ชันเสถียรปัจจุบัน (มิถุนายน 2016) 6.0.1 ล้มเหลวด้วยไดรเวอร์ MySQL ODBC ปัจจุบัน (5.3.6) ขณะถ่ายโอนข้อมูล ทุกอย่าง 64 บิต เวอร์ชัน 5.3 ที่มีไดรเวอร์ 5.1.13 ODBC ทำงานได้ดี
ฉันแนะนำให้คุณใช้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 ทำเพื่อฉัน
นี่คือแนวทางของฉันในการนำเข้าไฟล์. sql ไปยัง MS 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 Server Management Studio
มีเคล็ดลับในการเพิ่มความเร็วเม็ดมีด
วิธีการอื่น ๆ คือการใช้ mysqldump–where
ตัวเลือก เมื่อใช้ตัวเลือกนี้คุณสามารถแบ่งตารางของคุณตามเงื่อนไขใด ๆ ที่รองรับโดยwhere
อนุประโยค sql
--databases [db_name]
คีย์เวิร์ดตามที่อธิบายไว้ในคำตอบนี้: stackoverflow.com/a/26096339/155687
วันนี้ฉันมีปัญหาที่คล้ายกันมาก - ฉันต้องการคัดลอกตารางขนาดใหญ่ (5 ล้านแถว) จาก MySql ไปยัง MS SQL
นี่คือขั้นตอนที่ฉันทำ (ภายใต้ Ubuntu Linux):
สร้างตารางใน 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" \ - ผู้ใช้ "$ MYSQL_USER" \ -p "$ MYSQL_PASS" \ "$ MYSQL_DB" \ "$ TABLE"> "$ FILENAME"
ในกรณีของฉันไฟล์ดัมพ์มีขนาดค่อนข้างใหญ่ดังนั้นฉันจึงตัดสินใจแบ่งเป็นชิ้นเล็ก ๆ จำนวนหนึ่ง (1,000 บรรทัดต่อ) - split --lines=1000 "$FILENAME" part-
ในที่สุดฉันก็วนซ้ำไฟล์ขนาดเล็กเหล่านี้ทำการแทนที่ข้อความและดำเนินการทีละชิ้นกับเซิร์ฟเวอร์ MS SQL:
ส่งออก SQLCMD = / opt / mssql-tools / bin / sqlcmd x = 0 สำหรับไฟล์ในส่วน - * ทำ echo "การส่งออกไฟล์ [$ file] ไปยัง MS SQL ประมวลผลแล้ว $ x พัน" # แทนที่ \ 'ด้วย' ' sed -i "s / \\\ '/' '/ g" "$ ไฟล์" # ลบทั้งหมด " sed -i 's / "// g'" $ file " # อนุญาตให้แทรกบันทึกด้วย PK (id) ที่ระบุ 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" เสียงสะท้อน "" เสียงสะท้อน "" x = $ ((x + 1)) เสร็จแล้ว ก้อง "เสร็จสิ้น"
แน่นอนคุณจะต้องแทนที่ตัวแปรของฉันเหมือน$AZURE_SERVER
, $TABLE
ฯลฯ กับคุณ
หวังว่าจะช่วยได้
สำหรับฉันการส่งออกข้อมูลทั้งหมดด้วยคำสั่งนี้ทำได้ดีที่สุด:
mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql
--extended-insert = FALSE จำเป็นเพื่อหลีกเลี่ยงขีด จำกัด การนำเข้า mssql 1,000 แถว
ฉันสร้างตารางด้วยเครื่องมือการย้ายข้อมูลดังนั้นฉันไม่แน่ใจว่า CREATE จากไฟล์ backup.sql จะทำงานได้หรือไม่
ใน SSMS ของ MSSQL ฉันต้องนำเข้าตารางข้อมูลตามตารางโดยมี IDENTITY_INSERT ON เพื่อเขียนฟิลด์ 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
หากคุณมีความสัมพันธ์คุณต้องนำเข้าลูกก่อนและกว่าตารางที่มีคีย์ต่างประเทศ
นอกจากนี้คุณสามารถใช้ 'ODBC' + 'SQL Server Import and Export Wizard' ลิงค์ด้านล่างอธิบาย: https://www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/
วิ่ง:
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
คุณสามารถใช้แอพพลิเคชั่น sqlie สำหรับการแปลงจาก mysql เป็น sqlserver คุณสามารถดูวิดีโอนี้ได้ https://www.youtube.com/watch?v=iTVEqys_vTQ&t=108s