이 테이블에 삽입 할 테이블, 정의 및 데이터를 포함하는 MySQL 덤프의 .sql 파일이 있습니다. 덤프 파일에 표시된이 데이터베이스를 MS SQL Server 데이터베이스로 어떻게 변환 할 수 있습니까?
이 테이블에 삽입 할 테이블, 정의 및 데이터를 포함하는 MySQL 덤프의 .sql 파일이 있습니다. 덤프 파일에 표시된이 데이터베이스를 MS SQL Server 데이터베이스로 어떻게 변환 할 수 있습니까?
답변:
를 사용하여 SQL Server 마이그레이션 어시스턴트 (SSMA)
MySQL 외에도 Oracle, Sybase 및 MS Access를 지원합니다.
아주 똑똑하고 사소하지 않은 전송도 처리 할 수있는 것으로 보입니다. 또한 GUI 외에도 일부 명령 줄 인터페이스가 있으므로 이론적으로 일부 배치로드 프로세스에 통합 할 수 있습니다.
MySQL 버전 https://www.microsoft.com/en-us/download/details.aspx?id=54257 의 현재 다운로드 링크입니다.
현재 (2016 년 6 월) 안정 버전 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이 대신 사용하도록하고 싶습니다.
.sql 파일을 MS SQL로 가져 오는 방법은 다음과 같습니다.
--compatible=mssql
및 --extended-insert=FALSE
옵션을 사용 하여 MySQL에서 테이블 내보내기 :
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
오늘도 비슷한 문제가있었습니다. MySql에서 MS SQL로 큰 테이블 (5 백만 행)을 복사해야했습니다.
다음은 내가 수행 한 단계입니다 (Ubuntu Linux에서).
MySql의 소스 테이블과 구조가 일치하는 MS SQL에서 테이블을 생성했습니다.
설치된 MS SQL 명령 줄 : https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu
MySql에서 파일로 덤프 된 테이블 :
mysqldump \ -콤팩트 \ -완료-삽입 \ -정보 생성 없음 \ --compatible = mssql \ --extended-insert = FALSE \ --host "$ MYSQL_HOST"\ --user "$ MYSQL_USER"\ -p "$ MYSQL_PASS"\ "$ MYSQL_DB"\ "$ TABLE"> "$ FILENAME"
제 경우에는 덤프 파일이 상당히 커서 여러 개의 작은 조각 (각각 1000 줄)으로 나누기로 결정했습니다. split --lines=1000 "$FILENAME" part-
마지막으로이 작은 파일을 반복하고 텍스트를 교체하고 MS SQL 서버에 대해 하나씩 실행했습니다.
export SQLCMD = / opt / mssql-tools / bin / sqlcmd x = 0 부품-*의 파일 하다 echo "[$ file] 파일을 MS SQL로 내보내는 중입니다. $ x 천 (s) 처리됨" # \ '를' '로 대체 sed -i "s / \\\ '/' '/ g" "$ file" # 모든 "를 제거합니다. 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)) 끝난 echo "완료"
물론 당신처럼 내 변수를 교체해야합니다 $AZURE_SERVER
, $TABLE
당신과 함께 등.
도움이되기를 바랍니다.
저에게는 다음 명령으로 모든 데이터를 내보내는 것이 가장 좋습니다.
mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql
--extended-insert = FALSE는 mssql 1000 행 가져 오기 제한을 방지하는 데 필요합니다.
마이그레이션 도구로 테이블을 만들었으므로 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 Server 가져 오기 및 내보내기 마법사'를 사용할 수 있습니다. 아래 링크에서 설명합니다 : 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
mysql에서 sqlserver로 변환하기 위해 sqlie 애플리케이션을 사용할 수 있습니다.이 비디오를 볼 수 있습니다. https://www.youtube.com/watch?v=iTVEqys_vTQ&t=108s