Google Compute Engine에서 MySQL을 설정하는 방법

Google Cloud 프로젝트 중 MySQL 배포를 위해서는 여러 방법이 있습니다. Cloud SQL 또는 Google Cloud Marketplace를 사용하거나 MySQL을 Compute Engine에 직접 설치할 수 있습니다.

Cloud SQL은 MySQL을 웹 서비스로 제공합니다. Cloud SQL을 사용하여 Google Cloud에 MySQL 데이터베이스를 호스팅하고 Google Cloud가 복제, 패치 관리, 데이터베이스 관리와 같은 관리 작업을 수행하도록 할 수 있습니다.

Cloud Marketplace는 MySQL을 Compute Engine 인스턴스에 쉽게 설치할 수 있게 해주는 간단한 클릭하여 배포 인터페이스를 제공합니다. Cloud Marketplace에는 독립형 MySQL 설치뿐만 아니라 LAMP 스택, LEMP 스택, Percona MySQL 클러스터를 비롯한 MySQL을 사용하는 여러 웹 개발 스택이 포함되어 있습니다.

MySQL을 수동으로 설치하고 맞춤설정하려면 Compute Engine을 사용해서 몇 분 내에 MySQL 데이터베이스를 만들 수 있습니다. 이 문서에서는 선택할 옵션을 안내하고, Compute Engine에 MySQL 데이터베이스를 수동으로 설치하는 방법을 설명합니다.

올바른 MySQL 배포 옵션을 선택하는 방법

Cloud SQL은 Google Cloud로 백엔드 데이터베이스 및 서버 관리 작업을 편리하게 수행하려는 경우에 효과적인 방법입니다. 예를 들어 Cloud SQL은 자동화된 백업 및 특정 point-in-time recovery를 제공합니다. 또한 데이터가 여러 영역 간에 복제되어 가용성과 탄력성이 향상됩니다.

Cloud SQL에서 지원되지 않는 MySQL 기능이 필요한 경우 Compute Engine에 MySQL을 설치해야 할 수 있습니다. 예를 들어 Cloud SQL은 사용자 정의 함수 또는 SUPER 권한을 지원하지 않습니다. 자세한 내용은 Cloud SQL FAQ를 참조하세요.

Compute Engine에 MySQL을 설치하도록 결정한 경우에는 Cloud Marketplace를 사용하여 MySQL 설치를 배포하거나 Compute Engine 인스턴스에 직접 MySQL을 설치할 수 있습니다. Cloud Marketplace는 MySQL을 더 큰 개발 스택으로 배포할 수 있는 편리한 방법을 제공합니다. Cloud Marketplace는 독립형 MySQL 설치, LAMP 스택, LEMP 스택, Nginx 스택, Percona MySQL 클러스터 설치를 비롯한 MySQL 설치 옵션과 기타 여러 옵션을 제공합니다.

Cloud Marketplace로 요구가 충족되지 않을 경우에는 Compute Engine 인스턴스에 직접 MySQL을 설치할 수 있습니다. 예를 들어 자신이 만든 커스텀 이미지에 MySQL을 배포하거나, 설치 프로세스를 완전히 제어할 수도 있습니다.

Compute Engine 인스턴스에 MySQL을 수동으로 설치하기 위해서는 Compute Engine 인스턴스를 만들고 인스턴스에 직접 MySQL을 설치해야 합니다. 이 문서의 나머지 부분에서는 Compute Engine 인스턴스에 MySQL을 수동으로 설치하는 방법을 설명합니다.

목표

  • Compute Engine 인스턴스 만들기
  • MySQL 설치
  • MySQL에 연결

