카테고리 없음

[GCP-8] Cloud SQL

솜정 2022. 1. 18. 09:00

0. 지난 글

[GCP-1] 구글 클라우드 기본 개념

https://ejtag.tistory.com/23

[GCP-2] 구글 클라우드 실습 준비

https://ejtag.tistory.com/24

[GCP-3] 구글 클라우드 IAM

https://ejtag.tistory.com/25

[GCP-4] Compute Engine

https://ejtag.tistory.com/26

[GCP-5] VPC

https://ejtag.tistory.com/27

[GCP-6] Cloud Load Balancing

https://ejtag.tistory.com/29

[GCP-7] Google Cloud Storage

https://ejtag.tistory.com/30

 

9. Cloud SQL

9.1 Cloud SQL 이란?

cloud SQL은 관계형 데이터베이스인 MySQL과 PostgreSQL이다.

google cloud platform에서 유지 및 관리를 해주는 완전 관리형 데이터베이스 서비스이다.

 

9.2 MySQL용 cloud SQl의 특징

전 세계에서 가장 많이 쓰이는 오픈 소스 관계형 데이터 베이스로, 오라클에서 관리 및 지원을 하고 있다.

- 완전 관리형 데이터베이스

- 2세대 인스턴스(MySQL 5.6, 5.7 지원) : 최대 416GB의 RAM과 10TB의 데이터 Repository를 제공하며, 필요에 따라 Repository 크기가 자동으로 증가하는 옵션을 제공

- 1세대 인스턴스는 2020 1월 30일에 지원 종료

- cloud SQL 프록시 또는 SSL/TLS 프로토콜을 사용한 보안 연결 지원

- 비공개 IP 지원

- 자동 장애 조치로 여러 영역 간에 데이터를 복제

- mysqldump를 활용한 데이터베이스 가져오기, 내보내기, csv 파일 가져오기, 내보내기 지원

- MySQL 유선 프로토콜 및 표준 MySQL 커넥터 지원

- 주문형 자동 백업 및 특정 시점 복구 지원

- stackdriver logging 및 Monitoring과 통합

- 인스턴스 복제

- 다양한 연결 방법 제공

 

9.3 MySQL과 MySQL용 CLoud SQL의 차이

9.3.1 지원되지 않는 기능

- 사용자 정의 함수

- InniDB memcached 플러그인

- federated engine

- SUPER 권한

 

9.3.2 지원되지 않는 명령문

============================================================================다음 SQL 문을 실행하면 오류가 발생하고 ‘Error 1290: The MySQL server is running with the Google option so it cannot execute this statement’ 메시지가 표시됩니다.

  • LOAD DATA INFILE(LOAD DATA LOCALINFILE은 지원 가능)
  • SELECT … INTO OUTFILE
  • SELECT … INTO DUMPFILE
  • INSTALL PLUGIN …
  • UNINSTALL PLUGIN
  • CREATE FUNCTION … SONAME …

MySQL 인스턴스에서는 GTID 복제를 사용하므로 다음 문은 지원되지 않습니다.

  • CREATE TABLE … SELECT 문
  • 트랜잭션 및 비트랜잭션 테이블을 모두 업데이트하는 트랜잭션이나 문

하지만 예외도 있습니다.

  • 트랜잭션 내 CREATE TEMPORARY TABLE 문

위 명령문은 Cloud SQL 5.6 및 5.7용 MySQL에서 지원되지 않지만 Cloud SQL 8.0용 MySQL에서는 지원됩니다.

또한 LOAD_FILE() 함수 역시 지원되지 않는데요. 이외 지원되지 않는 클라이언트 프로그램도 몇 가지가 있습니다. 자세한 사항은 MySQL 문서에서 확인이 가능합니다.

참고 : https://hypemarc.com/gcp-cloud-sql/?ckattempt=1 

============================================================================

 

9.3.3 지원되지 않는 함수

- LOAD_FILE()

 

9.3.4 지원되지 않는 클라이언트 프로그램

 

9.4 MySQL 인스턴스 설정 내용

9.4.1 2세대 MySQL 인스턴스 설정 

- 설정 (생성 후 수정 가능 여부) : 가능한 값

- 인스턴스 ID (N) : 인스턴스 이름을 프로젝트 내에서 고유하게 식별

- 지역 (N) : 인스턴스가 있는 GCP 지역으로 성능을 향상하려면 필요한 서비스와 가까운 위치에 데이터를 보관해야 함

- 영역 (Y) : 인스턴스가 있는 GCP 영역으로 만약 compute engine 인스턴스에서 연결하는 경우 compute engine 인스턴스가 있는 영역을 선택하고 그 외에는 기본 영역으로 설정된

- 데이터베이스 버전 (N) : 지원하는 데이터베이스 버전 (기본값 : MySQL 5.7)

