당신은 어떻게 관리하는 데이터베이스에서의 개발,테스트 및 생산?

StackOverflow https://stackoverflow.com/questions/6371

  •  08-06-2019
  •  | 
  •  

문제

나는 열심히하고 좋은 예는 어떻게 관리하는 데이터베이스키 및 데이터 간의 개발,테스트,그리고 생산을 서버에 있습니다.

여기 우리의 설정입니다.각 개발자가 실행하는 가상 컴퓨터의 응용 프로그램과 MySQL 데이터베이스입니다.그것은 자신의 개인을 그들이 원하는 무엇이든.현재는,개발자가 변경하 SQL 스키마와 덤프의 데이터베이스를 텍스트 파일로 그들은 commit 로 SVN.

우리가 원하는 배포를 지속적인 통합 개발 서버가 항상 최신 실행을 위해 각 코드입니다.만일 우리가 우리는 지금,그것은 새 데이터베이스에서 SVN 각 구축.

우리가 테스트(virtual)서버를 실행하는"출시 후보자." 배포하 테스트 서버는 현재 매뉴얼을 매우 프로세스,그리고 일반적으로 포함한 나 로드 최신 SQL 에서 SVN 고 꼬집니다.또한,데이터가 테스트에 서버가 일치하지 않습니다.당신은 결국 무엇이든 테스트 데이터 마지막으로 개발자 커밋에서 자신의 샌드박스 서버입니다.

모든 것을 나누는 배포를 생산합니다.때문에 우리는 수 없는 덮어쓰기는 살진 데이터 테스트 데이터를 포함한 수동으로 다시 만들기 모든 스키마에 변경합니다.는 경우가 있었의 큰 숫자 스키마에 변경하거나 변환 스크립트를 조작하는 데,이것을 얻을 수 있습니다 정말 털.

는 경우 이 문제는 단지 스키마에,그것은 쉬운 문제이지만,거기에는"기본"데이터베이스의 데이터를 업데이트되는 동안 개발,뿐만 아니라 같은 메타 데이터는 보안 및 사용 권한 테이블이 있습니다.

이것은 가장 큰 장벽에서 참조로 움직이 지속적인 통합 및 단일 단계-니다.어떻게 당신 그것을 해결?


후속 질문:당신은 어떻게 추적 데이터베이스의 버전을 알 수 있도록 하는 스크립트를 실행하는 업그레이드는 주어진 데이터베이스의 인스턴스가?은 버전 테이블과 같은 창이 언급은 아래에 표준 절차?


감사에 대한 참조해당한다.나지 않습니다.인터넷 환경,그러나 내가 그들의 DataBaseChangeMangement wiki 페이지 매우 도움이 된다.특히 이 Powerpoint 프레젠테이션(.ppt)

내가 쓰 Python 스크립트를 확인하는 이름 *.sql 스크립트는 특정 디렉토리에 대한 데이터베이스에서 테이블과 실행하는 사람이 없는 거기에서 순서에 따라 정수가 첫 번째 부분을 형성하는의 파일 이름입니다.면 그것은 아주 간단한 솔루션으로,나는 그것을 의심 될 것입니다,다음 설정할 수 있습니다 그것은 여기에.


나는 작업에 대한 스크립트이다.그것은 처리를 초기화 DB 존재하지 않는 경우며 업그레이드를 실행하는 스크립트가 필요합니다.거기에는 또한 스위치를 위한 닦는 기존 데이터베이스에 가져오기 및 테스트 데이터에서 파일입니다.그것은 약 200 라인,그래서 나는 게시하지 않습니다(하지만 나는 수도에 넣어 pastebin 이 있는 경우에는 관심).

도움이 되었습니까?

해결책

의 몇 가지 좋은 옵션입니다.나는 사용하지는 않을 것"백업 복원"전략입니다.

  1. 스크립트의 모든 스키마를 변경하고 당신의 CI 서버를 실행 스크립트를 데이터베이스에 있습니다.버전 테이블 추적을 유지 현재 데이터베이스의 버전에만 실행하는 스크립트는 경우 그들은 새로운 버전입니다.

  2. 사용한 마이그레이션 솔루션입니다.이러한 솔루션에 따라 다르지만습니다.NET 사용 Migrator.NET.이것은 당신 버전의 데이터베이스 및 이와 사이에 아래로 버전입니다.스키마가 지정된 C#의 코드입니다.

다른 팁

개발자가 작성해야 변경 스크립트(키 및 데이터 변경)에 대한 각각의 버그/기능 그들은 작업에서,단지 덤프 전체 데이터베이스로 원본을 제어합니다.이러한 스크립트는 것입 업그레이드는 현재 생산 데이터베이스를 새로운 버전을 개발합니다.

빌드 프로세스할 수 있는 복원의 복사본을 생산 데이터베이스의 적절한 환경에 실행 모든 스크립트 소스에서 그것을 제어하는 것입 업데이트를 데이터베이스에는 현재 버전입니다.우리는 이렇게 매일을 확인하는 스크립트가 모두 올바르게 실행됩니다.

방법에 대해 살펴보십시오 Ruby on Rails 이 작업을 수행합니다.