기본 요건

  1. Google Cloud Console에서 새 프로젝트를 만듭니다. 기존 프로젝트를 사용할 수 있지만, 새 프로젝트를 만들면 더 쉽게 삭제할 수 있습니다.

    Google Cloud Console을 사용하여 이 문서의 모든 단계를 완료할 수 있지만, gcloud CLI를 사용하고 싶으면, 다음 안내에 따라 Compute Engine API를 사용 설정하고 Google Cloud CLI를 설치합니다.

  2. Google Cloud Console을 사용하여 Compute Engine API를 사용 설정합니다.

  3. gcloud CLI를 설치합니다.

  4. 작업공간을 구성하여 명령을 간결하게 만듭니다. 다음 명령어에서 PROJECT_IDZONE을 해당 프로젝트 값으로 바꿉니다. 전체 영역 목록은 사용 가능한 리전 및 영역을 참조하세요.

    gcloud config set project PROJECT_ID
    gcloud config set compute/zone ZONE
    

Compute Engine 인스턴스 만들기

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

Console

Google Cloud Console에서 Compute Engine 인스턴스를 만들려면 다음 안내를 따르세요.

  1. Google Cloud Console을 엽니다.

  2. 새로 생성된 프로젝트를 선택하고 계속을 클릭합니다.

  3. 인스턴스 만들기(기존 인스턴스가 있으면 새 인스턴스)를 클릭합니다. 인스턴스 이름을 mysql-test로 지정합니다.

  4. 기본값 이외의 다른 운영체제를 지정하려면 부팅 디스크 섹션에서 변경을 클릭하여 부팅 디스크의 속성을 구성합니다. 공개 이미지 탭에서 운영체제를 선택한 후 저장을 클릭합니다.

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

SSH 연결을 설정하려면 다음 안내를 따르세요.

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

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

gcloud

  1. Compute Engine 인스턴스를 만들려면 gcloud compute instances create 명령어를 사용합니다. 운영체제를 지정하려면 --image-family 매개변수 다음에 이미지 계열을 또는 --image 매개변수 다음에 특정 이미지의 이미지 이름을 추가합니다. 예를 들어 Debian 10 계열의 최신 이미지를 사용하려면 --image-family debian-10을 추가합니다. 공개 이미지를 사용할 경우 --image-project 매개변수를 사용하여 이미지 프로젝트를 제공해야 합니다.

    gcloud compute instances create \
        --image-family debian-10 \
        --image-project debian-cloud \
        --no-address \
      mysql-test
    

    보안 권장사항을 준수하기 위해 --no-address 옵션에서 외부 IP 주소를 사용하지 않고 이 인스턴스를 만듭니다.

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

    gcloud compute ssh \
        --tunnel-through-iap \
        mysql-test
    

    SSH 연결은 IAP(Identity-Aware Proxy)에서 처리되는 TCP 전달을 통해 수행됩니다.

MySQL 설치

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

Debian 10 이상

이 안내에서는 MySQL 8 또는 5.7을 설치합니다.

Debian 버전 10 이상에서는 패키지 관리 시스템의 일부로 MySQL 대신 MariaDB가 포함됩니다. MariaDB는 MySQL 프로토콜과의 호환성을 유지하지만 독립적으로 진화하는 특성 세트가 있습니다. 자세한 내용은 MariaDB와 MySQL 비교를 참조하세요.

MySQL을 설치하려면 출시 패키지를 다운로드하고 dpkg 명령어를 사용하여 수동으로 설치합니다.

  1. wget 종속 항목을 설치합니다.

    sudo apt-get install -y wget
    
  2. MySQL Community Server 출시 패키지를 다운로드합니다.

    export DEB_FILE=mysql-apt-config_0.8.20-1_all.deb
    cd /tmp
    curl -L --output ${DEB_FILE} \
         https://dev.mysql.com/get/${DEB_FILE}
    
  3. 출시 패키지 파일의 무결성을 확인합니다.

    cat > ${DEB_FILE}.md5 << EOL
    799bb0aefb93d30564fa47fc5d089aeb ${DEB_FILE}
    EOL
    md5sum --check ${DEB_FILE}.md5
    

    다음 출력이 표시되면 파일의 신뢰성 및 무결성이 확인된 것입니다.

    mysql-apt-config_0.8.20-1_all.deb: OK
    
  4. 파일을 확인한 후 MySQL 패키지를 로컬 패키지 저장소에 추가합니다.

    sudo dpkg -i ${DEB_FILE}
    

    MySQL 버전을 포함한 설치 옵션을 확인하라는 메시지가 표시됩니다.

  5. 상단의 MySQL 서버 및 클러스터 메뉴 옵션을 선택한 상태에서 Return 키를 누른 후 화살표 키를 사용하여 서버 버전을 선택합니다.

    이 가이드에서는 MySQL 8.0 또는 5.7을 선택해야 합니다. 버전을 선택한 후 키보드의 Return 키를 누릅니다.

  6. 구성 메뉴에서 선택한 옵션에 만족하면 화살표 키를 사용하여 메뉴에서 Ok를 선택하고 키보드의 Return 키를 누릅니다.

  7. 패키지 캐시를 업데이트합니다.

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

    sudo apt-get -y install mysql-community-server
    

    루트 비밀번호와 같은 설치에 대한 세부정보를 제공하라는 메시지가 표시됩니다.

