2012-02-09 4 views
2

SQL Server 2008의 테이블과 MySQL 테이블을 동기화하려고합니다. SQL 서버에서 MySQL 로의 동기화를 원합니다. 나는 이미 SQL Server에서 MySQL로 테이블을 옮겼는데, 필자가 필요로하는 것은 실행할 때마다 자동으로 테이블을 업데이트 (변경 사항 확인, 새로운 라인 삽입, 존재하지 않는 테이블 삭제)하는 PHP 코드가 필요합니다. 아무도 나를 도울 수 있습니까?SQL 서버와 MySQL 사이의 단방향 동기화

+0

타사 도구 대신 PHP 코드를 사용해야합니까? –

+0

스키마를 수정할 수 있습니까? – iWantSimpleLife

+0

어디서? SQL Server 데이터베이스에서? – Jaro

답변

1

ETL 도구를 사용하는 것이 유용 할 수 있습니다. SQL Server 용으로 설계된 SSIS가 있습니다. 이것을 사용하여 원하는 데이터를 가져올 수 있지만 이전에는 MySQL 용으로 사용한 적이 없습니다. 이 게시물 [http://blogs.msdn.com/b/mattm/archive/2008/03/03/connecting-to-mysql-from-ssis.aspx]에 따르면 실제로 가능합니다. 당신을 도울 수

또 다른 게시물 : http://www.packtpub.com/article/mysql-data-transfer-using-sql-server-integration-services-ssis

는 Unfortuantly 마지막 기사는 당신이 원하는 방향없는 SQL 서버, MySQL에서 그것을 설명합니다. 다른 방법으로 작동시킬 수도 있지만 MySQL 용 ETL 도구를 찾아야 할 수도 있습니다. 빠른 구글 검색이 http://www.benetl.net/이라고 밝혀졌지만 나는 내 머리 꼭대기에서 어떤 것도 알지 못한다. 그러나 나는 그것을 보증 할 수 없다.

+0

이것은 좋은 해결책이었을 지 모르지만 SQL Server Express는 SSIS를 지원하지 않습니다. – Jaro

+0

아, Express를 사용하고 있다는 것을 깨닫지 못했습니다. 그것은 수치 스럽습니다. MS SQL Server와 MySQL 서버에 모두 연결할 수있는 언어 (Java 또는 C#)를 찾을 수 있다면 각 테이블에 대한 함수를 작성해야하지만 수동으로 모든 행을 이동할 수 있습니다. 가장 좋은 해결책은 아니지만 효과가있을 것입니다. (C#은 MS에서 분명히 MSSQL에 연결할 수 있고 MySQL의 경우 http://bitdaddys.com/MySQL-ConnectorNet.html이 있습니다.) – joshhendo

1

PHP는 여기에 할 일이 없다고 생각합니다.

  • DTS 패키지
  • 연결된 서버
  • 트리거 + 동기 큐 테이블
  • 다양한 타사 ETL 툴
    • SSIS :

      당신과 같은 다양한 의사 결정을 사용할 수있다. ..

  • +0

    그래, PHP가 동기화에 너무 좋지 않을 수도 있다고 생각하기 시작했습니다 – Jaro

    2

    전적으로 확신 할 수는 없지만 좋은 생각입니다. 이전에 비슷한 요구 사항이 있었기 때문에 일부 사용 사례에서는 이것이 필요할 수도 있습니다 (마지막 단락 참조). ,

    • 하는 테이블 '변경 내역'ID를 가진 (PK)을 생성 TABLENAME (그것이 당신의 경우 SQL 서버에서, 상관없이), 송신 측에

      :

      이 아주 잘했다 tablepk, 액션,

    • 이 작업이
    • 이 코드를 송신 측에 변경 로그 테이블의 내용을 전송이 성공 후 변경 로그 테이블에 변경 사항을 쓰기 관련 테이블에 트리거를 만들 데이터를 텍스트 필드
    • 이 경우 성공하면 changelog 테이블에서 삭제하십시오 (마음 : 여기에 경쟁 조건이 있습니다!)
    • 수신 측에

    (이 사건의 MySQL)에, 어떤 상관없이

    • 는 변경 로그 데이터
    • 이 경우 그것을 데이터베이스에 대해
    • 실행 변화를 분석 받기 작동, 승인을 보내십시오

    이 계획은 2 호스트 사이에서 HTTP 만 "말하"는 호스트 - 손실 된 연결 (또는 수신 측 재부팅)이 연결이 다시 설정되면 전송 측 변경 로그 테이블의 변경 내용을 버퍼링하기 때문에 매우 견고합니다.

    +0

    모든 대답을보기 나는 이것을 위해 PHP를 사용하는 것이 좋은지 아닌지 잘 알고있다. 해줘서 고마워,하지만 조쉬던이 올린 링크를 사용하겠습니다. – Jaro

    1

    모든 테이블에 타임 스탬프 열이 있고 삽입하거나 업데이트 할 때마다 영향을받는 각 행의 타임 스탬프 값을 업데이트하는 것이 좋습니다. 그런 다음 타임 스탬프가 대상 데이터베이스에있는 것보다 최신인지 확인하는 모든 테이블을 반복합니다. 최신 버전 인 경우 삽입 또는 업데이트해야하는지 확인하십시오. 관측 1 : 행이 원본 db에서 삭제되고 서버 db에서 동일한 작업을 수행해야하기 때문에 물리적 삭제에 유의하십시오. 이를 해결하면 타임 스탬프가있는 테이블의 모든 삭제를 물리적으로 삭제하거나 로깅하지 않아도됩니다. DeletedRows = (id, table_name, pk_column, pk_column_value, timestamp) 따라서 DeletedRows 테이블의 모든 새 행을 읽고 table_name, pk_column 및 pk_column_value를 사용하여 서버에서 삭제를 실행해야합니다. 관측 2 : 다른 테이블과 관련된 테이블에 데이터를 삽입 할 수 없으므로 FK에 유의하십시오. 데이터 동기화 전에 모든 FK를 비활성화해야합니다.

    관련 문제