Mam plik .sql ze zrzutu MySQL zawierający tabele, definicje i dane do wstawienia w tych tabelach. Jak mogę przekonwertować tę bazę danych przedstawioną w pliku zrzutu na bazę danych MS SQL Server?
Mam plik .sql ze zrzutu MySQL zawierający tabele, definicje i dane do wstawienia w tych tabelach. Jak mogę przekonwertować tę bazę danych przedstawioną w pliku zrzutu na bazę danych MS SQL Server?
Odpowiedzi:
Użyj Asystenta migracji programu SQL Server (SSMA)
Oprócz MySQL obsługuje Oracle, Sybase i MS Access.
Wydaje się być całkiem sprytny i zdolny do obsługi nawet nietrywialnych transferów. Ma również interfejs wiersza poleceń (oprócz GUI), więc teoretycznie można go zintegrować z jakimś procesem ładowania wsadowego.
To aktualne łącze do pobrania wersji MySQL https://www.microsoft.com/en-us/download/details.aspx?id=54257
Obecna (z czerwca 2016 r.) Stabilna wersja 6.0.1 ulega awarii z obecnym (5.3.6) sterownikiem MySQL ODBC podczas przesyłania danych. Wszystko w wersji 64-bitowej. Wersja 5.3 ze sterownikiem ODBC 5.1.13 działa dobrze.
Sugeruję użycie mysqldump w następujący sposób:
mysqldump --compatible=mssql
phpMyAdmin nadal jest aplikacją internetową i może mieć pewne ograniczenia dla dużych baz danych (czas wykonywania skryptu, przydzielana pamięć i tak dalej).
Znalazłem na to sposób w sieci
Wymaga to trochę pracy, bo trzeba to zrobić stół po stole. W każdym razie mógłbym skopiować tabele, dane i ograniczenia do bazy danych MS SQL.
Tutaj jest link
http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx
Jeśli wykonujesz eksport za pomocą PhpMyAdmin , możesz zmienić tryb zgodności sql na „MSSQL”. W ten sposób po prostu uruchom wyeksportowany skrypt w bazie danych MS SQL i gotowe.
Jeśli nie możesz lub nie chcesz używać PhpMyAdmin, w mysqldump jest również opcja zgodności , ale osobiście wolałbym, aby PhpMyAdmin zrobił to za mnie.
Oto moje podejście do importowania plików .sql do MS SQL:
Eksportuj tabelę z MySQL z opcjami --compatible=mssql
i --extended-insert=FALSE
:
mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql
Podziel wyeksportowany plik za pomocą programu PowerShell o 300000 linii na plik:
$i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}
Uruchom każdy plik w MS SQL Server Management Studio
Istnieje kilka wskazówek, jak przyspieszyć wkładki .
Innym podejściem jest użycie –where
opcji mysqldump . Korzystając z tej opcji, możesz podzielić tabelę na dowolny warunek, który jest obsługiwany przez where
klauzulę sql.
--databases [db_name]
słowo kluczowe, jak wyjaśniono w tej odpowiedzi: stackoverflow.com/a/26096339/155687
Miałem dzisiaj bardzo podobny problem - musiałem skopiować dużą tabelę (5 milionów wierszy) z MySql do MS SQL.
Oto kroki, które wykonałem (w systemie Ubuntu Linux):
Utworzono tabelę w MS SQL, której struktura odpowiada tabeli źródłowej w MySql.
Zainstalowany wiersz poleceń MS SQL: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu
Zrzucona tabela z MySql do pliku:
mysqldump \ --kompaktowy \ --complete-insert \ --no-create-info \ --compatible = mssql \ --extended-insert = FALSE \ --host "$ MYSQL_HOST" \ --user "$ MYSQL_USER" \ -p "$ MYSQL_PASS" \ „$ MYSQL_DB” \ „$ TABLE”> „$ FILENAME”
W moim przypadku plik zrzutu był dość duży, więc postanowiłem podzielić go na kilka małych części (po 1000 wierszy) - split --lines=1000 "$FILENAME" part-
W końcu przejrzałem te małe pliki, dokonałem kilku podmian tekstu i wykonałem fragmenty jeden po drugim na serwerze MS SQL:
eksportuj SQLCMD = / opt / mssql-tools / bin / sqlcmd x = 0 dla pliku w części- * zrobić echo "Eksportowanie pliku [$ plik] do MS SQL. Przetworzono x tysięcy $" # zamienia \ 'na' ' sed -i "s / \\\ '/' '/ g" "$ plik" # usuwa wszystko ” sed -i 's / "// g'" $ plik " # pozwala na wstawianie rekordów o określonym 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 "$ plik" Echo "" Echo "" x = $ ((x + 1)) Gotowe echo „Gotowe”
Oczywiście trzeba wymienić moje zmienne jak $AZURE_SERVER
, $TABLE
itp z naszą.
Mam nadzieję, że to pomoże.
U mnie najlepiej było wyeksportować wszystkie dane za pomocą tego polecenia:
mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql
--extended-insert = FALSE jest potrzebne, aby uniknąć limitu importu wierszy mssql 1000.
Utworzyłem tabele za pomocą narzędzia do migracji, więc nie jestem pewien, czy funkcja CREATE z pliku backup.sql zadziała.
W SSMS MSSQL musiałem zaimportować tabelę danych po tabeli z IDENTITY_INSERT ON, aby zapisać pola 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
Jeśli masz relacje, musisz najpierw zaimportować dziecko, a następnie tabelę z kluczem obcym.
Możesz także użyć „ODBC” + „Kreator importu i eksportu SQL Server”. Opisuje to poniższy link: https://www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/
Biegać:
mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql
Czy chcesz zobaczyć pasek postępu?
pv mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql
możesz użyć aplikacji sqlie do konwersji z mysql na sqlserver możesz obejrzeć ten film https://www.youtube.com/watch?v=iTVEqys_vTQ&t=108s