Compute Engine 上で MySQL へのリモート アクセスをセットアップする方法

Compute Engine 上で Cloud SQL の代用として MySQL をインストールするための主なユースケースの 1 つは、プライベート ネットワーク上で MySQL サーバーとクライアント アプリケーションを維持することです。Cloud SQL は、自動的にパブリック IPv6 アドレスをすべての Cloud SQL インスタンスに割り当て、パブリック IPv4 アドレスを追加するオプションを提供します。また、パブリック IPv4 または IPv6 アドレスが割り当てられたクライアントだけが Cloud SQL インスタンスにリモートでアクセスできます。

プライベート ネットワーク上で MySQL サーバーとクライアントを実行するには、サーバーとクライアントの両方に Compute Engine インスタンスを使用します。このドキュメントでは、同じプライベート ネットワーク上の Compute Engine インスタンスにインストールされた MySQL クライアントからのリモート トラフィックを受け入れるように MySQL サーバー アプリケーションを構成する方法について説明します。

適切な MySQL デプロイメントを選択する方法については、Compute Engine に MySQL をインストールする方法をご覧ください。

目標

  • Compute Engine インスタンスを作成して MySQL サーバーをインストールする。
  • Compute Engine インスタンスを作成して MySQL クライアントをインストールする。
  • リモート アクセス用に MySQL サーバーを構成する。
  • MySQL にリモートで接続する。
  • ポート 3306 を開くためのファイアウォール ルールを作成する。

料金

このチュートリアルでは、以下の課金対象の Google Cloud Platform コンポーネントを使用します。

  • Compute Engine

料金計算ツールを使用して、予測される使用量に基づき、費用の見積もりを出すことができます。 GCP を初めてご利用の場合は、無料トライアルをご利用いただけます。

始める前に

  • Google Cloud Platform Console で、新しいプロジェクトを作成します。既存のプロジェクトを使用できますが、新しいプロジェクトを作成することによって、クリーンアップが容易になります。

  • Compute Engine への MySQL のインストールについて理解している必要があります。概要については、Compute Engine に MySQL をインストールする方法をご覧ください。

このドキュメントのすべての手順は、GCP Console を使用して完了できますが、gcloud コマンドライン ツールを使用する場合は、次の手順に従って Compute Engine API を有効にし、Google Cloud SDK をインストールしてください。

  1. GCP Console を使用して Compute Engine API を有効にします

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

  3. コマンドが冗長にならないようにワークスペースを構成します。次のコマンドの project-idmy-zone は、プロジェクトの値で置き換えます。ゾーンの完全なリストについては、利用可能なリージョンとゾーンをご覧ください。

    gcloud config set project project-id
    gcloud config set compute/zone my-zone
    

Compute Engine インスタンスの作成と MySQL サーバーのインストール

MySQL のインスタンスを作成して、新しく作成したインスタンスへの SSH 接続を確立します。デフォルトのオペレーティング システムは Debian 9 です。このチュートリアルで別のオペレーティング システムを使用する場合は、オペレーティング システムのページに記載されているオプションの中から選択できます。

Compute Engine インスタンスの作成

GCP Console で Compute Engine インスタンスを作成するには:

Console


  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_secure_installation の MySQL ドキュメントをご覧ください。

        sudo mysql_secure_installation
    

    Compute Engine インスタンスの作成と MySQL クライアントのインストール

    MySQL クライアントを使用して my-server インスタンス上で MySQL サーバーにリモートでアクセスする Compute Engine インスタンスを作成します。デフォルトのオペレーティング システムは Debian 9 です。このチュートリアルで別のオペレーティング システムを使用する場合は、オペレーティング システムのページに記載されているオプションの中から選択できます。

    Compute Engine インスタンスの作成と MySQL クライアントのインストール

    Console


    1. [新しいインスタンス] をクリックします。インスタンスに my-client という名前を付けます。

    2. デフォルト値以外のオペレーティング システムを指定するには、[ブートディスク] セクションで、[変更] をクリックしてから、オペレーティング システムを選択し、[選択] をクリックします。

    3. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックして、詳細設定を表示します。[ネットワーキング] タブで「mysql-client」という名前のネットワーク タグを追加します。

    4. [作成] をクリックします。

    両方のインスタンスの内部 IP アドレスを取得するには:

    1. GCP Console の [VM インスタンス] ページで、my-client をクリックします。[内部 IP] の下に表示された IP アドレスをメモします。

    2. [VM インスタンス] ページに戻り、my-server をクリックします。[内部 IP] の下に表示された IP アドレスをメモします。

    gcloud


    1. Compute Engine インスタンスを作成するには、gcloud compute instances create コマンドを使用します。別のオペレーティング システムを使用するには、--image-project および --image-family コマンドライン フラグを使用して、関連するオペレーティング システム イメージのプロジェクトとファミリーを指定します。使用可能なイメージ プロジェクトとファミリーのリストを表示するには、gcloud compute images list コマンドを実行します。

      gcloud compute instances create my-client --tags 'mysql-client'
      
    2. 次のコマンドを実行して、INTERNAL_IP 列の下に表示されたインスタンスの内部 IP アドレスをメモします。

      gcloud compute instances list
      

    my-client への SSH 接続の確立

    次の手順に沿って、新しく作成した my-client インスタンスへの SSH 接続を確立します。

    Console


    1. GCP Console の [VM インスタンス] ページで、インスタンスのリストから my-client を見つけます。

    2. [接続] 列で、[SSH] をクリックします。SSH ターミナルがブラウザ ウィンドウに表示されます。

    gcloud


    SSH を使用してインスタンスに接続します。

        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 接続を再確立します。

    Console


    SSH 接続を確立するには:

    1. GCP Console の [VM インスタンス] ページで、リストから my-server インスタンスを見つけます。

    2. [接続] 列で、[SSH] をクリックします。SSH ターミナルがブラウザ ウィンドウに表示されます。

    gcloud


    SSH を使用してインスタンスに接続します。

        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 に設定する行で、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. MySQL コマンドラインで、TESTUSER という名前の新しいユーザーを作成し、ここでも <internal-ip-my-client>my-client インスタンスの内部 IP アドレスに置き換え、<some-password> を任意のパスワードに置き換えます。MySQL サーバーにリモートでアクセスするには、パスワードが必要になります。

      CREATE USER 'TESTUSER'@'<internal-ip-my-client>' IDENTIFIED BY '<some-password>';
      
    7. MySQL コマンドラインで、新しく作成した TESTUSER に必要な権限を付与します。

      GRANT ALL PRIVILEGES ON *.* TO 'TESTUSER'@'<internal-ip-my-client>' IDENTIFIED BY '<some-password>';
      
    8. MySQL コマンドラインを終了して、my-server への SSH 接続を終了します。

      exit
      exit
      

    my-server の外部 IP アドレスの削除

    my-server インスタンスは、外部 IP アドレスを必要としません。これは、クライアントが内部 IP アドレスを介して my-server にアクセスできるためです。my-client インスタンスの外部 IP アドレスを削除することもできますが、外部 IP アドレスがある場合は my-client への SSH 接続を確立する方が簡単なので、そのままにすることができます。

    my-server インスタンスの外部 IP アドレスを削除する場合は次の手順に従います。

    Console


    外部 IP アドレスを削除するには:

    1. GCP Console の [VM インスタンス] ページで、インスタンスのリストから my-server を見つけます。

    2. [名前] 列で、my-server をクリックします。

    3. [外部 IP] を探して、[編集] をクリックします。

    4. プルダウン リストから [なし] を選択して、[保存] をクリックします。

    gcloud


    外部 IP アドレスを削除するには、構成設定を更新します。

        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 コマンドを実行することができるようになります。たとえば、次のコマンドは、現在の接続を含む、実行中のスレッドを表示します。

      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)
      

      次のコマンドを使用して、ユーザーのリストを生成できます。

      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 インスタンスからログアウトします。

      exit
      exit
      

    高度なネットワーキングの留意点

    通常、MySQL サーバーのリモート アクセスをセットアップする場合は、サーバー上のポート 3306 を開く必要があります。このチュートリアルではこのポートを開く必要がありません。これは、デフォルトのネットワーク構成に、ポート 3306 を含む幅広い範囲のポート上で Compute Engine インスタンス間の内部トラフィックを可能にするファイアウォール ルール default-allow-internal が含まれているためです。

    ポート 3306 を含むファイアウォール ルールのない独自のネットワーク構成を構築する場合は、ポート 3306 を開く必要があります。この条件をシミュレートするには、ポート 3306 を除外するように default-allow-internal ルールを変更します。

    ファイアウォール ルールが IP アドレスの範囲またはタグに基づくように設定できます。幅広い範囲の内部 IP アドレスへのアクセス権を付与する場合は、IP アドレスの範囲が便利です。または、ネットワーク上の特定のインスタンスへのアクセス権を付与する場合は、タグによって柔軟なソリューションが提供されます。タグは、幅広い範囲の IP アドレスへのアクセス権を付与せずに、新しいクライアントの追加を容易にします。新しい MySQL クライアント インスタンスに適切なタグを割り当てるだけで済みます。たとえば、mysql-client でタグ付けされたすべてのクライアント インスタンスからのトラフィックを許可する新しいファイアウォール ルールを作成することができます。

    このチュートリアルで作成した両方のインスタンスにタグを割り当てたことを思い出してください。my-server インスタンスに mysql-server が、my-client インスタンスに mysql-client が割り当てられています。

    次のセクションでは、ポート 3306 を除外するようにデフォルトのファイアウォール ルールを変更してから、mysql-server タグでタグ付けされたすべてのインスタンス上でポート 3306 を開く新しいファイアウォール ルールを作成する方法について説明します。

    デフォルトのファイアウォール ルールの変更

    Console


    1. GCP Console で、[ネットワーキング] > [ファイアウォール ルール] に移動します。

      [ファイアウォール ルール] に移動

    2. default-allow-internal のチェックボックスをオンにして、[編集] をクリックします。

    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 に接続しようとすると、最終的に要求がタイムアウトします。

    新しいファイアウォール ルールの追加

    Console


    1. GCP Console で、新しいファイアウォール ルールを追加します。

    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 に接続できるはずです。

    クリーンアップ

    このチュートリアルで使用するリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

    MySQL チュートリアルが終了したら、Google Cloud Platform で作成したリソースについて、今後課金が発生しないようにクリーンアップできます。以下のセクションで、このようなリソースを削除または無効にする方法を説明します。

    プロジェクトの削除

    課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

    プロジェクトを削除するには:

    1. GCP Console で [プロジェクト] ページに移動します。

      プロジェクト ページに移動

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

    インスタンスの削除

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

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

      [VM インスタンス] ページに移動

    2. 次のチェックボックスをオンにします。 my-serverインスタンス。
    3. インスタンスを削除するには、[削除] () をクリックします。

    次のステップ

    • MySQL を使用する複雑なアプリを参照するには、Google Cloud Platform Marketplace で、MySQL を使用するさまざまな開発スタックを参照してください。

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

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

    • MySQL の詳細については、公式の MySQL ドキュメントを参照してください。

    • Google Cloud Platform のその他の機能を試すには、チュートリアルをご覧ください。

    このページは役立ちましたか?評価をお願いいたします。

    フィードバックを送信...