[mysql] MySQL 데이터베이스를 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로 가져 오는 방법은 다음과 같습니다.

  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 절에서 지원하는 모든 조건에서 테이블을 분할 할 수 있습니다 .


답변

오늘도 비슷한 문제가있었습니다. 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당신과 함께 등.

도움이되기를 바랍니다.


답변

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

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

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