Debian 9

이 안내에서는 MySQL 8 또는 5.7을 설치합니다.

기본적으로 일부 Debian 버전(예: Debian 9)에서는 MariaDB를 기본 MySQL 서버로 설치합니다. MariaDB는 대부분 MySQL과 호환되며 같은 명령어로 호출될 수 있습니다. MariaDB와 표준 MySQL의 차이에 대한 자세한 내용은 MySQL에서 Debian 9의 MariaDB로 이동을 참조하세요.

MySQL을 설치하려면 다음 안내를 수행합니다.

  1. MySQL Community Server 출시 패키지를 다운로드합니다.

    export DEB_FILE=mysql-apt-config_0.8.17-1_all.deb
    cd /tmp
    curl -L --output ${DEB_FILE} \
         https://dev.mysql.com/get/${DEB_FILE}
    
  2. 출시 패키지 파일의 무결성을 확인합니다.

    cat > ${DEB_FILE}.md5 << EOL
    9e393c991311ead61dcc8313aab8e230 ${DEB_FILE}
    EOL
    md5sum --check ${DEB_FILE}.md5
    

    다음 출력이 표시되면 파일의 신뢰성 및 무결성이 확인된 것입니다.

    mysql-apt-config_0.8.17-1_all.deb: OK
    
  3. 파일을 확인한 후 MySQL 패키지를 로컬 패키지 저장소에 추가합니다.

    sudo dpkg -i ${DEB_FILE}
    

    MySQL 버전을 포함한 설치 옵션을 확인하라는 메시지가 표시됩니다.

  4. 상단의 MySQL 서버 및 클러스터 메뉴 옵션을 선택한 상태에서 Return 키를 누른 후 화살표 키를 사용하여 서버 버전을 선택합니다.

    이 가이드에서는 MySQL 8.0 또는 5.7을 선택해야 합니다. 버전을 선택한 후 키보드의 Return 키를 누릅니다.

  5. 구성 메뉴에서 선택한 옵션에 만족하면 화살표 키를 사용하여 메뉴에서 Ok를 선택하고 키보드의 Return 키를 누릅니다.

  6. 패키지 캐시를 업데이트합니다.

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

    sudo apt-get -y install mysql-community-server
    

Ubuntu

Ubuntu 1804 이하의 경우 이 안내에서는 MySQL 5.7을 설치합니다.
Ubuntu 2004 이상의 경우 이 안내에서는 MySQL 8을 설치합니다.

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

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

    sudo apt-get -y install mysql-server
    
  3. 기본적으로 Ubuntu 배포판에서 mysql은 auth_socket 플러그인을 사용하여 root 사용자를 인증합니다. 이 쿼리를 실행하여 이 기본 구성을 확인합니다.

    echo "SELECT user, authentication_string, plugin, host
            FROM mysql.user WHERE user='root' ;" \
         | sudo mysql -t -u root
    

    출력에는 localhost에서 연결하는 root 사용자가 auth_socket 플러그인을 사용하는 것으로 표시됩니다.

    +------+-----------------------+-------------+-----------+
    | user | authentication_string | plugin      | host      |
    +------+-----------------------+-------------+-----------+
    | root |                       | auth_socket | localhost |
    +------+-----------------------+-------------+-----------+
    
  4. 이 설정을 변경하고 루트 비밀번호를 추측하기 어려운 비밀번호로 변경합니다.

    export PASSWORD=`uuidgen`; echo "Root password is : $PASSWORD"
    echo "ALTER USER 'root'@'localhost'
          IDENTIFIED WITH mysql_native_password BY '$PASSWORD'" \
          | sudo mysql -u root
    

    출력에 새 루트 비밀번호가 포함됩니다.

    Root password is : 25fe2177-778a-414f-b80e-5fb8c8671de3
    

