2014-02-27 3 views
0

개발 서버에서 작업 중이지만 실제 프로덕션 서버에서 작업하는 경우 개발 서버에서 발생한 모든 DB 변경 사항을 라이브 서버로 마이그레이션하는 가장 좋은 방법은 무엇입니까?개발 vs 프로덕션 데이터베이스

내베이스는 PHP 및 CI

+0

DB 변경 사항에 대한 업그레이드 스크립트를 작성한 다음 라이브 서버에서 모두 실행하십시오. –

+0

http://stackoverflow.com/questions/225772/compare-two-mysql-databases를 확인하십시오. 두 환경간에 DB 스키마를 자동으로 동기화하는 도구가 있습니다. – qux

+0

http://stackoverflow.com/questions/8418814/db-migration-tool-liquibase-or-flyway/ –

답변

0

마이그레이션을하고 마이그레이션 관리 DB-코드 버전 변경 관리를위한 거대하고 복잡한 문제입니다. 짧은 포스트가 적절하게 해결할 수는 없지만 여기에 내가 간다 ...

일반적으로 Eloquent 나 프레임 워크와 같은 ORM을 사용하는 경우 스키마와 모델 코드가 업데이트되면 개발 DB. 그런 다음 해당 코드를 실시간으로 푸시하면 라이브 서버에서 실행됩니다.

게시물에 대한 의견에서 언급했듯이 많은 타사 도구가 있지만 대부분의 기본 상황에서는 간단한 마이그레이션 파일을 사용하여 변경 사항을 관리 할 수 ​​있습니다. 인덱스 변경이나 데이터 추가/삭제와 같이 DB에 코드와 관련이없는 변경을하면 도구가 유용합니다. 여기에 MySQL 자체 도구가 있습니다 : http://www.mysql.com/products/workbench/migrate/

이제 버전 관리 도구를 사용하고 있다고 가정하고 있습니다. 따라서 마이그레이션 지원 도구에서 orm을 작성하지 않았다면 간단히 SQL 마이그레이션 스크립트 디렉토리를 유지할 수 있습니다 커밋 수준의 코드를 수동으로 제공합니다. 개발 브랜치 코드를 프로덕션 브랜치에 병합하고 실행 시키려면 프로덕션 DB에서 migration alter table 스크립트를 실행하십시오. 이 스크립트에는 모든 변경 및 수동 삽입이 있어야합니다. 그런 다음 마이그레이션 테이블을 유지하고 실행 한 마이그레이션 스크립트를 추적 할 수 있습니다.

보너스 포인트의 경우 마이그레이션 롤백 버전을 생성 할 수 있습니다. 이렇게하면 이전 코드 버전으로 돌아 가기 전에 적용 할 수 있습니다 (오류 또는 무언가를 처리하기 위해 프로덕션 릴리스를 롤백해야하는 경우). 그런 다음 파트너 롤백없이 마이그레이션하지 마십시오. 나는 사용자 클래스, 주소 2에 새로운 속성을 추가하는 경우 예를 들어

:

migration_1_add_address_2_to_user.sql; 행운

alter table user add column address2 varchar(64); 

rollback_1_add_address_2_to_user.sql

alter table user drop column address2; 

좋은!

관련 문제