개발, 테스트 및 프로덕션 서버간에 데이터베이스 스키마 및 데이터를 관리하는 방법에 대한 좋은 예를 찾으려고 고생했습니다.
설정은 다음과 같습니다. 각 개발자에게는 앱과 MySQL 데이터베이스를 실행하는 가상 머신이 있습니다. 그들이 원하는 것을하는 것은 그들의 개인 샌드 박스입니다. 현재 개발자는 SQL 스키마를 변경하고 SVN에 커밋 한 텍스트 파일로 데이터베이스를 덤프합니다.
항상 최신 커밋 된 코드를 실행하는 지속적인 통합 개발 서버를 구축하려고합니다. 지금 그렇게하면 각 빌드마다 SVN에서 데이터베이스를 다시로드합니다.
"릴리스 후보"를 실행하는 테스트 (가상) 서버가 있습니다. 테스트 서버에 배포하는 것은 현재 매우 수동 프로세스이며 일반적으로 SVN에서 최신 SQL을로드하고 조정해야합니다. 또한 테스트 서버의 데이터가 일치하지 않습니다. 마지막 개발자가 샌드 박스 서버에서 수행 한 테스트 데이터는 무엇이든 가능합니다.
모든 것이 고장 나는 곳은 프로덕션 환경에 대한 배포입니다. 라이브 데이터를 테스트 데이터로 덮어 쓸 수 없으므로 모든 스키마 변경 사항을 수동으로 다시 작성해야합니다. 데이터를 조작하기 위해 많은 스키마 변경 또는 변환 스크립트가있는 경우에는 실제로 문제가 발생할 수 있습니다.
문제가 스키마 일 뿐이라면 문제가 더 쉬울 수 있지만 보안 및 권한 테이블의 메타 데이터와 같이 개발 중에 업데이트되는 데이터베이스에 "기본"데이터가 있습니다.
이것이 지속적인 통합과 1 단계 빌드로 나아가는 데있어 가장 큰 장벽입니다. 어떻게 당신은 그것을 해결?
후속 질문 : 데이터베이스 버전을 추적하여 주어진 데이터베이스 인스턴스를 업그레이드하기 위해 실행할 스크립트를 어떻게 알 수 있습니까? Lance와 같은 버전 표가 표준 절차 아래에 언급되어 있습니까?
Tarantino를 참조 해 주셔서 감사합니다. .NET 환경에 없지만 DataBaseChangeMangement 위키 페이지 가 매우 유용 하다는 것을 알았습니다 . 특히이 파워 포인트 프레젠테이션 (.ppt)
*.sql
주어진 디렉토리 의 스크립트 이름을 데이터베이스의 테이블과 비교하여 확인하고 파일 이름의 첫 번째 부분을 구성하는 정수를 기준으로 순서가없는 스크립트를 실행하는 Python 스크립트를 작성합니다 . 그것이 매우 의심스러운 솔루션이라면, 여기에 게시 할 것입니다.
이에 대한 작업 스크립트가 있습니다. 존재하지 않는 경우 DB 초기화 및 필요에 따라 업그레이드 스크립트 실행을 처리합니다. 기존 데이터베이스를 지우고 파일에서 테스트 데이터를 가져 오는 스위치도 있습니다. 약 200 줄이므로 게시하지 않습니다 (관심이 있다면 pastebin에 넣을 수는 있음).