- 비공개 IP (구성된 후 사용중지 불가) : 구성 / 구성 안 함

- 공개 IP (Y) : 사용 설정 / 사용 중지

- 승인된 네트워크 (Y) : 공개 IP가 사용 설정된 경우 인스턴스에 연결하도록 인증된 IP주소, 이 값을 IP 주소 범위로도 지정할 수 있음

- 머신 유형 (Y) : Cloud SQl 인스턴스에서 사용 가능한 메모리, 가상 코어, 기타 리소스를 결정

- Repository 유형 (N) : SSD(빠름) / HDD(비용 굿)

- 저장용량 (Y-증가만)

- 저장용량 자동 증가 (Y) : 켜짐(기본값) / 꺼짐

- 백업 및 바이너리 로깅 (Y) : 켜짐(기본값) / 꺼짐

- 유지관리 기간 (Y) : 요일과 시간 - 해당 기간에 업데이트를 하지 않도록 설정

- 유지관리 시점 (Y) : 상시(기본값) / 나중에 / 미리 - 다시 시작해야 하는 인스턴스 업데이트 시점에 대한 설정

- 활성화 정책 (Y) : 항상 / 사용 안 함 - 인스턴스를 시작하거나 중지하는데에만 활성화 정책이 사용됨

- 데이터베이스 플래그 (Y)

 

9.5 PostgreSQL용 Cloud SQL의 특징

- Cloud SQL 2세대 플랫폼을 기반으로 하는 오나전 관리형 PostgreSQL9.6 데이터베이스

- 최대 10TB의 저장용량을 사용할 수 있으며 필요에 따라 Repository 크기를 자동으로 늘릴 수 있음

- cloud SQL 프록시 또는 SSL/TLS 프로토콜을 사용한 보안 연결 지원

- 자동 장애 조치로 여러 영역 간에 데이터를 복제

- mysqldump를 활용한 데이터베이스 가져오기, 내보내기 지원

- java, python, php, node.js, go, ruby로 작성된 App Engine 애플리케이션과 함께 사용 가능

- MySQL 유선 프로토콜 및 표준 MySQL 커넥터 지원

- stackdriver logging 및 Monitoring과 통합

 

9.6 PostgreSQL과 PostgreSQL용 Cloud SQL의 차이

9.6.1 지원되지 않는 기능

- cloud shell의 psql 클라이언트는 \c 명령어를 사용하여 다른 데이터베이스에 연결하는 등 재연결이 필요한 작업을 지원하지 않음

- 커스텀 백그라운드 작업

- SUPER 권한 (예외적으로 create extesion문에는 이 규칙이 적용되지 않음)

 

9.7 PostgreSQL 인스턴스 설정 내용

- 설정 (생성 후 수정 가능 여부) : 가능한 값

- 인스턴스 ID (N) : 인스턴스 이름을 프로젝트 내에서 고유하게 식별

- 지역 (N) : 인스턴스가 있는 GCP 지역으로 성능을 향상하려면 필요한 서비스와 가까운 위치에 데이터를 보관해야 함

- 영역 (Y) : 인스턴스가 있는 GCP 영역으로 만약 compute engine 인스턴스에서 연결하는 경우 compute engine 인스턴스가 있는 영역을 선택하고 그 외에는 기본 영역으로 설정된

- 데이터베이스 버전 (N) : 지원하는 데이터베이스 버전 (기본값 :PostgreSQL 9.6)

- 비공개 IP (구성된 후 사용중지 불가) : 구성 / 구성 안 함

- 공개 IP (Y) : 사용 설정 / 사용 중지

- 승인된 네트워크 (Y) : 공개 IP가 사용 설정된 경우 인스턴스에 연결하도록 인증된 IP주소, 이 값을 IP 주소 범위로도 지정할 수 있음

- 코어 (Y) : 1~64(1 또는 짝수)/ 공유 vCPU의 일부 -  인스턴스의 CPU 수이며, CPU가 1개 미만인 인스턴스를 생성하도록 선택할 수 있음

- 메모리 (Y) : vCPU당 0.9 ~ 6.5 GiB(256MB의 배수, 최소 3.75GB)

- Repository 유형 (N) : SSD(빠름) / HDD(비용 굿)

- 저장용량 (Y-증가만)

- 저장용량 자동 증가 (Y) : 켜짐(기본값) / 꺼짐

- 백업 (Y) : 켜짐(기본값) / 꺼짐

- 유지관리 기간 (Y) : 요일과 시간 - 해당 기간에 업데이트를 하지 않도록 설정

- 유지관리 시점 (Y) : 상시(기본값) / 나중에 / 미리 - 다시 시작해야 하는 인스턴스 업데이트 시점에 대한 설정

