Condividi tramite


Connettersi a Database di Azure per MySQL con reindirizzamento

SI APPLICA A: Database di Azure per MySQL - Server singolo

Importante

Il server singolo del Database di Azure per MySQL è in fase di ritiro. È consigliabile eseguire l'aggiornamento al server flessibile del Database di Azure per MySQL. Per altre informazioni sulla migrazione a Database di Azure per MySQL - Server flessibile, vedere Cosa succede a Database di Azure per MySQL - Server singolo?

Questo articolo illustra come connettere un'applicazione al server Database di Azure per MySQL con la modalità di reindirizzamento. Il reindirizzamento riduce la latenza di rete tra le applicazioni client e i server MySQL consentendo alle applicazioni di connettersi direttamente ai nodi del server back-end.

Operazioni preliminari

Accedere al portale di Azure. Creare un server Database di Azure per MySQL con motore versione 5.6, 5.7 o 8.0.

Per informazioni dettagliate, vedere come creare un server Database di Azure per MySQL usando il portale di Azure o l'interfaccia della riga di comando di Azure.

Importante

Il reindirizzamento non è attualmente supportato con collegamento privato per Database di Azure per MySQL.

Abilitare il reindirizzamento

Nel server Database di Azure per MySQL configurare il redirect_enabled parametro per ON consentire le connessioni con la modalità di reindirizzamento. Per aggiornare questo parametro del server, usare il portale di Azure o l'interfaccia della riga di comando di Azure.

PHP

Il supporto per il reindirizzamento nelle applicazioni PHP è disponibile tramite l'estensione mysqlnd_azure, sviluppata da Microsoft.

L'estensione mysqlnd_azure è disponibile per l'aggiunta alle applicazioni PHP tramite PECL ed è consigliabile installare e configurare l'estensione tramite il pacchetto PECL pubblicato ufficialmente.

Importante

Il supporto per il reindirizzamento nell'estensione mysqlnd_azure PHP è attualmente in anteprima.

Logica di reindirizzamento

Importante

A partire dalla versione 1.1.0 la logica e il comportamento di reindirizzamento sono stati aggiornati ed è consigliabile usare la versione 1.1.0+.

Il comportamento di reindirizzamento è determinato dal valore di mysqlnd_azure.enableRedirect. La tabella seguente illustra il comportamento del reindirizzamento in base al valore di questo parametro a partire dalla versione 1.1.0 +.

Se si usa una versione precedente dell'estensione mysqlnd_azure (versione 1.0.0-1.0.3), il comportamento di reindirizzamento è determinato dal valore di mysqlnd_azure.enabled. I valori validi sono off (con un comportamento analogo a quello descritto nella tabella riportata di seguito) e on (con un comportamento analogo a quello di preferred nella tabella riportata di seguito).

Valore mysqlnd_azure.enableRedirect Comportamento
off oppure 0 Il reindirizzamento non verrà usato.
on oppure 1 - Se la connessione non usa SSL sul lato driver, non viene stabilita alcuna connessione. Viene restituito l'errore seguente: "mysqlnd_azure.enableRedirect è attivato, ma l'opzione SSL non è impostata nella stringa di connessione. Il reindirizzamento è possibile solo con SSL."
- Se SSL viene usato sul lato driver, ma il reindirizzamento non è supportato nel server, la prima connessione viene interrotta e viene restituito l'errore seguente: "Connessione interrotta perché il reindirizzamento non è abilitato nel server MySQL o il pacchetto di rete non soddisfa il protocollo di reindirizzamento".
- Se il server MySQL supporta il reindirizzamento, ma la connessione reindirizzata non riesce per qualsiasi motivo, viene interrotta anche la prima connessione proxy. Restituisce l'errore della connessione reindirizzata.
preferred oppure 2
(valore predefinito)
- mysqlnd_azure userà il reindirizzamento, se possibile.
- Se la connessione non usa SSL sul lato driver, il server non supporta il reindirizzamento o la connessione reindirizzata non riesce a connettersi per qualsiasi motivo non irreversibile mentre la connessione proxy è ancora valida, viene eseguito il fallback alla prima connessione proxy.

Per una connessione corretta a Database di Azure per MySQL server singolo usando mysqlnd_azure.enableRedirect, è necessario seguire i passaggi obbligatori per combinare il certificato radice in base ai requisiti di conformità. Per altri dettagli, visitare il collegamento.

Le sezioni successive del documento illustrano come installare l'estensione mysqlnd_azure usando PECL e impostare il valore di questo parametro.

Prerequisiti

  • PHP versioni 7.2.15+ e 7.3.2+
  • PHP PEAR
  • php-mysql
  • Server di Database di Azure per MySQL
  1. Installare mysqlnd_azure con PECL. È consigliabile usare la versione 1.1.0+.

    sudo pecl install mysqlnd_azure
    
  2. Individuare la directory dell'estensione (extension_dir) eseguendo il comando seguente:

    php -i | grep "extension_dir"
    
  3. Passare alla cartella restituita e verificare che mysqlnd_azure.so si trovi in questa cartella.

  4. Individuare la cartella dei file con estensione ini eseguendo il comando seguente:

    php -i | grep "dir for additional .ini files"
    
  5. Passare alla cartella restituita.

  6. Creare un nuovo file con estensione ini per mysqlnd_azure. Verificare che il nome sia successivo in ordine alfabetico a quello di mysqnld, perché i moduli vengono caricati in base all'ordine del nome dei file ini. Se ad esempio il nome del file con estensione ini di mysqlnd è 10-mysqlnd.ini, assegnare al file ini di mysqlnd il nome 20-mysqlnd-azure.ini.

  7. All'interno del nuovo file con estensione ini aggiungere le righe seguenti per abilitare il reindirizzamento.

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

Verificare il reindirizzamento

È anche possibile verificare che il reindirizzamento sia configurato con il codice PHP di esempio seguente. Creare un file PHP denominato mysqlConnect.php e incollarvi il codice riportato di seguito. Aggiornare il nome del server, il nome utente e la password con quelli da usare effettivamente.

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

Passaggi successivi