CentOS 또는 RHEL 7

이 안내에서는 MySQL 8을 설치합니다.

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

  1. MySQL Community Server 출시 패키지를 다운로드합니다.

    export RPM_FILE=mysql80-community-release-el7-4.noarch.rpm
    cd /tmp
    curl -L --output ${RPM_FILE} \
         https://dev.mysql.com/get/${RPM_FILE}
    
  2. 출시 패키지 파일의 무결성을 확인합니다.

    cat > ${RPM_FILE}.md5 << EOL
    8b55d5fc443660fab90f9dc328a4d9ad ${RPM_FILE}
    EOL
    md5sum --check ${RPM_FILE}.md5
    

    다음 출력이 표시되면 파일의 신뢰성 및 무결성이 확인된 것입니다.

    mysql80-community-release-el7-4.noarch.rpm: OK
    
  3. MySQL을 포함하도록 패키지 관리자를 업데이트합니다.

    sudo rpm -Uvh ${RPM_FILE}
    
  4. MySQL을 설치합니다.

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

    sudo /usr/bin/systemctl start mysqld
    
  6. 서버 로그에서 임시 루트 비밀번호를 가져옵니다.

    sudo cat /var/log/mysqld.log | grep -i 'temporary password'
    

Rocky Linux 또는 RHEL 8

이 안내에서는 MySQL 8을 설치합니다.

Rocky Linux, CentOS Stream, RHEL의 버전 8은 패키지 관리 시스템의 일부로 MySQL 대신 MariaDB를 포함합니다. MySQL을 설치하려면 먼저 패키지 관리자를 업데이트해야 합니다.

  1. MySQL Community Server 출시 패키지를 다운로드합니다.

    export RPM_FILE=mysql80-community-release-el8-2.noarch.rpm
    cd /tmp
    curl -L --output ${RPM_FILE} \
         https://dev.mysql.com/get/${RPM_FILE}
    
  2. 출시 패키지 파일의 무결성을 확인합니다.

    cat > ${RPM_FILE}.md5 << EOL
    0ba3feb1c9ee35d30e5ae683accaf54b ${RPM_FILE}
    EOL
    md5sum --check ${RPM_FILE}.md5
    

    다음 출력이 표시되면 파일의 신뢰성 및 무결성이 확인된 것입니다.

    mysql80-community-release-el8-2.noarch.rpm: OK
    
  3. MySQL을 포함하도록 패키지 관리자를 업데이트합니다.

    sudo rpm -iUvh ${RPM_FILE}
    
  4. MySQL을 설치합니다. 설치에서 커뮤니티 서버를 사용하도록 설치 중에 AppStream 저장소를 중지합니다.

    sudo yum module disable -y mysql
    sudo yum install -y \
        --disablerepo=appstream \
      mysql-community-server
    
  5. MySQL 서버를 시작합니다.

    sudo /usr/bin/systemctl start mysqld
    
  6. 서버 로그에서 임시 루트 비밀번호를 가져옵니다.

    sudo cat /var/log/mysqld.log | grep -i 'temporary password'
    

MySQL 설치 보안 강화

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

sudo mysql_secure_installation

MySQL에 연결

다음 단계에서는 mysql-test 인스턴스에서 MySQL에 연결하는 방법을 설명합니다.

