Google Compute Engine에서 MySQL에 대한 원격 액세스를 설정하는 방법

Google Cloud SQL을 사용하는 대신 Google Compute Engine에 MySQL을 설치하는 주요 사용 사례 중 하나는 MySQL 서버와 클라이언트 애플리케이션을 사설 네트워크에 유지하려는 경우입니다. Cloud SQL은 모든 Cloud SQL 인스턴스에 공개 IPv6 주소를 자동으로 할당하고 공개 IPv4 주소를 추가하는 옵션을 제공합니다. 뿐만 아니라 공개 IPv4 또는 IPv6 주소를 갖는 클라이언트만 Cloud SQL 인스턴스에 원격으로 액세스할 수 있습니다.

사설 네트워크에서 MySQL 서버와 클라이언트를 실행하려면 서버와 클라이언트 모두에 Compute Engine 인스턴스를 사용합니다. 이 문서에서는 동일한 사설 네트워크의 Compute Engine 인스턴스에 설치된 MySQL 클라이언트가 보내는 원격 트래픽을 수락하도록 MySQL 서버 애플리케이션을 구성하는 방법을 설명합니다.

적합한 MySQL 배포 옵션을 선택하는 방법에 대한 자세한 내용은 Google Compute Engine에 MySQL을 설치하는 방법을 참조하세요.

목표

  • Compute Engine 인스턴스 만들기 및 MySQL 서버 설치
  • Compute Engine 인스턴스 만들기 및 MySQL 클라이언트 설치
  • 원격 액세스를 위해 MySQL 서버 구성
  • MySQL에 원격으로 연결
  • 포트 3306을 개방하는 방화벽 규칙 만들기

선행 조건

GCP 콘솔을 사용하여 이 문서의 모든 단계를 완료할 수 있지만, gcloud 명령줄 도구를 사용하려는 경우 다음 단계에 따라 Compute Engine API를 사용 설정하고 Google Cloud SDK를 설치하세요.

  1. GCP 콘솔을 사용하여 Compute Engine API를 사용 설정합니다.

  2. Google Cloud SDK를 설치합니다.

  3. 작업공간을 구성하여 명령이 출력하는 내용을 줄입니다. 다음 명령어에서 project-idmy-zone을 내 프로젝트의 값으로 바꿉니다. 영역의 전체 목록은 사용 가능한 지역 및 영역을 참조하세요.

    me@local:~$ gcloud config set project project-id
    me@local:~$ gcloud config set compute/zone my-zone
    

Compute Engine 인스턴스 만들기 및 MySQL 서버 설치

MySQL에 사용할 인스턴스를 만들고 새로 생성된 인스턴스에 대한 SSH 연결을 설정합니다. 기본 운영체제는 Debian 9입니다. 이 가이드에서 다른 운영체제를 사용하려는 경우 Compute Engine 문서의 운영체제 페이지에서 설명하는 옵션 중에서 선택할 수 있습니다.

GCP 콘솔에서 Compute Engine 인스턴스를 만드는 방법은 다음과 같습니다.

콘솔


  1. GCP Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기를 클릭합니다.
  3. 이름my-server으로 설정합니다.
  4. 관리 탭을 클릭합니다.
  5. 태그 섹션에서 mysql-server을 추가합니다.
  6. 만들기를 클릭하여 인스턴스를 만듭니다.

SSH 연결을 설정하는 방법은 다음과 같습니다.

  1. GCP Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 가상 머신 인스턴스 목록에서 연결할 인스턴스 행의 SSH를 클릭합니다.

