버전 업그레이드
주 버전 / 부 버전 / 수(패치) 버전
- 주 버전: 기존 버전과 호환되지 않게 API가 바뀌는 경우
- 부 버전: 기존 버전과 호환되면서 새로운 기능을 추가할 때
- 수 버전: 기존 버전과 호환되면서 버그를 수정
- MySQL 8.0.29
- 주 버전: 8.0
- 부 버전: 8.0.29
부 버전 업그레이드
- 작업 중 인스턴스가 다시 시작되어 다운타임 발생
- Cloud SQL에서는 유지보수 중 부 버전을 정기적으로 업데이트한다.
- MySQL 5.6/5.7
- 정기 유지보수 중 최신 버전으로 자동 업그레이드
- MySQL 8.0
- 다운그레이드 지원되지 않는다 → 정기 유지보수에 자동으로 포함되지 않음
- 인스턴스를 원하는 부 버전으로 업그레이드 해야한다.
- 스테이징에서 업그레이드 테스트
- 읽기 복제본 업그레이드
- 기본 Instance 백업
- 부 버전 업그레이드
- MySQL 5.6/5.7
롤백
- 이전의 부 버전에서 복구 데이터베이스 인스턴스를 프로비저닝
- 복구 데이터베이스 인스턴스의 설정을 업그레이드 전 상태로 구성
- 업그레이드 전 백업을 복구 인스턴스로 복원
*프로비저닝: 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말한다.
주 버전 업그레이드
- 2 가지 방법
- Database Migration Service(DMS) 사용
- 데이터 내보내기 → 버전 업그레이드 → 가져오기
- 다운타임 발생
- 현재 인스턴스를 읽기 전용 모드로 전환 필요
사전 테스트 진행하는 경우
- dry run Test
- 인스턴스 클론 후 내보내기 실행
- 업그레이드 후 검증
데이터 마이그레이션 - 내보내기
- 목표 주 버전으로 대상 인스턴스 생성
- 확인
- 충분한 스토리지
- 네트워크 (Whitelist IP)
- 권한과 비밀번호가 같은 동일한 사용자 계정
- 확인
- 현재 Cloud SQL 읽기 전용 모드로 설정
- 플래그 설정: read_only: on
- 현재 인스턴스의 데이터를 SQL 덤프 파일로 내보내기
- mysql 시스템 데이터베이스 제외
- 새 인스턴스에 데이터 가져오기
- 애플리케이션 업데이트 (e.g. 연결정보 변경)
- 애플리케이션 테스트
데이터 마이그레이션 - DMS
기존 데이터베이스 정보
Create a connection profile
- 사용자 이름 / 비밀번호
- 원본 데이터베이스의 사용자 이름과 암호
- 데이터베이스의 다른 측면을 손상시킬 가능성을 제한하려면 이 목적을 위해 별도의 계정을 만드는 것이 좋습니다.
- 연결 프로필
- 리전에 저장된다.
- 성능 향상을 위해서는 데이터가 필요한 서비스와 가까운 곳으로 설정
- 연결 보호 방법
- 없음
- Must: Nothing
- 서버 전용 인증
- Must: the x509 PEM-encoded certificate of the certificate authority (CA)
- 소스 데이터베이스에 연결되면 인스턴스가 소스를 인증하여 인스턴스가 올바른 호스트에 안전하게 연결되고 있는지 확인한다.
- 서버 전용 인증의 경우 소스가 인스턴스를 인증하지 않는다.
- 서버-클라이언트 인증
- Must: CA Cert, Client Cert, Client, Key
- 대상 인스턴스가 소스에 연결되면 인스턴스가 소스를 인증하고 소스가 인스턴스를 인증한다.
- 가장 강력한 보안 제공
- 없음
서버-클라이언트 인증 참고
2022.06.28 - [GCP] - [GCP]CloudSQL Server-Client Certificate Configuration
마이그레이션 작업 만들기
- 서버 ID
- default: 0
- 소스 및 각 복제본에서 server_id 시스템 변수를 설정하여 고유한 복제 ID를 설정해야 합니다.
- REPLICATION SLAVE privilege
- 마이그레이션 작업 계정에 아래 권한 추가
mysql> CREATE USER 'repl'@'%.example.com' IDENTIFIED BY 'password'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.example.com';
- GTID(Global Transaction IDentifier)
- MySQL 데이터베이스에서 커밋되는 각 트랜잭션과 함께 생성되고 트랜잭션에 연결되는 고유한 식별자
- Master, Replica 서버에서 고유한 식별자
- Master - Slave 간의 일관성 확인
- 구성: GTID = source_id:transaction_id
- 마이그레이션 작업 유형*CDC (Change Data Capture)
- MySQL 소스
- 연결 옵션
- MySQL 소스
시작하기
소스 정의
대상 위치 만들기(버전 업그레이드)
- 대상 인스턴스 구성 부분은 CloudSQL 인스턴스 생성과 동일
- 연결
- VPC를 이용하여 마이그레이션을 진행할 경우 원본, 대상 데이터베이스가 같은 VPC에 있어야 한다.
- 공개 IP를 사용해서 연결된 애플리케이션이 있는 경우 대상 위치 만들기에서 등록
- 연결
연결 방법 정의
- 비공개 IP
- 공개 IP
원본 인스턴스에서 비공개 IP 사용 설정 필요
- 원본 DB에서 네트워크 추가(whitelist)
마이그레이션 테스트 및 생성
- 테스트
- 작업 만들기
- IP 주소
- 원본 인스턴스에 등록한 IP(Whitelist)와 공개 IP 주소는 다르다. 발신 IP 주소 로 따로 존재한다.
- Replication - 외부 서버에서 복제
- Cloud SQL 마이그레이션 경로
- Database Migration Service는 외부 서버에서 Cloud SQL로 지속적 복제 또는 일회성 데이터베이스 마이그레이션을 제공합니다.
업그레이드 된 버전에서 데이터 확인
추가 작업
- 애플리케이션 코드, 스키마, 데이터베이스 설정을 수정해야 할 수 있는 호환되지 않는 변경사항이 포함됩니다.
- DB 사용자 등록
- 애플리케이션 정상 확인
정리
- 서버-클라이언트 인증서 구성
- key 생성 > cert 생성
- 업그레이드 Path 확인
- e.g. gitlab target: 14.6.2 my Version: 13.10.2 path: 13.10.2 -> 13.12.15 -> 14.0.12 -> 14.3.6 => 14.6.2
- 백업과 롤백 시나리오
- GTID(Global Transaction IDentifier)
- MySQL 데이터베이스에서 커밋되는 각 트랜잭션과 함께 생성되고 트랜잭션에 연결되는 고유한 식별자
- Master, Replica 서버에서 고유한 식별자
- Master - Slave 간의 일관성 확인
참고 문서
[1] https://cloud.google.com/sql/docs/mysql/upgrade-major-db-version-migrate?hl=ko
[4] https://cloud.google.com/database-migration/docs/mysql/networking-methods
[5] https://cloud.google.com/sql/docs/mysql/replication/external-server
[8] https://cloud.google.com/sql/docs/sqlserver/upgrade-major-db-version-inplace#faqs
'Cloud-computing > GCP' 카테고리의 다른 글
[GCP]Connect to Linux VMs with SSH (0) | 2022.08.12 |
---|---|
[GCP]GCP Product cheat sheets - Networking, Identity and Security, etc. (0) | 2022.07.24 |
[GCP]GCP Product cheat sheets - Database, Data Analytics (0) | 2022.07.24 |
[GCP]GCP Product cheat sheets - Compute, Storage (0) | 2022.07.24 |
[GCP]How to use Cloud CDN (1) | 2022.07.19 |