Programing

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

lottogame 2020. 10. 6. 07:41
반응형

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


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


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

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


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

도움이 되었기를 바랍니다.


또한 '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

참고 URL : https://stackoverflow.com/questions/2621682/import-mysql-database-into-a-ms-sql-server

반응형