gcloud


  • 새 Compute Engine 인스턴스를 만듭니다. 인스턴스는 다음과 같이 구성합니다.
    • 인스턴스 이름을 my-server으로 설정합니다.
    • --zone 플래그를 인스턴스를 만들려는 영역으로 설정합니다.
    • --tags 플래그를 mysql-server로 설정합니다.
    gcloud compute instances create my-server --zone [ZONE] --tags mysql-server
  • my-server 인스턴스로의 SSH 연결을 설정합니다.

    gcloud compute ssh my-server

    MySQL 서버 설치

    다음 단계에서는 Compute Engine 인스턴스에 MySQL을 설치하는 방법을 설명합니다.

    Debian 및 Ubuntu


    1. apt-get 패키지 관리자를 업데이트합니다.

      $ sudo apt-get update
      
    2. MySQL을 설치합니다. 설치 과정에서 MySQL 서비스가 자동으로 시작됩니다.

      $ sudo apt-get -y install mysql-server
      

    CentOS 6 및 RHEL 6


    1. MySQL을 설치합니다.

      $ sudo yum -y install mysql-server
      
    2. MySQL 서버를 시작합니다.

      $ sudo service mysqld start
      

    CentOS 7 및 RHEL 7


    CentOS 및 RHEL의 버전 7에서는 패키지 관리 시스템의 일부로 MySQL 대신 MariaDB가 포함됩니다. CentOS 7에 MySQL을 설치하려면 우선 패키지 관리자를 업데이트해야 합니다.

    1. MySQL을 포함하도록 패키지 관리자를 업데이트합니다.

      $ sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
      
    2. MySQL을 설치합니다.

      $ sudo yum -y install mysql-community-server
      
    3. MySQL 서버를 시작합니다.

      $ sudo /usr/bin/systemctl start mysqld
      

    MySQL 설치 보안 강화

    MySQL 설치의 보안을 강화하려면 mysql_secure_installation 명령어를 실행합니다. 설치 과정 중에 비밀번호를 설정하지 않은 경우 이 단계에서 비밀번호를 만듭니다. 이 명령어에 대한 자세한 내용은 MySQL 문서에서 mysql_secure_installation 부분을 참조하세요.

        $ sudo mysql_secure_installation
    

    Compute Engine 인스턴스 만들기 및 MySQL 클라이언트 설치

    MySQL 클라이언트를 사용하여 my-server 인스턴스의 MySQL 서버에 원격으로 액세스하는 Compute Engine 인스턴스를 만듭니다. 기본 운영체제는 Debian 9입니다. 이 가이드에서 다른 운영체제를 사용하려는 경우 Compute Engine 문서의 운영체제 페이지에서 설명하는 옵션 중에서 선택할 수 있습니다.

    콘솔


    GCP 콘솔에서 Compute Engine 인스턴스를 만드는 방법은 다음과 같습니다.

    1. 새 인스턴스를 클릭합니다. 인스턴스 이름을 my-client로 설정합니다.

    2. 기본값과 다른 운영체제를 지정하려면 부팅 디스크 섹션에서 변경을 클릭하고 운영체제를 선택한 후 선택을 클릭합니다.

    3. 관리, 보안, 디스크, 네트워킹, 단독 임대를 클릭하여 고급 설정을 표시합니다. 네트워킹 탭에서 mysql-client라는 네트워크 태그를 추가합니다.

    4. 만들기를 클릭합니다.

    두 인스턴스의 내부 IP 주소를 가져오는 방법은 다음과 같습니다.

    1. GCP 콘솔의 VM 인스턴스 페이지에 있는 목록에서 새 인스턴스를 찾습니다.

    2. 이름 열에서 my-client를 클릭합니다. 내부 IP에 나열된 IP 주소를 기록해 둡니다.

    3. VM 인스턴스 페이지로 돌아간 후 목록에서 my-server를 찾습니다.

    4. 이름 열에서 my-server를 클릭합니다. 내부 IP에 나열된 IP 주소를 기록해 둡니다.

    gcloud


    1. Compute Engine 인스턴스를 만들려면 gcloud compute instances create 명령어를 사용합니다. 다른 운영체제를 사용하려면 --image-project--image-family 명령줄 플래그를 사용하여 해당 운영체제 이미지의 프로젝트 및 패밀리를 지정합니다. gcloud compute images list를 실행하면 사용 가능한 이미지 프로젝트 및 패밀리의 목록을 볼 수 있습니다.

      me@local:~$ gcloud compute instances create my-client --tags 'mysql-client'
      
    2. 다음 명령어를 실행하고 INTERNAL_IP 열에 나열된 인스턴스의 내부 IP 주소를 기록해 둡니다.

      me@local:~$ gcloud compute instances list
      

    my-client에 대한 SSH 연결 설정

    다음 안내에 따라 새로 만든 my-client 인스턴스에 대한 SSH 연결을 설정합니다.

    콘솔


    SSH 연결을 설정하는 방법은 다음과 같습니다.

    1. GCP 콘솔의 VM 인스턴스 페이지에 있는 인스턴스 목록에서 my-client를 찾습니다.

    2. 연결 열에서 SSH를 클릭합니다. 브라우저 창에 SSH 터미널이 열립니다.

    gcloud


    SSH를 사용하여 인스턴스에 연결합니다.

        me@local:~$ gcloud compute ssh my-client
    

    MySQL 클라이언트 설치

    다음 단계에서는 MySQL 클라이언트 my-client를 설치하는 방법을 설명합니다.

    Debian 및 Ubuntu


    1. apt-get 패키지 관리자를 업데이트합니다.

      $ sudo apt-get update
      
    2. MySQL 클라이언트를 설치합니다. 설치 과정에서 MySQL 서비스가 자동으로 시작됩니다.

      $ sudo apt-get -y install mysql-client
      

    CentOS 6 및 RHEL 6


    MySQL 클라이언트를 설치합니다.

        $ sudo yum -y install mysql-client
    

    CentOS 7 및 RHEL 7


    CentOS 및 RHEL의 버전 7에서는 패키지 관리 시스템의 일부로 MySQL 대신 MariaDB가 포함됩니다. CentOS 7에 MySQL을 설치하려면 우선 패키지 관리자를 업데이트해야 합니다.

    1. MySQL을 포함하도록 패키지 관리자를 업데이트합니다.

      $ sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
      
    2. MySQL 클라이언트를 설치합니다.

      $ sudo yum -y install mysql-community-client
      

    my-server의 MySQL 서버 구성

    my-server에 대한 기존 SSH 연결을 사용하여 MySQL 서버를 구성합니다. my-server에 대한 SSH 연결을 닫은 경우 다음 안내에 따라 SSH 연결을 다시 설정합니다.

    콘솔


    SSH 연결을 설정하는 방법은 다음과 같습니다.

    1. GCP 콘솔의 VM 인스턴스 페이지에 있는 인스턴스 목록에서 my-server 인스턴스를 찾습니다.

    2. 연결 열에서 SSH를 클릭합니다. 브라우저 창에 SSH 터미널이 열립니다.

    gcloud


    SSH를 사용하여 인스턴스에 연결합니다.

        me@local:~$ gcloud compute ssh my-server
    

    my-client에 있는 MySQL 클라이언트의 원격 연결을 수락하도록 MySQL 서버를 구성하려면 MySQL 구성 파일을 수정하고 MySQL 사용자 테이블에 사용자를 추가합니다.

    1. my.cnf 구성 파일을 열어 수정합니다.

      $ sudo nano /etc/mysql/my.cnf
      
    2. bind-address127.0.0.1로 설정하는 줄을 찾습니다.

      bind-address            = 127.0.0.1
      

      127.0.0.1my-server 인스턴스의 내부 IP 주소로 바꿉니다.

      bind-address            = <internal-ip-my-server>
      
    3. 변경사항을 저장하고 텍스트 편집기를 종료합니다.

    4. MySQL 서비스를 다시 시작합니다.

      $ sudo service mysql restart
      
    5. MySQL 서버에 루트 MySQL 사용자로 로그인합니다.

      $ mysql --user=root -p
      

      MySQL에 연결하면 프롬프트가 다음과 같이 변경됩니다.

      mysql>
      
    6. TESTUSER라는 새 사용자를 만듭니다. 이번에도 <internal-ip-my-client>my-client 인스턴스의 내부 IP 주소로 바꾸고 <some-password>를 직접 선택한 비밀번호로 바꿉니다. MySQL 서버에 원격으로 액세스하려면 이 비밀번호가 필요합니다.

      mysql> CREATE USER 'TESTUSER'@'<internal-ip-my-client>' IDENTIFIED BY '<some-password>';
      
    7. 새로 만든 TESTUSER에 필요한 권한을 부여합니다.

      mysql> GRANT ALL PRIVILEGES ON *.* TO 'TESTUSER'@'<internal-ip-my-client>' IDENTIFIED BY '<some-password>';
      
    8. MySQL 명령줄을 종료하고 my-server에 대한 SSH 연결을 닫습니다.

      mysql> exit
      $ exit
      

    my-server의 외부 IP 주소 삭제

    클라이언트에서 내부 IP 주소를 통해 my-server에 액세스할 수 있으므로 my-server 인스턴스에는 외부 IP 주소가 필요하지 않습니다. my-client 인스턴스의 외부 IP 주소도 삭제할 수 있지만, my-client에 외부 IP 주소가 있어야 SSH 연결을 설정하기가 더 쉬우므로 이 주소는 그대로 두겠습니다.

    다음 안내에 따라 my-server 인스턴스의 외부 IP 주소를 삭제합니다.

    콘솔


    외부 IP 주소를 삭제하는 방법은 다음과 같습니다.

    1. GCP 콘솔의 VM 인스턴스 페이지에 있는 인스턴스 목록에서 my-server를 찾습니다.

    2. 이름 열에서 my-server를 클릭합니다.

    3. 외부 IP를 찾아서 수정을 클릭합니다.

    4. 드롭다운 목록에서 없음을 선택하고 저장을 클릭합니다.

    gcloud


    외부 IP 주소를 삭제하려면 구성 설정을 업데이트합니다.

        me@local:~$ gcloud compute instances delete-access-config my-server --access-config-name "external-nat"
    

    원격으로 MySQL 서버 액세스

    다음 단계에서는 my-client 인스턴스에서 my-server의 MySQL 서버에 연결하는 방법을 설명합니다.

    1. MySQL 클라이언트를 사용하여 MySQL 서버에 연결합니다.

      $ mysql --host='<internal-ip-my-server>' --user=TESTUSER --password
      
    2. 이제 MySQL 명령어를 실행할 수 있습니다. 예를 들어 다음 명령어는 실행 중인 스레드 및 현재 연결을 보여줍니다.

      mysql> show processlist;
      +----+----------+---------------------------------------+------+---------+------+-------+------------------+
      | Id | User     | Host                                  | db   | Command | Time | State | Info             |
      +----+----------+---------------------------------------+------+---------+------+-------+------------------+
      | 38 | TESTUSER | my-client.c.mysql-1043.internal:59154 | NULL | Query   |    0 | NULL  | show processlist |
      +----+----------+---------------------------------------+------+---------+------+-------+------------------+
      1 row in set (0.00 sec)
      

      다음 명령어를 사용하여 사용자 목록을 생성할 수 있습니다.

      mysql> SELECT User, Host, Password FROM mysql.user;
      +------------------+--------------+-------------------------------------------+
      | User             | Host         | Password                                  |
      +------------------+--------------+-------------------------------------------+
      | root             | localhost    | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
      | TESTUSER         | 10.240.88.10 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
      | root             | 127.0.0.1    | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
      | root             | ::1          | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
      | debian-sys-maint | localhost    | *619310B1BAC2FD6F6174D5C73C9E5A35F3B8F729 |
      +------------------+--------------+-------------------------------------------+
      5 rows in set (0.00 sec)
      
    3. 명령어 실행을 마쳤으면 exit 명령어를 사용하여 MySQL 클라이언트를 종료한 후 exit를 다시 사용하여 Compute Engine 인스턴스에서 로그아웃합니다.

      mysql> exit
      my-server:~$ exit
      

    고급 네트워킹 고려사항

    일반적으로는 MySQL 서버에 대한 원격 액세스를 설정할 때 서버에서 포트 3306을 열어야 합니다. 기본 네트워크 구성에 포함된 방화벽 규칙인 default-allow-internal은 Compute Engine 인스턴스 사이에서 포트 3306을 포함하여 광범위한 포트에 내부 트래픽을 허용하므로 이 가이드에서는 해당 포트를 열 필요가 없습니다.

    포트 3306을 포함하는 방화벽 규칙이 없는 네트워크 구성을 직접 만드는 경우에는 포트 3306을 열어야 합니다. 이 조건을 시뮬레이션하려면 default-allow-internal 규칙을 수정하여 포트 3306을 제외합니다.

    방화벽 규칙에서는 IP 주소 범위나 태그를 사용할 수 있습니다. IP 주소 범위는 광범위한 내부 IP 주소에 액세스 권한을 부여하려는 경우에 유용합니다. 반면, 네트워크의 특정 인스턴스에 액세스 권한을 부여하려는 경우 태그를 사용하는 방법이 더 편리합니다. 태그를 사용하면 광범위한 IP 주소에 액세스 권한을 부여하지 않고 손쉽게 새 클라이언트를 추가할 수 있습니다. 새 MySQL 클라이언트 인스턴스에 적절한 태그만 할당하면 됩니다. 예를 들어 mysql-client 태그가 있는 모든 클라이언트 인스턴스의 트래픽을 허용하는 새 방화벽 규칙을 만들 수 있습니다.

    이 가이드에서는 두 인스턴스를 만들면서 이미 태그를 할당했습니다. mysql-servermy-server 인스턴스에, mysql-clientmy-client 인스턴스에 할당한 상태입니다.

    다음 섹션에서는 기본 방화벽 규칙을 수정하여 포트 3306을 제외한 후 mysql-server 태그가 지정된 모든 인스턴스에서 포트 3306을 개방하는 새 방화벽 규칙을 만드는 방법을 보여줍니다.

    기본 방화벽 규칙 수정

    콘솔


    1. GCP 콘솔에서 네트워킹 > 방화벽 규칙으로 이동하고 default-allow-internal 옆의 체크박스를 선택합니다.

    2. 수정을 클릭합니다.

    3. 허용되는 프로토콜 및 포트 섹션에서 tcp:1-65535tcp:1-3305로 변경하고 저장을 클릭합니다.

    gcloud


        $ gcloud compute firewall-rules update default-allow-internal --allow tcp:1-3305,udp:1-65535,icmp
    

    my-client에서 MySQL로 연결하려고 하면 요청 시간이 초과됩니다.

    새 방화벽 규칙 추가

    콘솔


    1. GCP 콘솔에서 새 방화벽 규칙을 추가합니다.

    2. 다음 값을 입력합니다.

      • 이름: mysql-remote-access

      • 소스 필터: Instance tags

      • 소스 태그: mysql-client

      • 허용되는 프로토콜 및 포트: tcp:3306

      • 대상 태그: mysql-server

    3. 만들기를 클릭합니다.

    gcloud


        $ gcloud compute firewall-rules create "mysql-remote-access" --allow tcp:3306 --source-tags "mysql-client" --target-tags "mysql-server"
    

    이제 my-client에서 MySQL에 연결할 수 있습니다.

    삭제

    MySQL 가이드를 완료했으면 이후에 요금이 청구되지 않도록 Google Cloud Platform에서 만든 리소스를 삭제할 수 있습니다. 다음 섹션은 이러한 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.

    프로젝트 삭제

    비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 프로젝트를 삭제하는 것입니다.

    프로젝트를 삭제하는 방법은 다음과 같습니다.

    1. GCP Console에서 프로젝트 페이지로 이동합니다.

      프로젝트 페이지로 이동

    2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
    3. 대화상자에서 프로젝트 ID를 입력한 다음 종료를 클릭하여 프로젝트를 삭제합니다.

    인스턴스 삭제

    Compute Engine 인스턴스를 삭제하는 방법은 다음과 같습니다.

    1. GCP Console에서 VM 인스턴스 페이지로 이동합니다.

      VM 인스턴스 페이지로 이동

    2. 다음의 옆에 있는 체크박스를 클릭합니다. my-server 인스턴스
    3. 페이지 상단의 삭제 버튼을 클릭하여 인스턴스를 삭제합니다.

    다음 단계

    MySQL 서버에 원격으로 액세스하는 방법을 알아보았습니다. MySQL을 사용하는 더 복잡한 애플리케이션을 살펴보려면 Google Cloud Platform Marketplace에서 MySQL을 사용하는 다양한 개발 스택을 둘러보세요.

    요구사항에 고가용성 및 확장성이 포함되는 경우 Compute Engine에 MySQL 클러스터를 설치해 보시기 바랍니다. MySQL 클러스터는 비공유 클러스터링 및 자동 분할을 통해 고가용성과 확장성을 제공합니다. GCP Marketplace에서 클릭 한 번으로 간편하게 배포할 수 있는 Percona는 MySQL 클러스터링을 위한 오픈소스 솔루션입니다.

    MySQL 확장성을 위한 또 하나의 오픈소스 솔루션은 2011년부터 YouTube의 모든 데이터베이스 트래픽을 처리해 온 Vitess입니다. Vitess는 컨테이너에서 실행되는 애플리케이션에 적합합니다. 컨테이너화 환경에서 Vitess를 사용하는 방법에 대한 자세한 내용은 Kubernetes에서 Vitess 실행을 참조하세요.

    MySQL에 대한 자세한 내용은 공식 MySQL 문서를 참조하세요.

    다른 Google Cloud Platform 기능을 직접 사용해 보기. 가이드를 살펴보세요.

    이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

    다음에 대한 의견 보내기...