MySQL 데이터베이스를 MS SQL Server로 가져 오기


92

이 테이블에 삽입 할 테이블, 정의 및 데이터를 포함하는 MySQL 덤프의 .sql 파일이 있습니다. 덤프 파일에 표시된이 데이터베이스를 MS SQL Server 데이터베이스로 어떻게 변환 할 수 있습니까?


1
원본 데이터베이스에도 액세스 할 수 있습니까? 아니면 기본적으로 내보내기 파일이 전부입니까?
— Whakkee 2010

원본 DB에도 액세스 할 수 있습니다. 난 그냥 덤프를 사용하는 것이 더 쉬울 수 있다는 생각
— marionmaiden

답변:


62

를 사용하여 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 버전은 정상적으로 작동합니다.


9
이 도구는 PC에서 MySQL DB로 ODBC 커넥터를 설치할 수있는 경우에만 작동합니다. .sql 덤프 파일 만 있으면 SSMA를 사용할 수 없습니다.
— Jake Munson 2013

10
MySQL 엔진은 무료 소프트웨어이며 Windows 용 버전도 있습니다. 그것을 설치하고 덤프를로드하는 것은 간단한 작업입니다. 임의의 MySQL 스크립트를 SQL Server에 상응하는 것으로 안정적으로 변환하는 도구 (상용, 무료)를 찾고자하신다면, 행운을 빕니다.
— Zar Shardan 2013

1
좋은 지적. 그리고 그것이 제가 어제 한 일입니다. 사용자 정의 변환 유틸리티를 작성하는 것보다 MySQL을 설치하는 것이 최선의 선택 인 것 같습니다. SSMA는 엉덩이에 통증이 있었지만 결국 작동하게되었습니다.
— Jake Munson

2
SSMA는 훌륭한 옵션이며 이것이 허용되는 대답이어야합니다. 사용하기가 전혀 어렵지 않았습니다.
— DonBecker 2013-04-25

2
SQL Server Express와 함께 제공되지 않는 SQL Server 에이전트가 필요합니다.
— Vinicius Rocha 2013 년

18

다음 과 같이 mysqldump 를 사용하는 것이 좋습니다 .

mysqldump --compatible=mssql

phpMyAdmin 은 여전히 ​​웹 앱이며 대규모 데이터베이스 (스크립트 실행 시간, 할당 가능한 메모리 등)에 대해 몇 가지 제한이있을 수 있습니다 .


6
아아, 이것은 나에게 모든 종류의 호환성 문제를 제공합니다. 스크립트는 MSSQL에 존재하지 않는 열 이름, 데이터 유형 주위에 백틱을 포함하고 max-1000-inserts 제약 조건, auto_increment 키워드 등을 위반합니다.이 대답은 논리적 제안이지만 나는 그렇지 않습니다. 너무 잘 작동하지 않습니다 (적어도 : 나에게는 적합하지 않았습니다).
— Jeroen 2012

mysqldump --compatible = ansi "다른 데이터베이스 시스템 또는 이전 MySQL 서버와 더 호환되는 출력을 생성합니다.이 옵션에 허용되는 유일한 값은 ansi이며, 이는 서버 SQL 모드 설정에 해당하는 옵션과 동일한 의미를 갖습니다."
— Thomas Taylor

14

나는 이것에 대한 방법을 인터넷에서 찾았다.

테이블 단위로 작업해야하므로 약간의 작업이 필요합니다. 그러나 어쨌든 테이블, 데이터 및 제약 조건을 MS SQL 데이터베이스에 복사 할 수 있습니다.

여기 링크가 있습니다

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


1
즉, Mysql과 SQL이 하나의 시스템에 있거나 네트워크를 통해 연결된 경우입니다. 두 개의 다른 시스템이 있고 mysql의 덤프 파일이있는 경우에는 유용하지 않습니다. 권리?
— Espanta 2015

7

PhpMyAdmin 으로 내보내기를 수행하면 SQL 호환 모드를 'MSSQL'로 전환 할 수 있습니다. 그렇게하면 MS SQL 데이터베이스에 대해 내 보낸 스크립트를 실행하기 만하면됩니다.

PhpMyAdmin을 사용할 수 없거나 사용하지 않으려면 mysqldump에 호환성 옵션도 있지만 개인적으로 PhpMyAdmin이 대신 사용하도록하고 싶습니다.


1
이 답변은 생성 된 스크립트를 최소한으로 수정하여 저에게 효과적이었습니다. SQL Server 2012로 가져 왔습니다. 이전에는 호환성 모드를 보지 못했습니다.
— Kiel

7

.sql 파일을 MS SQL로 가져 오는 방법은 다음과 같습니다.

  1. --compatible=mssql및 --extended-insert=FALSE옵션을 사용 하여 MySQL에서 테이블 내보내기 :

    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 Server Management Studio에서 각 파일 실행

인서트 속도를 높이는 방법에 대한 몇 가지 팁이 있습니다 .

다른 방법은 mysqldump –where옵션 을 사용하는 것 입니다. 이 옵션을 사용하면 wheresql 절에서 지원하는 모든 조건에서 테이블을 분할 할 수 있습니다 .


우리는 어떻게 테이블이 아닌 테이블의 전체 데이터베이스를 내보낼 수 있습니다
— MonsterMMORPG

시도 --databases [db_name]는이 답변에 설명 된대로 키워드 : stackoverflow.com/a/26096339/155687
— 블라디슬라프

4

오늘도 비슷한 문제가있었습니다. MySql에서 MS SQL로 큰 테이블 (5 백만 행)을 복사해야했습니다.

다음은 내가 수행 한 단계입니다 (Ubuntu Linux에서).

  1. MySql의 소스 테이블과 구조가 일치하는 MS SQL에서 테이블을 생성했습니다.

  2. 설치된 MS SQL 명령 줄 : https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu

  3. MySql에서 파일로 덤프 된 테이블 :

mysqldump \
    -콤팩트 \
    -완료-삽입 \
    -정보 생성 없음 \
    --compatible = mssql \
    --extended-insert = FALSE \
    --host "$ MYSQL_HOST"\
    --user "$ MYSQL_USER"\
    -p "$ MYSQL_PASS"\
    "$ MYSQL_DB"\
    "$ TABLE"> "$ FILENAME"
  1. 제 경우에는 덤프 파일이 상당히 커서 여러 개의 작은 조각 (각각 1000 줄)으로 나누기로 결정했습니다. split --lines=1000 "$FILENAME" part-

  2. 마지막으로이 작은 파일을 반복하고 텍스트를 교체하고 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당신과 함께 등.

도움이되기를 바랍니다.


3

저에게는 다음 명령으로 모든 데이터를 내보내는 것이 가장 좋습니다.

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 

관계가있는 경우 외래 키가있는 테이블보다 먼저 자식을 가져와야합니다.



0

운영:

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

0

mysql에서 sqlserver로 변환하기 위해 sqlie 애플리케이션을 사용할 수 있습니다.이 비디오를 볼 수 있습니다. https://www.youtube.com/watch?v=iTVEqys_vTQ&t=108s


1
@gorgino Stackoverflow에 오신 것을 환영합니다! 링크를 게시하는 경우 향후 링크가 중단 될 경우를 대비하여 내용에 대한 간략한 요약도 게시하십시오. 연결은 주로 답변이 아닌 답변을 확장하는 데 사용 되어야 합니다.
— Cribber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.