첫 번째가 그렇게 불리는 마이그레이션 파일,기본적으로 변환 데이터베이스키 및 데이터 버전 N 버전 N+1(나의 경우에 다운그레이드 버전에서는 N+1N).데이터베이스에 테이블을 알려주는 현재 버전입니다.

테스트 데이터베이스는 항상 깨끗이 닦아하기 전에 장치-테스트 및 채울 수정 데이터에서 파일이 있습니다.

의 예약 리팩터링 데이터베이스:진화하는 데이터베이스 디자인 을 줄 수 있는 방법에 대한 몇 가지 아이디어를 관리하는 데이터베이스입니다.짧은 버전을 읽을 수 있도 http://martinfowler.com/articles/evodb.html

에서 하나 PHP+MySQL 프로젝트에 나가는 데이터베이스의 개정 번호 데이터베이스에 저장하고 프로그램이 데이터베이스에 연결,그것은 처음을 확인합니다.는 경우 프로그램이 필요한 다른 개정,그것은 페이지가 열립니다 업그레이드를 위한 데이터베이스입니다.각 업그레이드가 지정된 PHP 의 코드,변경되는 데이터베이스에 스키마 및 마이그레이션 모든 기존 데이터입니다.

  • 이름 귀하의 데이터베이스는 다음과 같습니다-db_dev,db_test,db_qa,db_prod(물론 당신이 없어야 하드코드 db 이름
  • 따라서 당신은 것을 배포할 수 있도 다른 유형의 db 로의 동일한 실제 서버(I 지 않 예약하신 고객님들이 주로 선호하는,그러나야 할 수 있습니다...면 리소스를 꽉)
  • 장 당신이 이동할 수 있는 데이터들 사이에 자동으로
  • 별도의 db 만들기 스크립트에서 인구=해야는 항상 가능하시 db 처음부터 그것을 채우(이전에서 db 버전 또는 외부 데이터 소스
  • 를 사용하지 않는 현재 연결 문자열에 코드(도지에서 설정 파일)사용에 config 파일은 연결 문자열 템플릿 당신을 채우는 동적으로,각 재구성 application_layer 가 필요로 다시 컴파일이 나쁘
  • 지 사용하여 데이터베이스의 버전 관리와 db 개 버전-당신이 그것을 줄 수 있는 경우 사용할 준비가 제품을하지 않을 경우,무언가를 개발 자신에
  • 추적 각 DDL 변경하고 저장으로 일부 역사 테이블( 예제 )
  • 일일 백업!얼마나 빨리 테스트할 수 있을 복원하는 뭔가가 분실에서 백업(사용 automathic 복원하는 스크립트
  • 심지어 개발 데이터베이스 및 자극이 정확히 동일한 창조 스크립트에 문제가 있으로 데이터를,그래서 개발자들의 정확한 복사본을 자극하고 그것으로 재생(나는 받을 것이 장단점이 하나,하지만 사고 방식에 변화 및 비즈니스 프로세스는 훨씬 적은 비용을 때 똥 팬 안타-그래서 강제로더를 아래 첨자는 법적으로 무엇이든 그것만 보이나

이것은 무언가가는 내가 지속적으로 만족하리 솔루션은 이 문제입니다.몇 년 동안 우리는 유지되는 별도의 변경에 대한 스크립트습니다.이 스크립트의 것을 포함 델타에서 마지막 생산 릴리스입니다.각 출시 응용 프로그램의 버전 번호는 것이 증가,주식은 다음과 같습니다.

  • dbChanges_1.sql
  • dbChanges_2.sql
  • ...
  • dbChanges_n.sql

이 일이 잘 될 때까지 충분히기 시작했습 유지하는 두 줄의 개발:트렁크/주류에 대한 새로운 발전 및 유지 보수점에 대한 버그 수정,단기 개선,etc.필연적으로,필요 일어나 변경하는 스키마에서 분기.이 시점에서,우리는 이미 dbChanges_n+1 입니다.sql,트렁크에 그래서 우리는 우리를 가지고 체계와 같은 다음과 같다:

  • dbChanges_n.1.sql
  • dbChanges_n.2.sql
  • ...
  • dbChanges_n.3.sql

또 다시,이것은 충분히 잘했을 때까지,우리는 어느 날 우리가 보았 42 델타 스크립트에서 본선에 10 지점에 있습니다.아!

이러한 일을 우리는 단순히 유지하는 델타 스크립트에게 SVN 버전-즉우리는 덮어쓰기는 스크립트로 각 릴리스입니다.우리는 멀리에서 스키마에서 변경 가지입니다.

그래서 내가 만족하지 않습니다.내가 정말 좋아하의 개념에서의 마이그레이션을 수도 있습니다.난 매일매일에 매료 LiquiBase.그것은 개념을 지원합의 증가 데이터베이스 리팩터링.그것은 모양의 가치가 그것을 보고에서 상세요.누구나 경험이 있나요?나는 호기심을 듣고에 대한 결과입니다.

당신은 수도에서 같은 도구를 사용하여 SQL 비교 스크립트 사이의 차이를 다양한 버전의 데이터베이스를 허용,당신은 빨리 사이의 마이그레이션 버전

우리는 아주 비슷한 설정을 OP.

개발자 개발에서 VM 의 개인 DB 습니다.

[자 곧 투입으로 프라이빗 가지]

테스트는 서로 다른 컴퓨터에서 실행(에서 실제로에서 VM 의 서버에 호스팅된) [곧 실행에 의해 허드슨 CI 서버]

테스트를로드하여 참조 덤프로 db.용자 스키마 패치 적용 후자는 데이터 패치

한 후 실행하 단위 시스템을 테스트합니다.

생산 배포를 고객으로 설치 됩니다.

What we do:

우리는 스키마의 덤프리 sandbox DB.다음 sql 데이터 덤프.우리는 차이는 이전의 기준입니다.는 한 쌍의 델타 업그레이드하는 것입 n1n.

우리는 구성 덤프 및 델타.

그래서 버전을 설치 N 깨끗한 우리는 실행하는 덤프 빈 db.패치를 적용,개입니다.

(주하이 언급 철도 한 테이블에 기록이 현재 DB 버전은 좋은 하나 확인해야 업데이트 설치를 고민을 덜.)

델타 덤프하기 전에 심사 베타 테스트입니다.를 볼 수 없습니다 이 문제를 해결할 방법으로 본 개발자 삽입 테스트 계정으로 DB 습니다.

체크아웃 dbdeploy, 있다,Java.net 도구는 이미 사용할 수 있습을 따르는 그들의 표준에 대한 SQL 파일의 레이아웃과 스키마 버전 테이블 작성하는 파이썬 버전입니다.

나는 두려워서 계약과 기타 포스터.개발자를 스크립트들을 변경합니다.

많은 경우에는 간단한 변경 테이블 작동하지 않습니다,당신은 수정할 필요가 기존 데이터를 너무 개발에 필요한 것은 무엇에 대한 마이그레이션을 요구하고 있는지 확인들은 스크립트가 제대로(의 과정을 테스트 해야 하는 이중의 어떤 시점에서 릴리스 사이클).

또한,당신은 어떤 의미에,당신은 당신의 개발자를 스크립트는 롤백을 위해 그들의 변경 뿐만 아니라 그래서 그들은 되돌릴 수 있습니다 할 필요가있는 경우.이 테스트해야뿐만 아니라,되도록 그들의 롤백하지만 실행하지 않고 오지만,잎 DB 에서 동일한 상태로 이전(이것은 항상 가능하지 않거나 바람직하지만,좋은 규칙의 대부분은 시간).

어떻게 당신은 후크로 CI server,내가 알지 못합니다.아마도 당신의 CI 서버를 알려지를 구축 스냅샷에있는,그것으로 되돌아 그 다음에 적용되는 모든 변경 사항입니다.아마 최고의,그렇지 않으면 깨진이 스크립트가 깨지는 밤의 구축,그 이후 모든 것들입니다.

는 경우에.순이 환경 그런 다음 솔루션 .을 처리하는 모든이(포함하여 sql 스크립트가 설치)에 넝니다.

썼는 도구는(에 의해 연결 열 DBDiff)비교하여 데이터베이스에 스키마 및 마이그레이션 스크립트를 당신입니다.는 경우는 변경을 수행하는 삭제하거나 수정하는 데이터 오류가 발생합니다.을 제공하지만,제안이에 대한 스크립트가(예를들면때 열 수 없에 새로운 스키마에,그것은 확인된 경우 로 변경되었습니다 만들기 xx-생성되는 스크립트입니다.sql.제안이 포함된 이름을 바꾸고서).

http://code.google.com/p/migrationscriptgenerator/ SQL Server 만 난 두려워하는(그것은 또한 매우 알파,하지만 그것은 매우 낮은 마찰(특히 경우에 당신은 그것을 결합으로 스티나 http://code.google.com/p/simplescriptrunner/)

이 방법을 사용은 SQL 스크립트는 프로젝트에서.sln.당신은 또한 db_next 로컬에 데이터베이스는 당신이 당신의 변화를 사용하여(관리 또는 스튜디오 NHibernate 스키마를 내보내기LinqToSql CreateDatabase 거나 뭔가).다음을 실행 migrationscriptgenerator 로 _dev 및 _next DBs 는 만듭니다.SQL 업데이트에 대한 스크립트 로 마이그레이션습니다.

우리가 사용하는 명령줄 mysql-diff:출력 사이에 차이 데이터베이스의 스키마(서 라이브 DB 또는 스크립트)으로 변경 스크립트입니다.mysql-차이에 실행되는 응용 프로그램 시작하는 경우 스키마에 변화를 보고하는 개발자이다.그래서 개발자를 작성할 필요가 없습니다 변경,수동으로 스키마 업데이트가 반 자동으로 합니다.

Oracle 데이터베이스에 대해 우리가 사용하는 oracle-ddl2svn 도구입니다.

이 도구는 자동화된 다음 과정

  1. 모든 db 계획을 얻을 계획 ddl
  2. 아래에 넣어 버전 contol

변경 사이의 인스턴스를 수동으로 해결

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top