Google Compute Engine で MySQL をセットアップする方法

Google Cloud プロジェクトの一部として MySQL をデプロイするためのオプションはいくつかあります。Cloud SQL または Google Cloud Marketplace を使用するか、Compute Engine に MySQL を手動でインストールできます。

Cloud SQL は、MySQL をウェブサービスとして提供します。Cloud SQL を使用して Google のクラウドで MySQL データベースをホストし、Google Cloud でレプリケーション、パッチ管理、データベース管理などの管理作業を行うことができます。

Cloud Marketplace では、シンプルなクリック デプロイ インターフェースを利用できます。これにより、Compute Engine インスタンスに MySQL を簡単にインストールできます。Cloud Marketplace には、スタンドアロンの MySQL インストールに加え、MySQL を使用するいくつかのウェブ開発スタック(LAMP スタック、LEMP スタック、Percona MySQL クラスタなど)も含まれています。

MySQL を手動でインストールしてカスタマイズする場合は、Compute Engine を使用して、数分で MySQL データベースを作成できます。このドキュメントでは、選択するオプションに関するガイダンスを示し、Compute Engine での MySQL データベースの手動インストールについて説明します。

適切な MySQL デプロイ オプションの選択方法

Google Cloud でバックエンド データベースとサーバーの管理作業を行って利便性を求める場合、Cloud SQL は優れたオプションとなります。たとえば、Cloud SQL は自動バックアップとポイントインタイム リカバリを備えています。さらに、可用性と復元力が向上するように、データが複数のゾーンに複製されます。

Cloud SQL でサポートされていない MySQL 機能が必要な場合は、Compute Engine に MySQL をインストールすることをおすすめします。たとえば、Cloud SQL はユーザー定義関数や SUPER 権限をサポートしていません。詳細については、Cloud SQL のよくある質問をご覧ください。

Compute Engine に MySQL をインストールする場合は、Cloud Marketplace を使用して MySQL インストールをデプロイするか、Compute Engine インスタンスに MySQL を手動でインストールできます。Cloud Marketplace を使用すると、大規模な開発スタックの一部として MySQL を簡単にデプロイできます。Google Marketplace には、複数の MySQL インストールのオプション(スタンドアロンの MySQL インストール、LAMP スタック、LEMP スタック、Nginx スタック、Percona 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 ツールを使用する場合は、次の手順で Compute Engine API を有効にし、Cloud SDK をインストールします。

  2. Google Cloud Console を使用して Compute Engine API を有効にします

  3. Cloud SDK をインストールします。

  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] をクリックします。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 接続は、Identity-Aware Proxy(IAP)によって処理される TCP 転送によって行われます。

MySQL のインストール

以降の手順では、Compute Engine インスタンス上に MySQL をインストールする方法について説明します。

Debian 10+

この手順では、MySQL 8 または 5.7 をインストールします。

バージョン 10 以降の Debian には、パッケージ管理システムの一部として 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 Server & Cluster] メニュー オプションを選択した状態で、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
    

    インストールに必要な詳細情報(root のパスワードなど)を入力するように求められます。

Debian 9

この手順では、MySQL 8 または 5.7 をインストールします。

デフォルトでは、Debian のいくつかのバージョン(Debian 9 など)では、デフォルトの MySQL サーバーとして MariaDB がインストールされます。MariaDB は MySQL との幅広い互換性を実現するように設計されており、同じコマンドで起動できます。MariaDB と標準 MySQL の違いについては、Debian 9 での MySQL から 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 Server & Cluster] メニュー オプションを選択した状態で、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. この設定を変更し、root パスワードを推測しにくいパスワードに変更します。

    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 パスワードが含まれます。

    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. サーバーログから一時的な root パスワードを取得します。

    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. サーバーログから一時的な root パスワードを取得します。

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

MySQL インストールのセキュリティの強化

MySQL インストールのセキュリティを強化するには、mysql_secure_installation コマンドを実行します。インストール プロセス中にパスワードを設定しなかった場合は、この手順でパスワードを作成します。このコマンドの詳細については、mysql_secure_installation の MySQL ドキュメントをご覧ください。

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. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

インスタンスの削除

Compute Engine インスタンスを削除するには:

  1. Cloud Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. 削除するインスタンスのチェックボックスを選択します。
  3. インスタンスを削除するには、 [その他の操作] をクリックし、[削除] をクリックしてから、指示に沿って操作します。

次のステップ

ここまで、Compute Engine に MySQL サーバーをインストールする方法を学びました。MySQL を使用する複雑なアプリケーションを参照するには、MySQL を使用する Cloud Marketplace でさまざまな開発スタックをご覧ください。

要件に高可用性とスケーラビリティが含まれている場合は、Compute Engine 上での MySQL Cluster のインストールを検討します。MySQL Cluster は、シェアードナッシング クラスタリングとオートシェーディングを通して高可用性とスケーラビリティを提供します。Cloud Marketplace は、MySQL クラスタリング用のオープンソース ソリューションである Percona 用のクリック デプロイ オプションを提供します。

MySQL のスケーラビリティに関するもう 1 つのオープンソース ソリューションは、2011 年からすべての YouTube データベース トラフィックを供給している Vitess です。Vitess は、コンテナ内で動作するアプリケーションに最適です。コンテナ環境での Vitess の使用方法については、Kubernetes 上での Vitess の実行をご覧ください。

MySQL の詳細については、公式の MySQL ドキュメントをご覧ください。

Google Cloud に関するリファレンス アーキテクチャ、図、チュートリアル、ベスト プラクティスを確認します。Cloud Architecture Center を確認します。