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

重要

Azure Database for MariaDB は、提供終了予定です。 Azure Database for MySQL に移行することを強くお勧めします。 Azure Database for MySQL への移行の詳細については、「Azure Database for MariaDB の動作」を参照してください

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

開始する前に

Azure portal にサインインします。 エンジン バージョン 10.2 または 10.3 を使用する Azure Database for MariaDB サーバーを作成します。

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

重要

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

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

Azure Database for MariaDB サーバーで、リダイレクト モードでの接続を許可するように 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 is on, but SSL option isn't set in connection string.Redirection is only possible with SSL." (mysqlnd_azure.enableRedirect はオンですが、接続文字列に SSL オプションが設定されていません。リダイレクトは SSL でのみ可能です。)
- ドライバー側で SSL が使われているがサーバーでリダイレクトがサポートされていない場合、最初の接続は中止されます。 次のエラーが返されます: "Connection aborted because redirection is not enabled on the MariaDB server or the network package doesn't meet redirection protocol." (リダイレクトが MariaDB サーバーで有効になっていないか、ネットワーク パッケージがリダイレクト プロトコルを満たしていないため、接続が中止されました。)
- MariaDB サーバーでリダイレクトがサポートされているが、リダイレクトされた接続が何らかの理由で失敗した場合は、最初のプロキシ接続も中止されます。 リダイレクトされた接続のエラーを返します。
preferred または 2
(既定値)
- 可能な場合、mysqlnd_azure ではリダイレクトを使います。
- ドライバー側で接続に SSL が使用されていない場合、サーバーがリダイレクトをサポートしていない場合、またはプロキシ接続が有効であるにもかかわらず、リダイレクトされた接続が致命的ではない理由によって接続に失敗した場合は、最初のプロキシ接続にフォールバックします。

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

必須コンポーネント

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

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

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

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

    sudo hp -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>.mariadb.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 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 differs from the hostname you used to connect
    $res = $db->query('SHOW TABLES;'); //test query with the connection
    print_r ($res);
    $db->close();
  }
?>

次のステップ

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