MySQL 8.0

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

    sudo mysql -u root -p
    

    MySQL에 연결하면 mysql>로 변경하라는 메시지가 표시됩니다.

    이제 MySQL 명령어를 실행할 수 있습니다. 예를 들어 다음 명령어는 실행 중인 스레드 및 현재 연결을 보여줍니다.

    mysql> SHOW processlist;
    +----+-----------------+-----------+------+---------+------+------------------------+------------------+
    | Id | User            | Host      | db   | Command | Time | State                  | Info             |
    +----+-----------------+-----------+------+---------+------+------------------------+------------------+
    |  5 | event_scheduler | localhost | NULL | Daemon  | 1889 | Waiting on empty queue | NULL             |
    | 14 | root            | localhost | NULL | Query   |    0 | init                   | show processlist |
    +----+-----------------+-----------+------+---------+------+------------------------+------------------+
    2 rows in set (0.00 sec)

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

    mysql> SELECT User, Host, authentication_string FROM mysql.user;
    +------------------+-----------+------------------------------------------------------------------------+
    | User             | Host      | authentication_string                                                  |
    +------------------+-----------+------------------------------------------------------------------------+
    | mysql.infoschema | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
    | mysql.session    | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
    | mysql.sys        | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
    | root             | localhost | $A$005$,BS{G+*#cVYxb6x40q0aFS5dp2/Kz6u2vennR5qe0eBKVA/6VW5B            |
    +------------------+-----------+------------------------------------------------------------------------+
    4 rows in set (0.00 sec)
  2. 명령어 실행이 완료되었으면 exit 명령어를 사용하여 MySQL 클라이언트를 종료한 후 exit를 다시 사용하여 Compute Engine 인스턴스에서 로그아웃합니다.

    mysql> exit
    Bye

MySQL 5.7

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

    sudo mysql -u root -p
    

    MySQL에 연결하면 mysql>로 변경하라는 메시지가 표시됩니다.

    이제 MySQL 명령어를 실행할 수 있습니다. 예를 들어 다음 명령어는 실행 중인 스레드 및 현재 연결을 보여줍니다.

    mysql> SHOW processlist;
    +----+------+-----------+------+---------+------+-------+------------------+
    | Id | User | Host      | db   | Command | Time | State | Info             |
    +----+------+-----------+------+---------+------+-------+------------------+
    | 51 | root | localhost | NULL | Query   |    0 | NULL  | show processlist |
    +----+------+-----------+------+---------+------+-------+------------------+
    1 row in set (0.00 sec)

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

    mysql> SELECT User, Host, authentication_string FROM mysql.user;
    
    +---------------+-----------+-------------------------------------------+
    | User          | Host      | authentication_string                     |
    +---------------+-----------+-------------------------------------------+
    | root          | localhost | *A047B05AAB007B33F8F2BD1FD404661D167D6348 |
    | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
    | mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
    +---------------+-----------+-------------------------------------------+
    3 rows in set (0.00 sec)
  2. 명령어 실행이 완료되었으면 exit 명령어를 사용하여 MySQL 클라이언트를 종료한 후 exit를 다시 사용하여 Compute Engine 인스턴스에서 로그아웃합니다.

    mysql> exit
    Bye

삭제

튜토리얼을 완료한 후에는 만든 리소스를 삭제하여 할당량 사용을 중지하고 요금이 청구되지 않도록 할 수 있습니다. 다음 섹션은 이러한 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.

프로젝트 삭제

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

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

  1. 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

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

인스턴스 삭제

Compute Engine 인스턴스를 삭제하려면 다음 안내를 따르세요.

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

    VM 인스턴스로 이동

  2. 삭제할 인스턴스.
  3. 인스턴스를 삭제하려면 추가 작업을 클릭하고, 삭제를 클릭한 후 안내를 따르세요.

다음 단계

지금까지 MySQL 서버를 Compute Engine에 설치하는 방법을 확인했습니다. MySQL을 사용하는 더 복잡한 애플리케이션을 살펴보려면 Cloud Marketplace에서 MySQL을 사용하는 다양한 개발 스택을 둘러보세요.

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

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

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

Google Cloud에 대한 참조 아키텍처, 다이어그램, 가이드, 권장사항 살펴보기. Cloud 아키텍처 센터 살펴보기