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.