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

Google Compute Engine 上で Google Cloud SQL の代用として MySQL をインストールするための主なユースケースの 1 つは、プライベート ネットワーク上で MySQL サーバーとクライアント アプリケーションを維持することです。Cloud SQL は、自動的にパブリック IPv6 アドレスをすべての Cloud SQL インスタンスに割り当て、パブリック 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 を開くためのファイアウォール ルールを作成する

事前準備

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

  • Google Compute Engine 上の MySQL のインストールに精通している必要があります。Compute Engine 上の MySQL の概要については、Google Compute Engine 上で MySQL をインストールする方法を参照してください。

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

  1. GCP Console を使用して 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 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 ドキュメントのオペレーティング システムのページに記載されているオプションの中から選択できます。

    Console


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

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

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

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

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

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

    1. GCP Console の [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 接続を確立します。

    Console


    SSH 接続を確立するには:

    1. GCP Console の [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 接続を再確立します。

    Console


    SSH 接続を確立するには:

    1. GCP Console の [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 アドレスの削除

    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 アドレスを削除するには、設定を更新します。

        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 を開く必要があります。このチュートリアルではこのポートを開く必要がありません。これは、デフォルトのネットワーク設定に、ポート 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 で [ネットワーキング] > [ファイアウォール ルール] の順に移動し、[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 に接続しようとすると、最終的に要求がタイムアウトします。

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

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

    クリーンアップ

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

    プロジェクトの削除

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

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

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

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

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

    インスタンスの削除

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

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

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

    2. my-serverインスタンスの隣のチェックボックスを選択します。
    3. ページの上部にある、[削除] ボタンをクリックし、インスタンスを削除します。

    次のステップ

    ここでは、MySQL サーバーにリモートでアクセスする方法を見てきました。MySQL を使用するより複雑なアプリケーションを参照するには、MySQL を使用する Google Cloud Platform Marketplace でさまざまな開発スタックをご覧ください。

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

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

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

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

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

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