개발자와 제품 간의 Wordpress 데이터베이스 동기화


19

두 Wordpress 설치간에 데이터베이스와 파일을 동기화하는 방법에 대한 질문이있었습니다.

데이터베이스 수준의 경우 대답은 일반적으로 기본적으로 하나의 데이터베이스를 덤프하여 다른 서버에 삽입하는 것입니다. 이것의 문제점은 prod 서버에서 잠재적으로 작성된 모든 변경 사항이 손실된다는 것입니다. 예를 들어 사용 통계, 설명 등 ...

이를 염두에두고, 델타를 생성 한 다음 prod 사이트에 삽입 할 수 있도록 Wordpress ORM을 확장 할 수 있는지 궁금해지기 시작했습니다.

누구든지 이것을 시도하거나 조사하거나 아이디어 나 의견이 있습니까?


1
나는 그것을 조사했지만, 많은 성과를 얻지 못했습니다. 다른 CMS 플랫폼에서 개념 증명을 가리킬 수 있다면 WordPress에서 다시 증명할 수 있습니다.
EAMann

복제는 어떻습니까?
kovshenin

mysql을 이용한 복제는 PITA 인 일종의 마스터-마스터 복제를 필요로합니다. 이것이 dev와 prod 사이에 있다는 사실을 고려하면 복제가 지연되어 항상 중단 될 수 있습니다.
jonathanserafini

답변:


11

현실은 우리가 원하는 것은 이것입니다 : http://www.liquibase.org/

Liquibase는 데이터베이스 변경 사항을 추적, 관리 및 적용하기위한 데이터베이스 독립적 라이브러리 인 오픈 소스 (Apache 2.0 라이센스)입니다. 간단한 전제를 기반으로합니다. 모든 데이터베이스 변경 내용은 사람이 읽을 수는 있지만 추적 가능한 형식으로 저장되고 소스 제어로 체크인됩니다.

그러나 우리의 개발 과정은 그것을 지원하지 않습니다. 우리는 일반적으로 자체 스크립트를 통해 데이터베이스를 수정하지 않으며, 활성화하는 플러그인을 사용합니다. 조회 데이터를 수정하기 위해 DML 스크립트를 작성하지 않고 소스 코드 제어에 체크인 한 다음 관리 페이지에서 UI를 사용하므로 마이그레이션 중에 변경 사항을 복제 할 때 나중에 사용할 소스 코드가 없습니다.

그러나이 페이지에 나열된 일부 도구를 사용하여 일부를 에뮬레이션 할 수 있습니다.

/programming//q/225772/149060

예를 들어, 리퀴드베이스에는 선택적으로 데이터 변경 사항을 포함하는 diff 기능이 있습니다. 테스트 데이터를 포함 할 가능성이있는 특정 테이블 (예 : post 등)을 제외하고 스키마와 데이터 차이를 스크립트에 출력하고 스크립트를 프로덕션 데이터베이스에 적용 할 수 있습니다.

MySQLDiff (StackOverflow 질문에서 논의 됨)는 스키마 차이를 수행하며 저자 는 테이블 방식 데이터 차이에 대해 mysql_coldiff 를 권장 합니다 .Java 도구 (liquidbase)가 서버에 너무 많은 리소스를 사용하는 경우 둘 다 perl로 구현됩니다. PC에서 도구를 실행하면 문제가 해결됩니다 ...

실제로 올바르게하려면 설정, 옵션 또는 기타 구성 변경 및 스키마 변경과 관련된 모든 SQL을 기록하고 기록 된 코드를 마이그레이션 서버로 변환하여 프로덕션 서버에서 재생해야합니다. 서버에서 마이그레이션 스크립트를 재생하고 워드 프레스 사이트 파일 (해당되는 경우 업로드 제외)을 복사하면 금메달이됩니다.

따라서 가장 좋은 방법은 데이터베이스를 병합하는 방법을 빌드하는 대신 필요한 SQL을 트랩하고 저장 한 다음 기록 된 코드에서 마이그레이션 스크립트를 생성하는 개발자의 마이그레이션 작성기 플러그인 인 것 같습니다. 준비와 생산 사이. 해결하기가 더 간단한 문제인 것 같습니다.

@bueltge의 인스트루먼트 후크 코드에서 영감을 얻기 위해 플러그인을 호출하면 https://gist.github.com/1000143 (SAVEQUERIES 방향과 종료 후크 방향으로 나를 가리켜 주신 G +를 통해 Ron Rennick에게 감사드립니다. 그것을 찾도록 이끌어주세요)

대신 SAVEQUERIES 출력을 얻도록 변경하십시오. 
-관리자 상태에서만 실행 
-모든 선택을 필터링 
-종료 훅의 테이블에 결과를 저장 
-현재 수행중인 작업에 따라 출력 트래핑을 선택적으로 전환 할 수 있습니다.  

