MySQL クライアントの Compute Engine からの接続

このページでは、Compute Engine インスタンスにインストールされた MySQL クライアントを使用して Cloud SQL に接続する方法について説明します。

MySQL インスタンスに接続する場合は、プライベート IP、パブリック IP、Cloud SQL Proxy、またはプロキシ Docker イメージを使用できます。

始める前に

Cloud SQL インスタンスに接続するには、インスタンスにデフォルトのデータベース ユーザー(root)を用意しておく必要があります。

Compute Engine インスタンスを設定するための手順は、このタスクに含まれていません。Compute Engine インスタンスの作成や構成について詳しくは、Compute Engine のドキュメントをご覧ください。

プライベート IP を使用した接続

Compute Engine インスタンスからプライベート IP を使用して Cloud SQL に接続する場合は、環境に応じてプライベート サービス アクセスを設定し、Cloud SQL インスタンスでプライベート IP を使用するように構成する必要があります。Compute Engine インスタンスは、Cloud SQL インスタンスと同じリージョン内の、プライベート接続用に構成されたネットワーク上に存在する必要があります。詳細

  1. プライベート IP 接続を構成するの手順に従い、プライベート IP を使用するようにインスタンスを構成します。
  2. Compute Engine インスタンスに対するターミナル接続を開きます。

    インスタンスのオペレーティング システムに応じて適切な手順に従います。

  3. まだ MySQL クライアントが Compute Engine インスタンスにインストールされていない場合は、インストールします。

    Debian / Ubuntu

    MySQL クライアントをパッケージ マネージャーからインストールします。

    sudo apt-get update
    sudo apt-get install mysql-server
    

    CentOS / RHEL

    MySQL クライアントをパッケージ マネージャーからインストールします。

    sudo yum install mysql
    

    openSUSE

    MySQL クライアントをパッケージ マネージャーからインストールします。

    sudo zypper install mysql-server
    

    他のプラットフォーム

    1. プラットフォーム向けの MySQL Community Server を MySQL Community Server ダウンロード ページからダウンロードします。
      Community Server に MySQL クライアントが含まれています。
    2. ダウンロード ページの指示に沿って、Community Server をインストールします。

    MySQL のインストールの詳細については、MySQL リファレンス マニュアルの MySQL のインストールとアップグレードをご覧ください。

  4. MySQL クライアントと接続します。
    mysql --host=[CLOUD_SQL_PRIVATE_IP_ADDR] --user=root --password
    

パブリック IP アドレスを使用した接続

  1. Compute Engine インスタンスに静的 IPv4 IP アドレスがない場合は、追加します。IPv6 を使用して Compute Engine に接続することはできません。静的 IP アドレスの追加については、Compute Engine ドキュメントの新しい静的外部 IP アドレスの予約をご覧ください。
  2. Compute Engine インスタンスの静的 IP アドレスを、Cloud SQL インスタンスに接続できるネットワークとして承認します。

    詳しくは、IP 接続のアクセスを構成するをご覧ください。

  3. Compute Engine インスタンスに対するターミナル接続を開きます。

    インスタンスのオペレーティング システムに応じて適切な手順に従います。

  4. まだ MySQL クライアントが Compute Engine インスタンスにインストールされていない場合は、インストールします。

    Debian / Ubuntu

    MySQL クライアントをパッケージ マネージャーからインストールします。

    sudo apt-get update
    sudo apt-get install mysql-server
    

    CentOS / RHEL

    MySQL クライアントをパッケージ マネージャーからインストールします。

    sudo yum install mysql
    

    openSUSE

    MySQL クライアントをパッケージ マネージャーからインストールします。

    sudo zypper install mysql-server
    

    他のプラットフォーム

    1. プラットフォーム向けの MySQL Community Server を MySQL Community Server ダウンロード ページからダウンロードします。
      Community Server に MySQL クライアントが含まれています。
    2. ダウンロード ページの指示に沿って、Community Server をインストールします。

    MySQL のインストールの詳細については、MySQL リファレンス マニュアルの MySQL のインストールとアップグレードをご覧ください。

  5. MySQL クライアントと接続します。
    mysql --host=[CLOUD_SQL_PUBLIC_IP_ADDR] --user=root --password
    
    次の gcloud コマンドを実行して、CLOUD_SQL_PUBLIC_IP_ADDR を検索します。
    gcloud sql instances list
    

    SSL を使用した接続方法については、SSL を使用して接続するをご覧ください。

  6. MySQL プロンプトが表示されます。
  7. 使用されていない接続を維持する必要がある場合は、TCP keep-alive を設定します。

    詳しくは、Compute Engine ドキュメントのインスタンスとインターネットの間の通信をご覧ください。

    インスタンスの接続は自動的に維持されます。

