데이터베이스 버전 관리 및 배포를위한 솔루션?


11

현재 덤프 스크립트를 사용하고 데이터베이스를 git repo에 커밋합니다. --skip-extended-insert --skip-comments --skip-dump-datediff가 나에게 무엇이 바뀌 었는지에 대한 공정한 아이디어를 줄 수 있음을 의미하지만 병합하려고하면 모두 무너집니다.

WP_SITEURL, WP_HOME 및 기타 모든 위치에 WordPress 상점 전체 URL을 다른 호스트로 가져올 때 업데이트해야합니다 (테스트, 스테이징, 프로덕션)

더 나은 방법을 사용하는 사람이 있습니까?

주된 이슈:

  • Wordpress는 데이터베이스 전체를 통해 전체 URL을 저장합니다 (휴대 불가)
  • 기타 관련성이없는 다른 레코드 변경
    • auto_increment 값 (단지 제거했지만 ID 문제가 발생했습니다)
    • 타임 스탬프 (잠재적으로 제거 가능)
    • 일시적인 * 레코드 ... 무엇을 해야할지 모르겠다

추가되거나 제거 된 것만으로 타임 스탬프 된 마이그레이션을 생성 한 프로세스가 이상적 일 것입니다.하지만 가능한지 확실하지 않습니까?


모든 데이터 변경 사항 또는 구조 변경 사항 만 버전 화 하시겠습니까? 그리고 이것이 당신의 진짜 사업-태스크입니까?
게으른 오소리

CMS의 워드 프레스와 같은 변경을 수행 할 때 종종 논리 (코드) 변경과 함께 내용 및 구성 (DB 데이터) 변경이 있습니다. 둘 다 버전을 만들 수 있기를 원합니다. 구조 변경은 좋은 시작이 될 것입니다 ... 사업 과제 : 클라이언트가 새로운 위젯을 요구합니다. 스테이징 서버에 플러그인을 설치하고 repo-> 플러그인 구성 및 샘플 컨텐츠 추가-> 승인되면 프로덕션으로 코드 변경 사항을 가져온 후 프로덕션 관리자에서 수동으로 동일한 데이터를 변경하십시오.
Jacob Dorman

1
@JacobDorman 나는이 똑같은 문제를 해결하려고합니다. 아직 뭔가 해봤 어? 일부 연구 후 특정 업데이트 스크립트를 생성하는 일부 사용자 정의 플러그인이 순서대로 있다고 생각하기 시작했습니다 (아마도 설치된 플러그인 및 구성 옵션과 같은 구성 변경 사항 만 내보내는 것이 아니라 일반적으로 게시물, 카테고리 및 내용은 아닙니다) . 다른 아이디어가 있으면 듣고 싶습니다.
Víctor López García

답변:


4

가능한 두 가지 솔루션이 있습니다. 둘 다 실제로 일반적인 MySQL 버전 제어 도구이지만 워크 플로에 맞게 조정할 수 있습니다.

dbv.php

이 도구는 데이터베이스에서 감지 된 변경 사항에서 기본적으로 SQL 스크립트 인 "마이그레이션"을 작성합니다. 이 스크립트는 로컬 디렉토리에 저장되므로 현재 VCS (예 : git)에 커밋 할 수 있습니다.

PHP 웹 인터페이스를 통해 사용됩니다.

DBVC

기본적으로 이전 도구와 유사하며 명령 행 인터페이스를 기반으로합니다. json 파일을 통해 구성됩니다. 가장 큰 차이점은 마이그레이션 파일을 자동 생성하지 않는다는 것입니다.

이것을 이전의 유사한 것과 통합하는 데 보류중인 문제가 있으므로 찾을 것이 있습니다.

워드 프레스 플러그인

반복 가능한 워크 플로를 만드는 데 도움이되는 일부 플러그인 :


dbvc는 내가 찾던 일종의 도구처럼 보입니다. 감사!
Jacob Dorman

1
도움이되어서 다행입니다. 방금 또 다른 흥미로운 도구를 찾았지만 한동안 업데이트되지는 않았지만 github.com/idler/MMP
Víctor López García

@JacobDorman DBVC를 사용하면 다른 환경의 DB 변경 사항을 성공적으로 병합 할 수 있습니까? 나는 내 자신의 전략을 만들었지 만 DBVC는 업데이트 파일을 생성 합니까 아니면 SQL 덤프 사이에 mysqldiff 와 같은 것을 사용해야 합니까? 내가없는 이미지는 내가 파일을 가정하더라도 그 처리 편집 할 수 ... 별도의 라인에 특히 INSERT 문 매개 변수, 실제로 비교할 생산 SQL 차이를하는 데 도움이되지 않는 유용한이 도구를 할 수 ...
스펜서 윌리엄스

@SpencerWilliams DBVC를 사용하지 않고 mysqldiff를 사용하지 않았지만 여전히 버전 제어에 db 덤프를 추가합니다 ... 대부분의 경우 병합 가능한 것으로 보이지는 않지만 비교를 넘어서 비교하면 하이라이트가 도움이 될 수 있습니다 변경 및 문제.
Jacob Dorman

@ 빅터 나는 MMP를 체크 아웃했다. 스키마 변경은 수행하지만 데이터 차이 / 삽입은 수행하지 않습니다.
David Silva Smith

2

MYSQL 에서이 작업을 수행하고 있습니다.

모든 테이블 스키마와 데이터를 자체 파일에 저장하므로 변경된 내용을 쉽게 볼 수 있습니다.

이 스레드의 다른 대부분의 솔루션과 달리이 솔루션은 CMS에 중요한 데이터를 가져옵니다.

이 솔루션은 도구를 사용하지 않고 명령 줄 스크립트 만 사용합니다.

편집 : 이전 코드에 가져 오기 순서가 중요한 버그가 있음을 발견했습니다. 오프 복용 --compact플래그하면 버그가 수정되었습니다.

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     echo exporting $x
     mysqldump -u root -ppassword --skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset --extended-insert=FALSE --replace --skip-dump-date dbname $x > "./db/$x.sql"
done

이전 코드

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     mysqldump -u root -ppassword --compact --extended-insert=FALSE --replace dbname $x > "./db/$x.sql"
done

그리고 여기에 가져 오는 방법이 있습니다

for x in `ls ./db/*.sql`; do
     echo importing $x
     mysql -pdbpassword dbname --force < $x
done
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.