원격 MySQL 데이터베이스를 MS SQL Server 2008로 복제


10

MySQL 데이터베이스의 내용을 MS SQL Server 2008 데이터베이스에 복제하고 싶습니다.

이것이 가능한가? 누구든지 이것을 달성하기 위해 필요한 단계를 설명 할 수 있습니까?

감사.

답변:


9

개인적으로 MS SQL 방법과 MySQL 방법의 푸시를 사용했습니다. 왜? Windows에는 32 비트 및 64 비트 MySQL ODBC 드라이버가 준비되어 있으며 연결된 서버를 설정하는 것은 쉽지 않습니다. MS SQL에서 연결된 많은 MySQL 서버가 있습니다. 또한 linux / unix에서 MS SQL에 연결하는 것이 항상 좋은 것은 아니며 일반적으로 모든 기능을 사용할 수는 없습니다. FreeTDS에는 한계가 있습니다. 당신은 나중에보다 빨리 그들을 때릴 수 있으므로 그냥 건너 뛰지 마십시오. 이 모든 것은 * nix에서 MySQL을 실행한다고 가정합니다. 그렇지 않은 경우 50/50에 조금 더 가까워 지지만 "실제"데이터베이스가 아닌 것처럼 들리므로 MS SQL에서 가져 오기를 계속 선택하므로 ETL 또는 처리에 대한 부하가 더 이상적입니다. GoldenGate 솔루션은 흥미롭게 들리지만 무료가 아니라고 확신합니다.

MS SQL에 복제하는 MySQL 및 Oracle 데이터베이스 모두에서 이러한 종류의 시나리오를 설정 한 것을 고려할 때 가장 효과적인 팁을 제공합니다.

  1. 가능하면 델타 변경 만 가져올 수있는 방법을 결정하기 위해 최선을 다하십시오. 병합 명령이 도움이 될 수 있습니다. 테이블을 잘라낸 다음 다시 삽입하면 로그가 부풀려지고 네트워크 대역폭이 사용되며 일반적으로 시간이 낭비됩니다.
  2. 많은 양의 데이터를 처리하는 경우 대량의 로그 파일이 필요하지 않도록 트랜잭션을 분리해야합니다. 롤백 할 필요가없는 단계에 도달하면 명시 적 커밋 또는 검사 점을 사용하십시오.
  3. MSSQL db가보고 전용 일 경우, MySQL 서버에 영향을 미치지 않도록 ETL을 수행하십시오. 스테이징 데이터베이스 또는 스키마 + 파일 그룹을 사용하여 작업을 쉽게 수행하십시오.
  4. 데이터 가져 오기를 단계적으로 나눕니다. 이를 통해 가져 오기가 실패한 곳에서 다시 시작하거나 문제를 쉽게 해결할 수 있습니다. 전혀 또는 전혀 접근이 빨리 성가 시게됩니다.
  5. 쿼리 계획 및 인덱스 사용으로 원격 DB를 지원하는 데 가능하면 변수를 사용하십시오. 또한 호스트 상자에 어떤 종류의 트랜잭션 격리가 있으며 "복제"쿼리에 어떤 영향을 미치는지주의하십시오. 보고 또는 샌드 박스 사용을 위해 데이터를 가져 오는 경우 라이브 DB에서 작성자를 차단하지 않으려 고합니다.

팁이 도움이 되길 바랍니다!


4

동일한 질문이 StackOverflow에서 해결되었습니다 : MySQL에서 MSSQL 로의 복제 .

해결 방법이 있지만 매우 쉬운 해결책은 아닌 것 같습니다.

MySQL DB에서 MSSQL DB로 필요한 데이터를 가져 오기 위해 SSIS 패키지를 작성해야한다고 생각합니다. SSIS를 사용하면 다양한 소스에서 데이터를 가져올 수 있습니다. 그런 다음 Windows 작업 스케줄러 또는 SQL 작업을 사용하여 패키지를 예약 할 수 있어야합니다.


3

복제로 인해 로그 배송이나 그와 비슷한 것을 의미한다면 운이 없다고 생각합니다. 그러나 MySQL 데이터베이스를 연결된 서버로 설정하고 고유 한 복제 구성표를 롤업 할 수 있습니다. 가장 간단한 방법은 truncate 및 insert 문을 사용하여 모든 테이블을 주기적으로 스냅 샷하는 것입니다. 요구 사항에 따라 복잡성을 추가하십시오.


나는 예약 된 작업을 실행하고 msqldb의 모든 내용을 일주일에 한 번 SQL Server 2008 db로 복사하기를 원합니다. 가능합니까?
Jimmy Collins

1
관련된 데이터 양, 네트워크 대기 시간 등에 따라 매번 모든 데이터를 잘라 내고 가져 오는 것이 매우 느릴 수 있다는 점을 기억하십시오. 두 데이터베이스간에 네트워크 링크가 작거나 느린 경우에는 갈 수 없습니다. 나는 항상 델타를 끌어낼 수있는 방법을 고안하려고 노력합니다.
AndrewSQL

1
델타는 갈 길입니다. 트리거와 더티 행 비트에 대해 말하기에 충분한 MySQL을 모르지만 무언가를 설정할 수 있다고 확신합니다. SQL Server 측에서는 작업 스케줄링이 간단합니다.
래리 Smithmier

3

이를 위해 GoldenGate for MySQLMS SQL 을 사용할 수 있습니다 . 양쪽에 GoldenGate 제품을 설치 한 다음 균일 한 복제를 진행하십시오.

또는 "스냅 샷"복제의 경우 Python (또는 이와 유사한) 스크립트를 사용하여 두 데이터 소스 ( UnixODBCFreeTDS 를 사용하여 MS SQL에 연결 )에 간단히 연결 하고 SELECT각 행에 대해 한쪽에서 수행되는 테이블을 반복 할 수 있습니다. INSERT다른쪽에. MSSQL에는 트랜잭션이 있고 대상이므로 트랜잭션을 시작하고 DELETE모든 테이블의 모든 항목을 복사하고 복사본을 수행 COMMIT하면 대상의 연결된 사용자와 관련이있는 한 즉시 표시됩니다 (일관되지 않은 경우). 물론 소스에서).


이것이 GoldenDate로 할 수있는 일이라는 것을 알지 못했습니다. 이것에 대해 더 읽어야 할 것입니다. 공유해 주셔서 감사합니다!
AndrewSQL

이제 오라클은이 제품을 지원합니다. 오라클은 GoldenGate를 인수했습니다. 이제이 제품은 오라클 제품입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.