リダイレクトを使用して Azure Database for MySQL に接続する

適用対象: Azure Database for MySQL - シングル サーバー

重要

Azure Database for MySQL の単一サーバーは提供終了パスにあります。 Azure Database for MySQL フレキシブル サーバーにアップグレードすることを強くお勧めします。 Azure Database for MySQL フレキシブル サーバーへの移行の詳細については、「Azure Database for MySQL 単一サーバーの動作」を参照してください

この記事では、リダイレクト モードで Azure Database for MySQL サーバーにアプリケーションを接続する方法について説明します。 リダイレクトでは、アプリケーションをバックエンド サーバー ノードに直接接続できるようにすることで、クライアント アプリケーションと MySQL サーバー間のネットワーク待機時間を短縮します。

開始する前に

Azure portal にサインインします。 エンジン バージョン 5.6、5.7、または 8.0 を使用して、Azure Database for MySQL サーバーを作成します。

詳細については、Azure portal または Azure CLI を使用した Azure Database for MySQL サーバーの作成を参照してください。

重要

リダイレクトは、Azure Database for MySQL 用の Private Link では現在サポートされていません。

リダイレクトを有効化する

Azure Database for MySQL サーバーで、リダイレクト モードでの接続を許可するように redirect_enabled パラメーターを ON に構成します。 このサーバー パラメーターを更新するには、Azure portal または Azure CLI を使用します。

PHP

PHP アプリケーションでのリダイレクトのサポートは、Microsoft によって開発された mysqlnd_azure 拡張機能を通じて利用できます。

mysqlnd_azure 拡張機能は、PECL を通じて PHP アプリケーションに追加できます。正式に公開されている PECL パッケージを使用して、この拡張機能をインストールおよび構成することを強くお勧めします。

重要

PHP mysqlnd_azure 拡張機能でのリダイレクトのサポートは、現在プレビュー段階です。

リダイレクト ロジック

重要

バージョン 1.1.0 以降でリダイレクトのロジック/動作が更新されました。そのため、バージョン 1.1.0 以降を使用することをお勧めします

リダイレクトの動作は、mysqlnd_azure.enableRedirect の値によって決まります。 次の表は、バージョン 1.1.0 以降のこのパラメーターの値に基づいたリダイレクトの動作の概要を示しています。

以前のバージョンの mysqlnd_azure 拡張機能 (バージョン 1.0.0 から 1.0.3) を使用している場合、リダイレクトの動作は mysqlnd_azure.enabled の値によって決まります。 有効な値は off (次の表に記載されている動作と同様に機能します) と on (次の表の preferred のように機能します) です。

mysqlnd_azure.enableRedirect の値 動作
off または 0 リダイレクトは使用されません。
on または 1 - ドライバー側で接続に SSL を使用しない場合、接続は行われません。 次のエラーが返されます。"mysqlnd_azure.enableRedirect はオンですが、接続文字列に SSL オプションが設定されていません。リダイレクトは SSL でのみ可能です。"
- ドライバー側で SSL が使用されていても、そのサーバーでリダイレクトがサポートされていない場合、最初の接続は中止され、次のエラーが返されます。"リダイレクトが MySQL サーバーで有効になっていないか、ネットワーク パッケージがリダイレクト プロトコルを満たしていないため、接続が中止されました。"
- MySQL サーバーでリダイレクトがサポートされているが、リダイレクトされた接続が何らかの理由で失敗した場合は、最初のプロキシ接続も中止します。 リダイレクトされた接続のエラーを返します。
preferred または 2
(既定値)
- mysqlnd_azure は、可能な場合にリダイレクトを使用します。
- ドライバー側で接続に SSL が使用されていない場合、サーバーがリダイレクトをサポートしていない場合、またはプロキシ接続が有効であるにもかかわらず、リダイレクトされた接続が致命的ではない理由によって接続に失敗した場合は、最初のプロキシ接続にフォールバックします。

mysqlnd_azure.enableRedirect を使用して Azure Database for MySQL 単一サーバーに正常に接続するには、コンプライアンス要件に従ってルート証明書を組み合わせる必須の手順に従う必要があります。 詳しくは、リンクにアクセスしてください。

このドキュメントの以降のセクションでは、PECL を使用して mysqlnd_azure 拡張機能をインストールし、このパラメーターの値を設定する方法について説明します。

必須コンポーネント

  • PHP バージョン 7.2.15 以降および 7.3.2 以降
  • PHP PEAR
  • php-mysql
  • Azure Database for MySQL サーバー
  1. PECL を使用して、mysqlnd_azure をインストールします。 バージョン 1.1.0 以降を使用することをお勧めします。

    sudo pecl install mysqlnd_azure
    
  2. 以下を実行して、拡張機能のディレクトリ (extension_dir) を見つけます。

    php -i | grep "extension_dir"
    
  3. 返されたフォルダーにディレクトリを変更し、mysqlnd_azure.so が確実にこのフォルダーに配置されているようにします。

  4. 以下を実行して、.ini ファイルのフォルダーを見つけます。

    php -i | grep "dir for additional .ini files"
    
  5. この返されたフォルダーにディレクトリを変更します。

  6. mysqlnd_azure の新しい .ini ファイルを作成します。 モジュールは ini ファイルの名前の順番に従って読み込まれるため、名前のアルファベットの順番が確実に mysqnld の順番の後になるようにしてください。 たとえば、mysqlnd .ini の名前が 10-mysqlnd.ini の場合は、mysqlnd ini に 20-mysqlnd-azure.ini という名前を付けます。

  7. 新しい .ini ファイル内で、リダイレクトを有効にするために次の行を追加します。

    extension=mysqlnd_azure
    mysqlnd_azure.enableRedirect = on/off/preferred
    

リダイレクトを確認する

以下のサンプルの PHP コードを使用して、リダイレクトが構成されていることを確認することもできます。 mysqlConnect.php という PHP ファイルを作成し、以下のコードを貼り付けます。 サーバー名、ユーザー名、およびパスワードは独自のもので更新します。

<?php
$host = '<yourservername>.mysql.database.azure.com';
$username = '<yourusername>@<yourservername>';
$password = '<yourpassword>';
$db_name = 'testdb';
  echo "mysqlnd_azure.enableRedirect: ", ini_get("mysqlnd_azure.enableRedirect"), "\n";
  $db = mysqli_init();
  //The connection must be configured with SSL for the redirection test
  $link = mysqli_real_connect ($db, $host, $username, $password, $db_name, 3306, NULL, MYSQLI_CLIENT_SSL);
  if (!$link) {
     die ('Connect error (' . mysqli_connect_errno() . '): ' . mysqli_connect_error() . "\n");
  }
  else {
    echo $db->host_info, "\n"; //if redirection succeeds, the host_info will differ from the hostname you used used to connect
    $res = $db->query('SHOW TABLES;'); //test query with the connection
    print_r ($res);
    $db->close();
  }
?>

次のステップ

  • 接続文字列の詳細については、接続文字列に関するページをご覧ください。