우리는 bcwoord와 비슷한 것을 사용하여 데이터베이스 스키마를 5 개의 서로 다른 설치 (프로덕션, 스테이징 및 몇 가지 개발 설치)에서 동기화하고 버전 제어로 백업합니다. 조금 더 자세히 설명하겠습니다.
데이터베이스 구조를 동기화하기 위해 하나의 스크립트 인 update.php와 1.sql, 2.sql, 3.sql 등으로 번호가 매겨진 많은 파일이 있습니다.이 스크립트는 하나의 추가 테이블을 사용하여 현재 버전 번호를 저장합니다. 데이터 베이스. N.sql 파일은 데이터베이스 버전 (N-1)에서 버전 N으로 이동하기 위해 수동으로 작성됩니다.
테이블을 추가하고, 열을 추가하고, 데이터를 이전에서 새 열 형식으로 마이그레이션 한 다음 열을 삭제하고, 사용자 유형과 같은 "마스터"데이터 행을 삽입하는 데 사용할 수 있습니다. 기본적으로 모든 작업을 수행 할 수 있습니다. 마이그레이션 스크립트를 사용하면 데이터가 손실되지 않습니다.
업데이트 스크립트는 다음과 같이 작동합니다.
- 데이터베이스에 연결하십시오.
- 현재 데이터베이스 (물건 때문에 백업 확인 합니다 잘못) mysqldump를]를.
- 부기 테이블 (_meta)이 없으면 만듭니다.
- _meta 테이블에서 현재 VERSION을 읽습니다. 찾을 수 없으면 0으로 가정하십시오.
- 버전이 VERSION보다 높은 모든 .sql 파일에 대해 순서대로 실행하십시오.
- 파일 중 하나에서 오류가 발생한 경우 백업으로 롤백
- 그렇지 않으면 부기 테이블의 버전을 실행 된 가장 높은 .sql 파일로 업데이트하십시오.
모든 것이 소스 제어에 들어가고 모든 설치에는 단일 스크립트 실행 (적절한 데이터베이스 비밀번호 등으로 update.php 호출)으로 최신 버전으로 업데이트하는 스크립트가 있습니다. SVN은 데이터베이스 업데이트 스크립트를 자동으로 호출하는 스크립트를 통해 스테이징 및 프로덕션 환경을 업데이트하므로 필요한 데이터베이스 업데이트와 함께 코드 업데이트가 제공됩니다.
동일한 스크립트를 사용하여 전체 데이터베이스를 처음부터 다시 만들 수도 있습니다. 데이터베이스를 삭제하고 다시 만든 다음 데이터베이스를 완전히 다시 채우는 스크립트를 실행하십시오. 스크립트를 사용하여 자동 테스트를 위해 빈 데이터베이스를 채울 수도 있습니다.
이 시스템을 설정하는 데 몇 시간 밖에 걸리지 않았으며 개념적으로 간단하고 모든 사람이 버전 번호 매기기 체계를 얻었으며 수정 사항을 수동으로 실행하거나 전달하지 않고도 데이터베이스 디자인을 발전시키고 발전시킬 수 있다는 점에서 매우 귀중했습니다. 모든 데이터베이스에서.
phpMyAdmin에서 쿼리를 붙여 넣을 때주의하십시오! 생성 된 쿼리에는 일반적으로 데이터베이스 이름이 포함되는데,이 스크립트 이름은 스크립트를 손상시키기 때문에 원하지 않습니다! CREATE TABLE과 같은 것 mydb
. newtable
시스템의 데이터베이스를 mydb라고하지 않으면 (...)가 실패합니다. 우리는 mydb
문자열을 포함하는 .sql 파일을 허용하지 않는 사전 주석 SVN 후크를 만들었습니다. 이것은 누군가가 적절한 검사없이 phpMyAdmin에서 복사 / 붙여 넣을 것이라는 확실한 신호입니다.