- 활성화 정책 (Y) : 항상 / 사용 안 함 - 인스턴스를 시작하거나 중지하는데에만 활성화 정책이 사용됨

- 데이터베이스 플래그 (Y)

 

[실습 9.1 - cloud SQL 인스턴스 만들기]

cloud SQL 인스턴스란 사용할 데이터베이스 서버라고 생각하면 된다.

메뉴 > SQL > 인스턴스 생성 > MySQL 선택 메뉴에 접근해 위와같이 이름과 root 비밀번호 설정 후 인스턴스 만들기 클릭한다.
공개 IP 주소를 통해 해당 SQL 서버에 접속 가능하다.

 

[실습 9.2 - 인스턴스 수정]

기존 데이터 베이스 인스턴스의 리소스를 변경해 자유롭게 업그레이드, 다운그레이드가 가능하다.

메뉴 > SQL > 인스턴스 세부정보보기 메뉴에 저근해 왼쪽 상단에 수정버튼을 클릭한다.
메모리를 120GB로 업그레이드 후 저장버튼을 누른다.

 

[실습 9.3 - 공개 IP 구성 및 클라이언트 연결]

외부에서 접근 가능하도록 설정을 변경해 보겠다.

데이터베이스 인스턴스 상세페이지에서 좌측 연결 메뉴 접근해 "네트워크 추가" 버튼 클릭한다.
위와 같이 설정하고 저장을 누르면 외부 모든 네트워크에서 이 인스턴스에 접근이 가능하도록 설정된다.
수정이 완료된 후 공개 IP주소를 통해 복사한다.

mysql 설치 후 환경변수 설정을 해주면 아래와 같은 명령어로 데이터베이스 서버에 접속 가능하다.

mysql -h [SQL Ip 주소] -u [아이디] -p

참고 : https://ejtag.tistory.com/32

 

[실습 9.4 cloud SQL 프록시로 MySQL 클라이언트 연결 (2세대 전용)]

cloud SQL 프록시를 사용하면 IP 주소를 허용하거나, SSL을 구성하지 않고도 Cloud SQL 2세대 인스턴스에 안전하게 액세스 가능하다.

 

1. 먼저 Cloud SQL Admin API 사용 설정을 해보자

검색란에 cloud sql admin api로 치면 marketplace에 API가 나온다.
사용 버튼을 누르고 위 화면이 나타나면 사용설정 완료되었다.

2. 그다음 프록시를 설치해야 하는데 아래 링크에 들어가면 설치 파일이 있다. 다운로드하여 실행시키자.

https://cloud.google.com/sql/docs/mysql/connect-admin-proxy?hl=ko 

cloud_sql_proxy_x64.exe
15.17MB

3. 이번에는 서비스 계정 설정을 해보자.

메뉴 > API 및 서비스 > 사용자 인증 정보 > 서비스 계정 관리
이름과 권한 (Cloud SQL 편집자)를 설정 후 만들기 클릭한다.
키 추가를 한다.
json으로 선택 후 다운로드된 키를 잘 저장한다.

4. 이제 'cloud SQL의 인스턴스 연결 이름'을 알아내야 한다.

메뉴 > SQl > 인스턴스 세부정보 보기 메뉴에서 이 인스턴스에 연결 쪽에 '인스턴스 연결 이름이 있다. 복사!

연결 이름 : gcloud-byej:us-central1:my-database

터미널을 관리자 권한으로 실행시켜 아래 명령어 실행

cloud_sql_proxy -instances=[아까 복사한 연결 이름]=tcp:3306 -credential_file= [아까 저장한 키 풀 경로]

cloud_sql_proxy -instances=gcloud-byej:us-central1:my-database=tcp:3306 -credential_file= C:\User\F 1_EJ \cloud\gcloud-byej-5437c80caaf3.json

다른 터미널 창을 열어 아래 명령어 실행

mysql -uroot -p --host 127.0.0.1

그러면 mysql-proxy로 연결된 것이다.

 

[실습 9.5 내보내기 & 가져오기]

cloud SQL에서 내보내기, 가져오기 기능으로 백업 및 복구하는 방법을 알아보자.

1. 내보내기

메뉴 > SQl > 인스턴스 세부 > 내보내기 > 대상 위치 찾기 메뉴에 접근한다.

내보내기는 Google Cloud Storage에 저장되기 때문에 저장될 버킷을 선택해야 한다.

우측 상단에 있던 +마크를 눌러 버킷을 생성한다.(Nearline repository)
만든 버킷 선택버튼 클릭한다.
내보내기 클릭
실제 Goodle Cloud Storage에도 백업 파일이 저장이 된것을 확인할 수 있다.

2. 가져오기

가져오기 > 소스 메뉴에 아까 생성했던 버킷 안 데이터를 선택

그럼 가져온 내역이 복구가 된다.