Conectar-se ao Banco de Dados do Azure para MySQL com redirecionamento
APLICA-SE A: Banco de Dados do Azure para MySQL – Servidor Único
Importante
O servidor único do Banco de Dados do Azure para MySQL está no caminho da desativação. É altamente recomendável que você atualize para o servidor flexível do Banco de Dados do Azure para MySQL. Para obter mais informações sobre a migração para o servidor flexível do Banco de Dados do Azure para MySQL, confira O que está acontecendo com o Servidor Único do Banco de Dados do Azure para MySQL?
Este artigo explica como conectar um aplicativo ao servidor do Banco de Dados do Azure para MySQL com o modo de redirecionamento. O redirecionamento reduz a latência de rede entre os aplicativos cliente e os servidores MySQL, permitindo que os aplicativos se conectem diretamente aos nós do servidor back-end.
Antes de começar
Entre no portal do Azure. Crie um servidor do Banco de Dados do Azure para MySQL com a versão do mecanismo 5.6, 5.7 ou 8.0.
Para obter detalhes, consulte como criar um servidor de Banco de Dados do Azure para MySQL usando o portal do Azure ou a CLI do Azure.
Importante
Atualmente, não há suporte para o redirecionamento com o Link privado para Banco de Dados do Azure para MySQL.
Habilitar redirecionamento
No servidor de Banco de Dados do Azure para MySQL, configure o parâmetro redirect_enabled
como ON
para permitir conexões com o modo de redirecionamento. Para atualizar esse parâmetro de servidor, use o portal do Azure ou CLI do Azure.
PHP
O suporte para redirecionamento nos aplicativos PHP está disponível por meio da extensão mysqlnd_azure, desenvolvida pela Microsoft.
A extensão mysqlnd_azure está disponível para ser adicionada aos aplicativos PHP por meio do PECL, e é altamente recomendável instalar e configurar a extensão por meio do pacote de PECL publicado oficialmente.
Importante
No momento, o suporte para redirecionamento na extensão mysqlnd_azure do PHP está na versão prévia.
Lógica de redirecionamento
Importante
A lógica/comportamento de redirecionamento a partir da versão 1.1.0 foi atualizada e é recomendável usar a versão 1.1.0 + .
O comportamento de redirecionamento é determinado pelo valor de mysqlnd_azure.enableRedirect
. A tabela a seguir descreve o comportamento de redirecionamento com base no valor desse parâmetro a partir da versão 1.1.0+ .
Se você estiver usando uma versão mais antiga da extensão mysqlnd_azure (versão 1.0.0-1.0.3), o comportamento de redirecionamento será determinado pelo valor de mysqlnd_azure.enabled
. Os valores válidos são off
(atua da mesma forma que o comportamento descrito na tabela abaixo) e on
(atua como preferred
na tabela abaixo).
mysqlnd_azure.enableRedirect value | Comportamento |
---|---|
off ou 0 |
O redirecionamento não será usado. |
on ou 1 |
- Se a conexão não usar SSL no lado do driver, nenhuma conexão será feita. O seguinte erro é retornado: "mysqlnd_azure.enableRedirect está ativado, mas a opção SSL não está definida na cadeia de conexão. O redirecionamento só é possível com o SSL." - Se o SSL for usado no lado do driver, mas não houver suporte para o redirecionamento no servidor, a primeira conexão será anulada e o erro a seguir será retornado: "A conexão foi anulada porque o redirecionamento não está habilitado no servidor MySQL ou o pacote de rede não atende ao protocolo de redirecionamento." - Se o servidor MySQL oferecer suporte ao redirecionamento, mas a conexão redirecionada falhar por algum motivo, a primeira conexão de proxy também será anulada. Retorne o erro da conexão redirecionada. |
preferred ou 2 (valor padrão) |
- mysqlnd_azure usará o redirecionamento, se possível. - Se a conexão não usar o SSL no lado do driver, o servidor não oferecer suporte ao redirecionamento ou a conexão redirecionada falhar ao se conectar por qualquer motivo não fatal, enquanto a conexão proxy ainda for válida, ela retornará à primeira conexão de proxy. |
Para uma conexão bem-sucedida com o servidor único do Banco de Dados do Azure para MySQL usando mysqlnd_azure.enableRedirect
, você precisará seguir as etapas obrigatórias de combinação do certificado raiz de acordo com os requisitos de conformidade. Para mais detalhes, acesse o link.
As seções subsequentes do documento descrevem como instalar a extensão mysqlnd_azure
usando o PECL e definir o valor desse parâmetro.
Pré-requisitos
- PHP versões 7.2.15+ e 7.3.2+
- PHP PEAR
- php-mysql
- Servidor do Banco de Dados do Azure para MySQL
Instale mysqlnd_azure com PECL. É recomendável usar a versão 1.1.0+.
sudo pecl install mysqlnd_azure
Localize o diretório da extensão (
extension_dir
), fazendo o seguinte:php -i | grep "extension_dir"
Altere os diretórios para a pasta retornada e verifique se
mysqlnd_azure.so
está localizado nessa pasta.Localize a pasta de arquivos .ini, fazendo o seguinte:
php -i | grep "dir for additional .ini files"
Altere os diretórios para essa pasta retornada.
Crie um novo arquivo .ini para
mysqlnd_azure
. Verifique se a ordem alfabética do nome é posterior à do mysqnld, pois os módulos são carregados de acordo com a ordem dos nomes dos arquivos ini. Por exemplo, se o .inimysqlnd
for nomeado como10-mysqlnd.ini
, nomeie o mysqlnd ini como20-mysqlnd-azure.ini
.No novo arquivo .ini, adicione as linhas a seguir para habilitar o redirecionamento.
extension=mysqlnd_azure mysqlnd_azure.enableRedirect = on/off/preferred
Confirme o redirecionamento
Você também pode confirmar se o redirecionamento está configurado com o exemplo de código PHP abaixo. Crie um arquivo PHP chamado mysqlConnect.php
e cole o código abaixo. Atualize o nome do servidor, o nome de usuário e a senha com seus próprios dados.
<?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();
}
?>
Próximas etapas
- Para saber mais sobre cadeias de conexão, confira Cadeias de Conexão.