Introdução
Geralmente, os problemas de conexão se enquadram em uma das três áreas a seguir:
- Conectando - você consegue acessar sua instância pela rede?
- Autorizando - você está autorizado a se conectar à instância?
- Autenticação - o banco de dados aceita suas credenciais de banco de dados?
Cada uma delas pode ser subdividida em diferentes caminhos para investigação. A seção a seguir inclui exemplos de perguntas que você pode se fazer para ajudar a refinar ainda mais o problema:
Lista de verificação de problemas de conexão
- Conectando
- IP privado
- Você habilitou a
Service Networking API
para seu projeto? - Você está usando uma VPC compartilhada ?
- Sua conta de usuário ou serviço tem as permissões de IAM necessárias para gerenciar uma conexão de acesso a serviços privados?
- A conexão de acesso a serviços privados está configurada para seu projeto?
- Você alocou um intervalo de endereços IP para a conexão privada?
- Os intervalos de endereços IP alocados contêm pelo menos um espaço /24 para cada região onde você planeja criar instâncias do MySQL?
- Se você estiver especificando um intervalo de endereços IP alocados para suas instâncias mysql, o intervalo contém pelo menos um espaço /24 para cada região onde você planeja criar instâncias mysql neste intervalo?
- A conexão privada foi criada?
- Se a conexão privada foi alterada, os vpc-peerings foram atualizados?
- Os logs da VPC indicam algum erro?
- O IP da sua máquina de origem é um endereço não RFC 1918 ?
- IP público
- O seu IP de origem está listado como uma rede autorizada ?
- Os certificados SSL/TLS são necessários ?
- Sua conta de usuário ou serviço tem as permissões de IAM necessárias para se conectar a uma instância do Cloud SQL?
- Autorizando
- Proxy de autenticação do Cloud SQL
- O Cloud SQL Auth Proxy está atualizado ?
- O Cloud SQL Auth Proxy está em execução ?
- O nome da conexão da instância está formado corretamente no comando de conexão do Cloud SQL Auth Proxy ?
- Você verificou a saída do Proxy de Autenticação do Cloud SQL? Envie a saída para um arquivo ou observe o terminal do Cloud Shell onde você iniciou o Proxy de Autenticação do Cloud SQL.
- Sua conta de usuário ou serviço tem as permissões de IAM necessárias para se conectar a uma instância do Cloud SQL?
- Você habilitou a
Cloud SQL Admin API
para seu projeto? - Se você tiver uma política de firewall de saída, certifique-se de que ela permita conexões à porta 3307 na instância de destino do Cloud SQL.
- Se você estiver se conectando usando soquetes de domínio UNIX, confirme se os soquetes foram criados listando o diretório especificado com -dir quando você iniciou o Cloud SQL Auth Proxy.
- Conectores Cloud SQL e código específico de linguagem
- A string de conexão está formada corretamente?
- Você comparou seu código com o código de exemplo da sua linguagem de programação?
- Você está usando um tempo de execução ou estrutura para o qual não temos código de exemplo ?
- Se sim, você procurou na comunidade material de referência relevante?
- Certificados SSL/TLS autogerenciados
- O certificado do cliente está instalado na máquina de origem?
- O certificado do cliente está escrito corretamente nos argumentos de conexão ?
- O certificado do cliente ainda é válido ?
- Você está recebendo erros ao conectar usando SSL ?
- O certificado do servidor ainda é válido ?
- Redes autorizadas
- O endereço IP de origem está incluído?
- Você está usando um endereço IP não-RFC 1918 ?
- Você está usando um endereço IP não suportado ?
- Falhas de conexão
- Você está autorizado a conectar ?
- Você está vendo erros de limite de conexão ?
- Seu aplicativo está fechando conexões corretamente?
- Autenticando
- Autenticação de banco de dados nativo (nome de usuário/senha)
- Você está vendo erros
access denied
? - O nome de usuário e a senha estão corretos?
- Autenticação de banco de dados IAM
- Você habilitou o sinalizador
cloudsql.iam_authentication
na sua instância? - Você adicionou uma vinculação de política para a conta?
- Você está usando o Cloud SQL Auth Proxy com
-enable_iam_login
ou um token Oauth 2.0 como senha do banco de dados? - Se estiver usando uma conta de serviço, você está usando o nome de e-mail abreviado ?
- Saiba mais sobre autenticação de banco de dados IAM no PostgreSQL .
Mensagens de erro
Para mensagens de erro específicas da API, consulte a página de referência de mensagens de erro .
Solução de problemas de conectividade adicional
Para outros problemas, consulte a seção Conectividade na página de solução de problemas.
Problemas comuns de conexão
Verifique se seu aplicativo está fechando as conexões corretamente
Se você vir erros contendo " Aborted connection nnnn to db:
", isso geralmente indica que seu aplicativo não está interrompendo as conexões corretamente. Problemas de rede também podem causar esse erro. O erro não significa que haja problemas com sua instância do Cloud SQL. Também recomendamos executar o tcpdump
para inspecionar os pacotes e rastrear a origem do problema.
Para obter exemplos de práticas recomendadas para gerenciamento de conexões, consulte Gerenciando conexões de banco de dados .
Verifique se seus certificados não expiraram
Se sua instância estiver configurada para usar SSL, acesse a página Instâncias do Cloud SQL no Google Cloud console e abra a instância. Abra a página Conexões , selecione a aba Segurança e certifique-se de que o certificado do seu servidor esteja válido. Se ele estiver expirado, você deverá adicionar um novo certificado e alternar para ele.
Verifique se você está autorizado a conectar
Se suas conexões estiverem falhando, verifique se você está autorizado a se conectar:
- Se você estiver tendo problemas para se conectar usando um endereço IP, por exemplo, se estiver se conectando do seu ambiente local com o cliente MySQL, certifique-se de que o endereço IP do qual você está se conectando esteja autorizado a se conectar à instância do Cloud SQL.
Conexões com uma instância do Cloud SQL usando um endereço IP privado são automaticamente autorizadas para intervalos de endereços RFC 1918. Dessa forma, todos os clientes privados podem acessar o banco de dados sem passar pelo Proxy de Autenticação do Cloud SQL. Intervalos de endereços não RFC 1918 devem ser configurados como redes autorizadas .
Por padrão, o Cloud SQL não aprende rotas de sub-rede não RFC 1918 da sua VPC. Você precisa atualizar o peering de rede para o Cloud SQL para exportar quaisquer rotas não RFC 1918. Por exemplo:
gcloud compute networks peerings update cloudsql-mysql-googleapis-com \ --network=NETWORK \ --export-subnet-routes-with-public-ip \ --project=PROJECT_ID
Aqui está seu endereço IP atual .
- Experimente o comando
gcloud sql connect
para se conectar à sua instância. Este comando autoriza seu endereço IP por um curto período. Você pode executar este comando em um ambiente com o gcloud CLI e o cliente MySQL instalados. Você também pode executar este comando no Cloud Shell , que está disponível noGoogle Cloud console e tem o gcloud CLI e o cliente MySQL pré-instalados. O Cloud Shell fornece uma instância do Compute Engine que você pode usar para se conectar ao Cloud SQL. - Permita temporariamente que todos os endereços IP se conectem a uma instância. Para IPv4, autorize
0.0.0.0/0
(para IPv6, autorize::/0
).
Verifique como você se conecta
Se você receber uma mensagem de erro como:ERROR 1045 (28000): Access denied for user 'root'@'1.2.3.4' (using password: NO)
ao conectar, verifique se você está fornecendo uma senha.
Se você receber uma mensagem de erro como:
ERROR 1045 (28000): Access denied for user 'root'@'1.2.3.4' (using password: YES)
ao se conectar, verifique se você está usando a senha correta e se está se conectando via SSL, se a instância exigir.
Determinar como as conexões estão sendo iniciadas
Você pode ver informações sobre suas conexões atuais conectando-se ao seu banco de dados e executando o seguinte comando:
SHOW PROCESSLIST;
Conexões que mostram um endereço IP, como 1.2.3.4
, estão se conectando usando IP. Conexões com cloudsqlproxy~1.2.3.4
estão usando o Proxy de Autenticação do Cloud SQL ou foram originadas do App Engine. Conexões do localhost
podem ser usadas por alguns processos internos do Cloud SQL.
Limites de conexão
Não há limites de QPS para instâncias do Cloud SQL. No entanto, existem limites de conexão, tamanho e específicos do App Engine. Consulte Cotas e Limites .
As conexões de banco de dados consomem recursos no servidor e no aplicativo conectado. Sempre use boas práticas de gerenciamento de conexões para minimizar o impacto do seu aplicativo e reduzir a probabilidade de exceder os limites de conexão do Cloud SQL. Para obter mais informações, consulte Gerenciando conexões de banco de dados .
Mostrar conexões e threads
Se você receber a mensagem de erro "muitas conexões" ou quiser descobrir o que está acontecendo em uma instância, você pode mostrar o número de conexões e threads com SHOW PROCESSLIST
.
Em um cliente MySQL , execute:
mysql> SHOW PROCESSLIST;
Você obtém uma saída semelhante à seguinte:
+----+-----------+--------------+-----------+---------+------+-------+----------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-----------+--------------+-----------+---------+------+-------+----------------------+ | 3 | user-name | client-IP | NULL | Query | 0 | NULL | SHOW processlist | | 5 | user-name | client-IP | guestbook | Sleep | 1 | | SELECT * from titles | | 17 | user-name | client-IP | employees | Query | 0 | NULL | SHOW processlist | +----+-----------+--------------+-----------+---------+------+-------+----------------------+ 3 rows in set (0.09 sec)
Para obter informações sobre como interpretar as colunas retornadas de PROCESSLIST
, consulte a referência do MySQL .
Para obter uma contagem de threads, você pode usar:
mysql> SHOW STATUS WHERE Variable_name = 'Threads_connected';
Você obtém uma saída semelhante à seguinte:
+-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_connected | 7 | +-------------------+-------+ 1 row in set (0.08 sec)
Tempo limite de conexão (do Compute Engine)
Conexões com uma instância do Compute Engine atingem o tempo limite após 10 minutos de inatividade, o que pode afetar conexões não utilizadas de longa duração entre sua instância do Compute Engine e sua instância do Cloud SQL. Para obter mais informações, consulte Redes e Firewalls na documentação do Compute Engine.
Para manter ativas conexões não utilizadas de longa duração, você pode definir o TCP keepalive . Os comandos a seguir definem o valor do TCP keepalive para um minuto e tornam a configuração permanente após reinicializações da instância.
Exibe o valor atual de tcp_keepalive_time.
cat /proc/sys/net/ipv4/tcp_keepalive_time
Defina tcp_keepalive_time como 60 segundos e torne-o permanente após as reinicializações.
echo 'net.ipv4.tcp_keepalive_time = 60' | sudo tee -a /etc/sysctl.conf
Aplique a alteração.
sudo /sbin/sysctl --load=/etc/sysctl.conf
Exiba o valor tcp_keepalive_time para verificar se a alteração foi aplicada.
cat /proc/sys/net/ipv4/tcp_keepalive_time
Conecte-se com IPv6
Se você receber qualquer uma das mensagens de erro
Can't connect to MySQL server on '2001:1234::4321' (10051) Can't connect to MySQL server on '2001:1234::4321' (101)
Ao se conectar, é provável que você esteja tentando se conectar ao endereço IPv6 da sua instância, mas não tenha IPv6 disponível na sua estação de trabalho. Você pode verificar se o IPv6 está funcional na sua estação de trabalho acessando ipv6.google.com . Se não carregar, significa que você não tem IPv6 disponível. Em vez disso, conecte-se ao endereço IPv4 ou à sua instância do Cloud SQL. Pode ser necessário adicionar um endereço IPv4 à sua instância primeiro.
Falhas ocasionais de conexão (HA legado)
Quando o Cloud SQL reinicia uma instância devido a eventos de manutenção, as conexões podem ser roteadas para a réplica de failover. Ao conectar-se à réplica de failover:
- Solicitações de leitura de clientes que usam conexões não criptografadas são bem-sucedidas normalmente. No entanto, solicitações de gravação falham e retornam uma mensagem de erro, como "Erro 1290: O servidor MySQL está sendo executado com a opção --read-only, portanto, não pode executar esta instrução".
- Solicitações de leitura e gravação de clientes usando conexões criptografadas falham e retornam uma mensagem de erro, como 'x509: o certificado é válido para a instância mestre, não para a instância de failover'.
Após o término do evento, o Cloud SQL redefine a conexão. Tente conectar novamente. Recomendamos que você projete seus aplicativos para lidar com falhas de conexão ocasionais, implementando uma estratégia de tratamento de erros, como o backoff exponencial. Consulte Implementação de aplicativos para obter mais informações.
Ferramentas para depuração de conectividade
tcpdump
O tcpdump
é uma ferramenta para capturar pacotes. É altamente recomendável executá tcpdump
para capturar e inspecionar os pacotes entre o seu host e as instâncias do Cloud SQL ao depurar problemas de conectividade.
Localize seu endereço IP local
Se você não souber o endereço local do seu host, execute o comando ip -br address show
. No Linux, isso mostra a interface de rede, o status da interface, o IP local e os endereços MAC. Por exemplo: eth0 UP 10.128.0.7/32 fe80::4001:aff:fe80:7/64
.
Como alternativa, você pode executar ipconfig
ou ifconfig
para ver o status das suas interfaces de rede.
Teste com Teste de Conectividade
O Teste de Conectividade é uma ferramenta de diagnóstico que permite verificar a conectividade entre endpoints na sua rede. Ele analisa sua configuração e, em alguns casos, realiza a verificação em tempo de execução. Agora, ele oferece suporte ao Cloud SQL . Siga estas instruções para executar testes com suas instâncias do Cloud SQL.
Teste sua conexão
Você pode usar o cliente MySQL para testar sua capacidade de conexão a partir do seu ambiente local. Para obter mais informações, consulte Conectando o cliente MySQL usando endereços IP e Conectando o cliente MySQL usando o Proxy de Autenticação do Cloud SQL .
Determine o endereço IP para sua aplicação
Para determinar o endereço IP de um computador que executa seu aplicativo para que você possa autorizar o acesso à sua instância do Cloud SQL a partir desse endereço, use uma das seguintes opções:
- Se o computador não estiver atrás de um proxy ou firewall, faça login no computador e use o site Qual é meu IP? para determinar seu endereço IP.
- Se o computador estiver atrás de um proxy ou firewall, faça login no computador e use uma ferramenta ou serviço como whatismyipaddress.com para determinar seu verdadeiro endereço IP.
Abrir portas locais
Para verificar se o seu host está escutando nas portas que você acredita estar, execute o comando ss -tunlp4
. Isso informa quais portas estão abertas e escutando. Por exemplo, se você tiver um banco de dados MySQL em execução, a porta 3306 deverá estar ativa e escutando. Para SSH, você deverá ver a porta 22.
Toda a atividade portuária local
Use o comando netstat
para ver toda a atividade da porta local. Por exemplo, netstat -lt
mostra todas as portas ativas no momento.
Conecte-se à sua instância do Cloud SQL usando telnet
Para verificar se você consegue se conectar à sua instância do Cloud SQL usando TCP
, execute o comando telnet
. O Telnet tenta se conectar ao endereço IP e à porta que você forneceu.
telnet 35.193.198.159 3306
.Em caso de sucesso, você verá o seguinte: Tentando 35.193.198.159...
Conectado a 35.193.198.159. .
Em caso de falha, telnet
trava até que você force o fechamento da tentativa: Tentando 35.193.198.159...
^C. .
Registro em nuvem
O Cloud SQL e o Cloud SQL usam o Cloud Logging. Consulte a documentação do Cloud Logging para obter informações completas e revise os exemplos de consultas do Cloud SQL .
Ver registros
Você pode visualizar logs de instâncias do Cloud SQL e outros Google CloudProjetos como Cloud VPN ou instâncias do Compute Engine. Para visualizar os logs das entradas de log da sua instância do Cloud SQL:
Console
No Google Cloud console, acesse a página Cloud Logging .
- Selecione um projeto existente do Cloud SQL na parte superior da página.
- No Construtor de Consultas, adicione o seguinte:
- Recurso: Selecione Banco de Dados Cloud SQL . Na caixa de diálogo, selecione uma instância do Cloud SQL.
- Nomes de log: role até a seção Cloud SQL e selecione os arquivos de log apropriados para sua instância. Por exemplo:
- cloudsql.googlapis.com/mysql-general.log
- cloudsql.googleapis.com/mysql.err
- Gravidade: Selecione um nível de log.
- Intervalo de tempo: selecione uma predefinição ou crie um intervalo personalizado.
gcloud
Use o comando gcloud logging
para visualizar entradas de log. No exemplo abaixo, substitua PROJECT_ID
. O sinalizador limit
é um parâmetro opcional que indica o número máximo de entradas a serem retornadas.
gcloud logging read "projects/PROJECT_ID/logs/cloudsql.googleapis.com/mysql-general.log" \ --limit=10
Endereços IP privados
Conexões com uma instância do Cloud SQL usando um endereço IP privado são autorizadas automaticamente para intervalos de endereços RFC 1918. Intervalos de endereços não RFC 1918 devem ser configurados no Cloud SQL como redes autorizadas . Você também precisa atualizar o peering de rede com o Cloud SQL para exportar quaisquer rotas não RFC 1918. Por exemplo:
gcloud compute networks peerings update cloudsql-mysql-googleapis-com
--network=NETWORK
--export-subnet-routes-with-public-ip
--project=PROJECT_ID
Solução de problemas de VPN
Consulte a página de solução de problemas do Cloud VPN .