Udostępnij za pośrednictwem


Nawiązywanie połączenia z usługą Azure Database for MySQL z użyciem przekierowywania

DOTYCZY: Azure Database for MySQL — pojedynczy serwer

Ważne

Pojedynczy serwer usługi Azure Database for MySQL znajduje się na ścieżce wycofania. Zdecydowanie zalecamy uaktualnienie do serwera elastycznego usługi Azure Database for MySQL. Aby uzyskać więcej informacji na temat migracji do serwera elastycznego usługi Azure Database for MySQL, zobacz Co się dzieje z usługą Azure Database for MySQL — pojedynczy serwer?

W tym artykule wyjaśniono, jak połączyć aplikację z serwerem usługi Azure Database for MySQL przy użyciu trybu przekierowania. Przekierowywanie zmniejsza opóźnienie sieci między aplikacjami klienckimi i serwerami MySQL, umożliwiając aplikacjom bezpośrednie łączenie się z węzłami serwera zaplecza.

Zanim rozpoczniesz

Zaloguj się w witrynie Azure Portal. Utwórz serwer usługi Azure Database for MySQL z aparatem w wersji 5.6, 5.7 lub 8.0.

Aby uzyskać szczegółowe informacje, zobacz jak utworzyć serwer usługi Azure Database for MySQL przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.

Ważne

Przekierowywanie nie jest obecnie obsługiwane w usłudze Private Link dla usługi Azure Database for MySQL.

Włączanie przekierowania

Na serwerze usługi Azure Database for MySQL skonfiguruj redirect_enabled parametr tak, aby ON zezwalał na połączenia z trybem przekierowania. Aby zaktualizować ten parametr serwera, użyj witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.

PHP

Obsługa przekierowania w aplikacjach PHP jest dostępna za pośrednictwem rozszerzenia mysqlnd_azure opracowanego przez firmę Microsoft.

Rozszerzenie mysqlnd_azure jest dostępne do dodawania do aplikacji PHP za pomocą listy PECL i zdecydowanie zaleca się zainstalowanie i skonfigurowanie rozszerzenia za pośrednictwem oficjalnie opublikowanego pakietu PECL.

Ważne

Obsługa przekierowania w rozszerzeniu php mysqlnd_azure jest obecnie dostępna w wersji zapoznawczej.

Logika przekierowania

Ważne

Zaktualizowano logikę przekierowania/zachowanie począwszy od wersji 1.1.0 i zaleca się użycie wersji 1.1.0 lub nowszej.

Zachowanie przekierowania jest określane przez wartość mysqlnd_azure.enableRedirect. W poniższej tabeli przedstawiono zachowanie przekierowania na podstawie wartości tego parametru rozpoczynającego się w wersji 1.1.0 lub nowszej.

Jeśli używasz starszej wersji rozszerzenia mysqlnd_azure (wersja 1.0.0-1.0.3), zachowanie przekierowania jest określane przez wartość mysqlnd_azure.enabled. Prawidłowe wartości to off (działa podobnie jak zachowanie opisane w poniższej tabeli) i on (działa jak preferred w poniższej tabeli).

wartość mysqlnd_azure.enableRedirect Zachowanie
off lub 0 Przekierowanie nie będzie używane.
on lub 1 - Jeśli połączenie nie używa protokołu SSL po stronie sterownika, nie zostanie nawiązane żadne połączenie. Zwracany jest następujący błąd: "mysqlnd_azure.enableRedirect jest włączona, ale opcja SSL nie jest ustawiona w parametry połączenia. Przekierowanie jest możliwe tylko w przypadku protokołu SSL".
— Jeśli protokół SSL jest używany po stronie sterownika, ale przekierowanie nie jest obsługiwane na serwerze, pierwsze połączenie zostało przerwane, a zwracany jest następujący błąd: "Przerwano połączenie, ponieważ przekierowanie nie jest włączone na serwerze MySQL lub pakiet sieciowy nie spełnia protokołu przekierowania".
- Jeśli serwer MySQL obsługuje przekierowanie, ale przekierowane połączenie nie powiodło się z jakiegokolwiek powodu, również przerwać pierwsze połączenie serwera proxy. Zwróć błąd przekierowanego połączenia.
preferred lub 2
(wartość domyślna)
- mysqlnd_azure będzie używać przekierowania, jeśli to możliwe.
— Jeśli połączenie nie korzysta z protokołu SSL po stronie sterownika, serwer nie obsługuje przekierowania lub nie można nawiązać połączenia przekierowania z żadnego niekrytycznego powodu, podczas gdy połączenie serwera proxy jest nadal prawidłowe, następuje powrót do pierwszego połączenia serwera proxy.

Aby pomyślnie nawiązać połączenie z pojedynczym serwerem usługi Azure Database for MySQL przy użyciu programu mysqlnd_azure.enableRedirect, należy wykonać obowiązkowe kroki łączenia certyfikatu głównego zgodnie z wymaganiami dotyczącymi zgodności. Aby uzyskać więcej informacji, odwiedź link.

W kolejnych sekcjach dokumentu opisano sposób instalowania mysqlnd_azure rozszerzenia przy użyciu listy PECL i ustawiania wartości tego parametru.

Wymagania wstępne

  • Wersje PHP 7.2.15+ i 7.3.2+
  • PHP PEAR
  • php-mysql
  • Usługa Azure Database dla serwera MySQL
  1. Zainstaluj mysqlnd_azure przy użyciu listy PECL. Zaleca się używanie wersji 1.1.0 lub nowszej.

    sudo pecl install mysqlnd_azure
    
  2. Znajdź katalog rozszerzeń (extension_dir), uruchamiając poniższe polecenie:

    php -i | grep "extension_dir"
    
  3. Zmień katalogi na zwrócony folder i upewnij się, że mysqlnd_azure.so znajduje się w tym folderze.

  4. Znajdź folder dla plików .ini, uruchamiając poniższe polecenie:

    php -i | grep "dir for additional .ini files"
    
  5. Zmień katalogi na ten zwrócony folder.

  6. Utwórz nowy plik .ini dla programu mysqlnd_azure. Upewnij się, że kolejność alfabetu nazwy znajduje się po nazwie mysqnld, ponieważ moduły są ładowane zgodnie z kolejnością nazw plików ini. Jeśli na przykład mysqlnd .ini ma nazwę 10-mysqlnd.ini, nazwij ini mysqlnd jako 20-mysqlnd-azure.ini.

  7. W nowym pliku .ini dodaj następujące wiersze, aby włączyć przekierowywanie.

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

Potwierdzanie przekierowania

Możesz również potwierdzić, że przekierowanie zostało skonfigurowane przy użyciu poniższego przykładowego kodu PHP. Utwórz plik PHP o nazwie mysqlConnect.php i wklej poniższy kod. Zaktualizuj własną nazwę serwera, nazwę użytkownika i hasło.

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

Następne kroki

  • Aby uzyskać więcej informacji na temat parametry połączenia, zobacz Parametry połączenia.