리디렉션을 사용하여 Azure Database for MySQL에 연결

적용 대상: Azure Database for MySQL - 단일 서버

Important

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 서버를 만드는 방법을 참조하세요.

Important

현재는 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 패키지를 통해 확장을 설치하고 구성하는 것이 좋습니다.

Important

PHP mysqlnd_azure 확장의 리디렉션에 대한 지원은 현재 미리 보기 상태입니다.

리디렉션 논리

Important

버전 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();
  }
?>

다음 단계

  • 연결 문자열에 대한 자세한 내용은 연결 문자열을 참조하세요.