베하~~ 반갑습니다!!
인사통의 BTC_김회장, 최총무입니다!!
오늘 함께할 내용은
GCP환경에서 다른프로젝트로 Data를 Migration 해볼겁니다!!
쿼리를 통해 간단히 할 수 있으니 겁먹지 말고 진행하시죠~
덮어씌워지는 목적지에 데이터가 있는경우 백업은 필수입니다!!
진정한 엔지니어는 최악의 상황에 대비해야 하는법...
개요
- Bigquery 데이터 프로젝트간 Data Migration
- DB 데이터 프로젝트간 Data Migration
1. Bigquery 데이터 프로젝트간 Data Migration
클라우드를 사용하게 되면 단일 프로젝트를 사용하는 경우도 있지만 보통 개발과 운영환경으로 프로젝트를 분리하여 사용하는 경우가 대부분입니다!
이러한 경우 개발환경에서 성공적으로 테스트가 된 경우 운영환경에 반영해야 하는데요.
이러한 경우 데이터를 이주시킨다고 하여 Migration 이라는 용어를 사용합니다.
처음으로 함께 해볼 데이터 Migration은 Bigquery에 있는 테이블을 Migration 진행해보도록 하겠습니다!!
운영환경에 있는 실제 데이터를 활용하여 개발환경에서 테스트를 하고싶은 경우 유용하게 사용할 수 있겠네요!!
쿼리를 어느정도 할 줄 안다면 더욱 쉬울 수 있어요!!
예시로 간단히 생성한 table을 사용하겠습니다.
저는 My First Project에 있는 해당 테이블을 second project로 Migration 해보겠습니다!
처음으로 할 일은 해당 테이블과 같은 스키마의 테이블을 생성해주셔야 합니다.
직접 콘솔 등으로 똑같이 만드셔도 되지만 저는 테이블 스키마 또한 카피해서 생성하겠습니다!
이미 대상 테이블이 준비되어있다면 생략해도 되겠죠?
이후 이렇게 간단한 쿼리를 통해 모든 데이터를 전송해보았습니다.
여기에서 주의해야 할 점은 기존 테이블에 이미 데이터가 있었다면 데이터가 중복이 될 수 있다는 것입니다!!
그렇기 때문에 destination에 이미 있는 데이터가 다시 들어가지 않도록 조건문을 잘 사용해야겠죠?
보통은 날짜를 기준으로 많이 삼을거에요!
이 방법을 사용할때는 주의사항으로, 같은 리전에 데이터를 사용할 때 이용 가능합니다!!
보통 운영과 개발은 같은 리전에 생성하기에 해당하는 경우가 적긴 하지만 혹시라도 다른 리전으로 Migration 해야하는 경우에는 데이터를 GCS등으로 Export 후 이전하는 작업이 추가됩니다!!
2. DB 데이터 프로젝트간 Data Migration
이제 함께 DB 속 데이터를 다른 프로젝트로 보내보시죠!!
테스트가 끝난 메타 데이터 등을 운영환경으로 보내거나 환경을 새로 분리하는 등 여러환경에서 사용됩니다!!
보통 DB는 Private 환경에 숨어 있는경우가 많으니 cli server에서 작업한다고 가정해보죠.
저는 가장 먼저 데이터베이스를 dump를 통해 복제본을 만들겠습니다!!
mysqldump -h {DB의 IP} -u {DB사용자 이름} -p -P{접근 포트} {DB명} \ >DUMPFILE.sql
간단히 위와 같은 명령어로 생성 가능합니다!! 물론 여기에서 DB의 종류에따라 여러 옵션이 추가되어야 할거에요.
이렇게 생성된 dump 파일은 DEFINER가 지정되 되어 이후 권한 오류를 일으키는 문제가 생길 수 있으니 삭제하시죠!!
sed -i 's/\sDEFINER=`[^`]*`@`[^`]*`//g' DUMPFILE.sql
이제 이 dump를 옮길 프로젝트의 gcs로 보내야 합니다.
물론 권한이나 네틍워크 문제는 해결되어 있어야겠죠??
gsutil cp ./DUMPFILE.sql gs://testgcs/dump/
위 명령어를 통해 옮겨야할 환경의 GCS로 DUMP를 보내게 되면 거의 마무리입니다!!
목적지 서버내로 해당 DUMP파일 복사
gsutil cp gs://testgcs/dumpfile/DUMPFILE.sql ./DUMPFILE.sql
복사된 DUMP 파일 적용
mysql -P {DB 포트} -h {적용할 DB IP} -u {DB사용자} -p {DB명} < DUMPFILE.sql
이런 방식으로 진행하면 완성입니다!!!
오늘은 함께 GCP 환경에서의 Migration 작업을 진행하였습니다!
테스트 환경 구성의 중요성은 두말하면 입이 아플정도죠?
특히나 배우는 입장에서는 이러한 Migration을 통해 여러가지 실습을 해볼수 있어서 참 좋은것 같아요!
그러면 문제입니다!!
오늘 포스팅에서 가장 중요한 부분은 어디일까요?
정답은 가장 처음에 말했던 백업입니다!!!
익숙해졌다고 백업을 소홀히 했다가는 돌이킬 수 없는 결과가 나타날 수 있답니다...
Migration에는 백업이 필수!!
꼭 기억하자구요~
그럼 다음번에는 더욱 흥미롭고 유용한 정보들을 가져오겠습니다!!
다음 이시간까지 베빠!!
댓글