お困りの場合、プロキシのトラブルシューティングについては、Cloud SQL Proxy 接続のトラブルシューティングをご覧ください。または、Cloud SQL のサポートページをご覧ください。

Cloud SQL Proxy を使用した接続

  1. Cloud SQL Admin API を有効にします。

    API を有効にする

  2. プロキシ用のサービス アカウントを作成します。
  3. サービス アカウントを使用してプロキシの認証情報を提示する場合は、十分な権限が付与されたサービス アカウントを作成する必要があります。よりきめ細かい Identity Access and Management(IAM)のロールを使用して Cloud SQL 権限を管理する場合は、サービス アカウントに cloudsql.instances.connect 権限を含むロールを付与する必要があります。この権限を含む事前定義された Cloud SQL のロールは次のとおりです。

    • Cloud SQL クライアント
    • Cloud SQL 編集者
    • Cloud SQL 管理者

    以前のプロジェクトのロール(閲覧者、編集者、オーナー)を使用する場合、サービス アカウントには少なくとも編集者のロールが付与されている必要があります。

    1. Google Cloud Console の [サービス アカウント] ページに移動します。

      [サービス アカウント] ページに移動

    2. Cloud SQL インスタンスを含むプロジェクトを選択します。
    3. [サービス アカウントを作成] をクリックします。
    4. [サービス アカウントの作成] ダイアログで、わかりやすいサービス アカウント名を指定します。
    5. [役割] で、次のいずれかの役割を選択します。
      • [Cloud SQL] > [Cloud SQL クライアント]
      • [Cloud SQL] > [Cloud SQL 編集者]
      • [Cloud SQL] > [Cloud SQL 管理者]

      または、[プロジェクト] > [編集者] の順に選択して、ベーシック編集者のロールを使用することもできますが、編集者のロールには Google Cloud 全体に対する権限が含まれています。

      これらの役割が表示されない場合、Google Cloud ユーザーに resourcemanager.projects.setIamPolicy 権限がない可能性があります。権限を確認するには、Google Cloud Console の IAM ページにアクセスし、自分のユーザー ID を検索します。

    6. [サービス アカウント ID] を一意のわかりやすい値に変更します。
    7. [新しい秘密鍵の提供] をクリックし、キーのタイプが JSON であることを確認します。
    8. [作成] をクリックします。

      秘密鍵ファイルがマシンにダウンロードされます。秘密鍵ファイルは、別の場所に移動できます。安全な場所に鍵ファイルを保管してください。

  4. Compute Engine インスタンスが Cloud SQL インスタンスとは異なるプロジェクトにある場合、そのサービス アカウントに Cloud SQL インスタンスを含むプロジェクトに対する適切な権限があることを確認します。
    1. Google Cloud Console の Compute Engine インスタンスの一覧に移動します。

      Compute Engine インスタンスの一覧に移動

    2. 必要に応じて、Compute Engine インスタンスに関連付けられたプロジェクトを選択します。
    3. Compute Engine インスタンスを選択してプロパティを表示します。
    4. Compute Engine インスタンスのプロパティで、サービス アカウントの名前をコピーします。
    5. Google Cloud Console の [IAM と管理] ページに移動します。

      [IAM と管理] ページに移動

    6. Cloud SQL インスタンスを含むプロジェクトを選択します。
    7. サービス アカウント名を検索します。
    8. サービス アカウントがすでに存在し、そのアカウントに cloudsql.instances.connect 権限を含む役割が割り当てられている場合は、ステップ 4 に進みます。

      役割 Cloud SQL ClientCloud SQL EditorCloud SQL Adminは、従来のプロジェクト役割 EditorOwner と同様に、必要な権限を提供します。

    9. それ以外の場合、[追加] をクリックしてサービス アカウントを追加します。
    10. [メンバーの追加] ダイアログで、サービス アカウントの名前を指定し、cloudsql.instances.connect 権限を含む役割を選択します(Cloud SQL の事前定義された役割のうち、閲覧者以外の役割はこの条件に当てはまります)。

      または、[プロジェクト] > [編集者] の順に選択して、ベーシック編集者のロールを使用することもできますが、編集者のロールには Google Cloud 全体に対する権限が含まれています。

      これらの役割が表示されない場合、Google Cloud ユーザーに resourcemanager.projects.setIamPolicy 権限がない可能性があります。権限を確認するには、Google Cloud Console の [IAM] ページにアクセスし、自分のユーザー ID を検索します。

    11. [追加] をクリックします。

      指定したロールを持つサービス アカウントが表示されます。

  5. Compute Engine インスタンスに対するターミナル接続を開きます。

    インスタンスのオペレーティング システムに応じて適切な手順に従います。

  6. Compute Engine インスタンスが RHEL または CentOS 公開イメージを実行する場合、SELinux によりプロキシ接続がブロックされることがあります。これが発生した場合、SELinux 機能を構成して接続が許可されるようにする必要があります。

    RHEL の SELinux に関する詳細については、RHEL ドキュメントをご覧ください。 CentOS の SELinux に関する詳細については、CentOS ドキュメントをご覧ください。

  7. まだ MySQL クライアントが Compute Engine インスタンスにインストールされていない場合は、インストールします。

    Debian / Ubuntu

    MySQL クライアントをパッケージ マネージャーからインストールします。

    sudo apt-get update
    sudo apt-get install mysql-server
    

    CentOS / RHEL

    MySQL クライアントをパッケージ マネージャーからインストールします。

    sudo yum install mysql
    

    openSUSE

    MySQL クライアントをパッケージ マネージャーからインストールします。

    sudo zypper install mysql-server
    

    他のプラットフォーム

    1. プラットフォーム向けの MySQL Community Server を MySQL Community Server ダウンロード ページからダウンロードします。
      Community Server に MySQL クライアントが含まれています。
    2. ダウンロード ページの指示に沿って、Community Server をインストールします。

    MySQL のインストールの詳細については、MySQL リファレンス マニュアルの MySQL のインストールとアップグレードをご覧ください。

  8. Cloud SQL Proxy を Compute Engine インスタンスにインストールします。

    Linux 64 ビット

    1. プロキシをダウンロードします。
      wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
      
    2. プロキシを実行できるようにします。
      chmod +x cloud_sql_proxy
      

    Linux 32 ビット

    1. プロキシをダウンロードします。
      wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
      
    2. プロキシを実行できるようにします。
      chmod +x cloud_sql_proxy
      

    Windows 64 ビット

    https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe を右クリックして [名前を付けてリンク先を保存] を選択し、プロキシをダウンロードします。ファイル名を cloud_sql_proxy.exe に変更します。

    Windows 32 ビット

    https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe を右クリックして [名前を付けてリンク先を保存] を選択し、プロキシをダウンロードします。ファイル名を cloud_sql_proxy.exe に変更します。
    お使いのオペレーティング システムがここに記載されていない場合は、ソースからプロキシをコンパイルすることもできます。

  9. プロキシを開始します。

    言語や環境に応じて、TCP ソケットまたは Unix ソケットのどちらかを使用してプロキシを開始できます。

    TCP ソケット

    1. [インスタンスの詳細] ページからインスタンス接続名をコピーします。

      例: myproject:myregion:myinstance

    2. サービス アカウントを使用してプロキシを認証する場合は、サービス アカウントを作成したときに作成された秘密鍵ファイルのクライアント マシン上での場所を記録しておきます。
    3. プロキシを開始します。

      考えられるプロキシ呼び出し文字列を以下にいくつか示します。

      • Cloud SDK 認証を使用する場合
        ./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:3306
        
        指定されたポートは、ローカル データベース サーバーなどがまだ使用していないものにする必要があります。
      • サービス アカウントを使用して、インスタンス接続の名前を明示的に指定する場合(本番環境用に推奨):
        ./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:3306 \
                          -credential_file=<PATH_TO_KEY_FILE> &
        

      プロキシ オプションの詳細については、プロキシを認証するためのオプションインスタンスを指定するためのオプションをご覧ください。

    Unix ソケット

    1. 明示的なインスタンス指定を使用する場合は、[インスタンスの詳細] ページからインスタンス接続名をコピーします。
    2. プロキシ ソケットを格納するディレクトリを作成します。
      sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
    3. サービス アカウントを使用してプロキシを認証する場合は、サービス アカウントを作成したときに作成された秘密鍵ファイルのクライアント マシン上での場所を記録しておきます。
    4. 新しいターミナル ウィンドウを開き、プロキシを開始します。

      考えられるプロキシ呼び出し文字列を以下にいくつか示します。

      • サービス アカウントを使用して、インスタンス接続の名前を明示的に指定する場合(本番環境用に推奨):
        ./cloud_sql_proxy -dir=/cloudsql -instances=<INSTANCE_CONNECTION_NAME> \
                          -credential_file=<PATH_TO_KEY_FILE> &
      • Cloud SDK 認証と自動インスタンス検出を使用する場合
        ./cloud_sql_proxy -dir=/cloudsql &

      専用のターミナルでプロキシを開始することが最善です。この場合、他のプログラムからの出力と混ざることなく出力をモニタリングできます。

      プロキシ オプションの詳細については、プロキシを認証するためのオプションインスタンスを指定するためのオプションをご覧ください。

    5. Unix ソケットを使用して Cloud SQL Proxy を使用する Cloud SQL に接続する場合、ソケットのファイル名の長さがシステムの上限を超えていないことを確認してください。システムによって異なりますが、通常は 91~108 文字です。Linux では、この長さが通常 108 文字と定義され、次のコマンドで確認できます。
      cat /usr/include/linux/un.h | grep "define UNIX_PATH_MAX"
  10. MySQL セッションを開始します。

    使用する接続文字列は、プロキシの開始時に TCP ソケットを使用したか Unix ソケットを使用したかによって異なります。

    TCP ソケット

    1. MySQL クライアントを起動します。
      mysql -u <USERNAME> -p --host 127.0.0.1
      

      TCP ソケットを使用して接続する場合、プロキシには 127.0.0.1 経由でアクセスします。

    2. プロンプトが表示されたら、パスワードを入力します。
    3. MySQL プロンプトが表示されます。

    Unix ソケット

    1. MySQL クライアントを起動します。
      mysql -u <USERNAME> -p -S /cloudsql/<INSTANCE_CONNECTION_NAME>
      
    2. パスワードを入力します。
    3. MySQL プロンプトが表示されます。

お困りの場合、プロキシのトラブルシューティングについては、Cloud SQL Proxy 接続のトラブルシューティングをご覧ください。または、Cloud SQL のサポートページをご覧ください。

次のステップ