예를 들면 다음과 같습니다.

캡처 이름 : 플러그인 XYZ 활성화 및 구성

캡처 상태 토글-설정

... 플러그인 XYZ 설치 및 구성

캡처 상태 토글-해제

마이그레이션 스크립트 내보내기 : 플러그인 XYZ 활성화 및 구성

내보내기 버튼을 누르면 필터링 된 트랩 된 SQL이있는 팝업 텍스트 필드가 생성됩니다. mysql에 대한 명령 줄 호출을 통해 쉘 스크립트로 사전 형식이 지정됩니다. 마이그레이션 코드 폴더에 복사하여 붙여넣고 소스 코드 저장소에 추가하십시오.

작업하는 동안 캡처를 켜고 끄는 데주의를 기울이고 프로덕션 데이터베이스를 준비 데이터베이스와 동등한 구성으로 가져 오는 완벽한 마이그레이션 스크립트를 생성 할 수 있습니다.

더 좋은 점은 테스트 할 수있는 스크립트 (또는 일련의 동일한 것)입니다. 복제 가능하고 테스트 가능한 마이그레이션 스크립트가있는 이미징 !!

난 이미 사랑에 빠졌어

다른 사람?


2
좋은 글씨. 고객이 우리의 도움을 받기 때문에이 문제에 많은 시간을 보냈습니다. 정말 어려운 문제이지만, SQL 수준으로 내려가는 것이 너무 많은 "해양 (boil the ocean)" 솔루션이라고 생각하면 100 % 작동 할 가능성은 거의 없습니다. 이 솔루션은 WordPress의 구조를 이해하고 다른 것에 대한 후크를 제공하는 명시 적 코드와 함께 "분할 및 정복" 접근 방식을 사용한다고 생각합니다 . 향후 어느 시점에서 실행 가능한 솔루션을 공개적으로 발표 할 수 있기를 바랍니다.
MikeSchinkel

그래서 ... 누가 이걸 만들고 싶어?
Dave Kiss

찾고있는 사람에게는이 동일한 아이디어가 플러그인으로 제공되는 것 같습니다 : wordpress.org/plugins/query-recorder
majick

3

데이터베이스 동기화 워드 프레스 플러그인은 두 서버간에 데이터를 동기화의 훌륭한 일을한다.

기본적으로 모든 대상 데이터를 덮어 쓰지만 특정 데이터베이스 테이블 만 동기화 할 수있는 플러그인 개선 사항을 구현했습니다. 이를 통해 주석, 사용자 및 덮어 쓰기를 원하지 않는 기타 데이터를 유지할 수 있습니다. 그것이 당신에게 필요한 세분성을 제공합니까?

아직 변경 사항을 공개하지는 않았지만 사본에 관심이 있으시면 simon-at-yump.com.au로 전자 메일을 보내주십시오. 이 기능이 유용하거나 추가 기능 요청이 있으면 알려주세요. 내가 할 수있는 일을 알려 드리겠습니다.


업데이트 : 나는 또한 상용 WP-Migrate-DB-Pro 플러그인 의 포크 인 WP-Sync-DB 플러그인을 발견했습니다 . 아마도 데이터베이스 동기화 보다 더 세련되었지만 아마도 매우 비슷한 일을 합니다 .


0

이 작업을 위해 비교적 새로운 상용 서비스가 있습니다. 그것은 RAMP이라고합니다 :

http://alexking.org/blog/2011/07/20/ramp-content-deploy-wordpress


1
이 서비스에는 사용 사례에 맞지 않는 제한 사항이 있습니다.
marfarma

2
내 유스 케이스-프로덕션 중에 컨텐츠를 추가하는 동안 기능 추가. 인용구 : "현재 다음 항목은 지원되지 않습니다 : 설정 (RAMP에 옵트 인하지 않는 한 코어 및 플러그인 설정)"테마 및 플러그인 옵션 및 설정의 99.99 %가 마이그레이션되지 않습니다. 프로덕션에서 코드를 변경하지 않으면 사용자 지정 사후 유형이 마이그레이션되지 않습니다. 사용자 정의 테이블 및 해당 데이터를 추가하는 것을 잊어 버리십시오.
marfarma

1
해당 제품에는 유효한 사용 사례가 있습니다. 즉, 콘텐츠를 준비한 다음 게시하는 것입니다. 불행히도 그것은 내가 걱정하는 문제가 아닙니다. OP를 다시 확인하면 그가 어떤 유스 케이스를 다루고 있는지 확실하지 않으므로 상점에 완벽한 솔루션 일 수 있습니다.
marfarma
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.