Como diagnosticar problemas nas instâncias do Cloud SQL

Nesta página, mostramos uma lista dos problemas mais frequentes que podem ser encontrados ao trabalhar com instâncias do Cloud SQL, bem como os passos a serem seguidos para resolvê-los. Além disso, consulte as páginas Problemas conhecidos, Solução de problemas e Página de suporte.

Como ver registros

Veja informações sobre operações recentes nos registros de operação da instância do Cloud SQL ou nos registros de erro do MySQL.

Instância que não responde

Se a instância parar de responder às conexões ou o desempenho estiver prejudicado, verifique se tudo está em conformidade com as Diretrizes operacionais. Caso contrário, o problema não estará coberto pelo SLA do Cloud SQL.

Problemas comuns de conexão

Verificar se o aplicativo está encerrando as conexões corretamente

Erros contendo "Aborted connection nnnn to db:" costumam indicar que o aplicativo não está interrompendo as conexões corretamente. Problemas de rede também podem causar esse erro. O erro não significa que há problemas com sua instância do Cloud SQL.

Para ver exemplos de práticas recomendadas de gerenciamento de conexões, consulte Como gerenciar conexões.

Verificar se os certificados expiraram

Se a instância estiver configurada para usar SSL, acesse a página "Instâncias" do Cloud SQL no Console do Cloud e abra a instância. Abra a página Conexões correspondente e verifique se o certificado do servidor é válido. Se ele tiver expirado, você precisará adicionar um novo e fazer a rotação dos certificados. Saiba mais.

Verificar se você está autorizado a se conectar

Caso não esteja conseguindo se conectar, verifique se você tem autorização de conexão:

  • Se estiver com dificuldade para se conectar usando um endereço IP, por exemplo, a partir do seu ambiente local com o cliente mysql, confirme se o endereço IP está autorizado a se conectar à instância do Cloud SQL.

    As 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. Dessa forma, todos os clientes particulares podem acessar o banco de dados sem passar pelo proxy. Os intervalos de endereços não RFC 1918 precisam ser configurados como redes autorizadas.

    Por padrão, o Cloud SQL não aprende as rotas de sub-rede não RFC 1918 da sua VPC. É necessário atualizar o peering de rede para o Cloud SQL para exportar rotas que não sejam RFC 1918. Exemplo:

    gcloud compute networks peerings update cloudsql-mysql-googleapis-com --network=NETWORK --export-subnet-routes-with-public-ip --project=PROJECT
    
  • Veja aqui o endereço IP atual.

  • Tente usar o comando gcloud sql connect para se conectar à instância. Esse comando autoriza seu endereço IP por um curto período. É possível executar esse comando em um ambiente com o SDK do Cloud e o cliente mysql instalados. Também é possível executar esse comando no Cloud Shell, que está disponível no Console do Google Cloud e tem o SDK do Cloud e o cliente mysql pré-instalados. É fornecida uma instância do Compute Engine para você 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ê está se conectando

Se você receber uma mensagem de erro como:

ERROR 1045 (28000): Access denied for user 'root'@'1.2.3.4' (using password: NO)

ao se conectar, verifique se você forneceu 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 está fornecendo a senha correta e se está utilizando SSL, se exigido pela instância.

Como entender os limites da conexão

Não há limite de QPS para instâncias do Cloud SQL. No entanto, há limites específicos em relação à conexão, ao tamanho e ao App Engine. Consulte Cotas e limites.

As conexões do banco de dados consomem recursos no servidor e no aplicativo conectado. Sempre use boas práticas de gerenciamento de conexão para minimizar o espaço ocupado pelo seu aplicativo e reduzir a probabilidade de exceder os limites de conexão do Cloud SQL. Para mais informações, consulte Como gerenciar conexões de banco de dados.

Mostrar conexões, processos e threads

Se você receber a mensagem de erro "muitas conexões" ou quiser descobrir o que está acontecendo em uma instância, poderá exibir o número de conexões e linhas de execução com SHOW PROCESSLIST.

Em um cliente MySQL, execute:

mysql> SHOW PROCESSLIST;

Você verá um resultado parecido com este:

+----+-----------+--------------+-----------+---------+------+-------+----------------------+
| 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)

Veja informações sobre como interpretar as colunas retornadas pelo comando PROCESSLIST na referência do MySQL (em inglês).

Para receber uma contagem de linhas de execução, use:

mysql> SHOW STATUS WHERE Variable_name = 'Threads_connected';

Você verá um resultado parecido com este:

+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 7     |
+-------------------+-------+
1 row in set (0.08 sec)

As conexões que mostram um endereço IP, como 1.2.3.4, são feitas usando IP. As conexões com cloudsqlproxy~1.2.3.4 usam o proxy do Cloud SQL Auth. Caso contrário, elas são originadas do App Engine. As conexões de localhost podem ser usadas por alguns processos internos do Cloud SQL.

Tempo limite das conexões (do Compute Engine)

As conexões com uma instância do Compute Engine expiram após dez minutos de inatividade, o que pode afetar conexões de longa duração não usadas entre a instância do Compute Engine e a instância do Cloud SQL. Para mais informações, consulte Rede e firewalls na documentação do Compute Engine.

Para manter ativas as conexões com inatividade de longa duração, configure o TCP keepalive. Os comandos a seguir definem o valor TCP keepalive para um minuto e tornam a configuração permanente em reinicializações de instância.

Exiba o valor tcp_keepalive_time atual.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Defina tcp_keepalive_time como 60 segundos e torne-o permanente durante 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

Conexão com IPv6

Se você receber uma destas 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 esteja tentando conectar-se ao endereço IPv6 da instância, mas a estação de trabalho não tenha IPv6 disponível. Acesse o site ipv6.google.com para verificar se o IPv6 está funcionando na estação de trabalho. Se o site não carregar, isso significa que o IPv6 não está disponível. Como solução, conecte-se ao endereço IPv4 ou à instância do Cloud SQL. Talvez seja necessário adicionar um endereço IPv4 à instância primeiro.

Falhas de conexão ocasionais (HA legada)

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. Quando você se conecta à réplica de failover:

  • As solicitações de leitura de clientes que usam conexões não criptografadas têm êxito normalmente. No entanto, as solicitações de gravação falham e retornam uma mensagem de erro, como "Erro 1290: o servidor MySQL está em execução com a opção --read-only, portanto, não pode executar esta instrução."
  • As solicitações de leitura e gravação de clientes que usam conexões criptografadas falham e retornam uma mensagem de erro, como "x509: o certificado é válido para instância mestre, não para a instância de failover".

Depois que o evento terminar, o Cloud SQL redefinirá a conexão. Tente estabelecer conexão novamente. Recomendamos que os aplicativos sejam desenvolvidos implementando uma estratégia de tratamento de erros, como a espera exponencial, para manipular falhas de conexão de vez em quando. Consulte Implementação do aplicativo para mais informações.

Solução de problemas de conectividade adicional

Para outros problemas de conexão, consulte a seção Conectividade na página de solução de problemas.

Problemas da instância

Backups

Para ter o melhor desempenho com backups, mantenha a quantidade de tabelas em um número razoável.

Para outros problemas de backup, consulte a seção Backups na página de solução de problemas.

Importar e exportar

As importações e exportações no Cloud SQL são as mesmas de quando se usa o utilitário mysqldump. No entanto, com o recurso de importação e exportação do Cloud SQL, você transfere dados usando um bucket do Cloud Storage.

As importações e exportações para o Cloud SQL que usam a função de importação (por meio de um bucket do Cloud Storage) podem demorar muito para serem concluídas, dependendo do tamanho do banco de dados. Esse processo pode ter os seguintes impactos:

  • Não é possível interromper uma operação de instância do Cloud SQL de longa duração.
  • Apenas uma operação de importação ou exportação pode ser executada por vez para cada instância.

É possível diminuir o tempo necessário para concluir cada operação usando a função de importação ou exportação do Cloud SQL com lotes menores de dados.

Para exportações, use a opção sem servidor para minimizar o impacto no desempenho do banco de dados e permitir que outras operações sejam executadas na sua instância enquanto a exportação é feita.

Outros fatores a considerar durante a importação:

  • Se a importação estiver falhando, talvez seja por causa de um erro de falta de memória (OOM, na sigla em inglês). Se esse for o caso, tente usar comandos do MySQL diretamente para adicionar os parâmetros --extended-insert=FALSE --complete-insert. Esses parâmetros reduzem a velocidade da importação, mas também reduzem a quantidade de memória necessária.

Para outros problemas de importação e exportação, consulte a seção Importar e exportar na página de solução de problemas.

Espaço em disco

Se a sua instância atingir o armazenamento máximo permitido, as gravações no banco de dados não serão feitas. Se você excluir dados, por exemplo, eliminando uma tabela, o espaço liberado não será refletido no Armazenamento usado relatado da instância. Veja uma explicação desse comportamento nas "Perguntas frequentes" Como recuperar o espaço de uma tabela eliminada?.

Atingir o limite máximo de armazenamento também pode fazer com que a instância fique travada na reinicialização.

Evitar a corrupção de dados

Evite colunas geradas

Devido a um problema no MySQL, o uso de colunas geradas pode causar corrupção de dados. Para mais informações, consulte o bug nº 82736 do MySQL.

Encerramentos limpos

Quando o Cloud SQL encerra uma instância, por exemplo, para manutenção, novas conexões não são enviadas à instância. Além disso, as conexões existentes são encerradas. O tempo fornecido ao mysqld para o encerramento é limitado a 1 minuto. Se o encerramento não for concluído nesse período, o processo mysqld será interrompido de modo forçado. Isso pode fazer com que gravações de disco sejam abortadas antes da conclusão.

Mecanismos de banco de dados

O InnoDB é o único mecanismo de armazenamento compatível com instâncias do MySQL porque ele é mais resistente ao corrompimento de tabelas do que outros mecanismos de armazenamento MySQL, como o MyISAM.

Por padrão, as tabelas de banco de dados do Cloud SQL são criadas com o mecanismo de armazenamento InnoDB. Se a sintaxe CREATE TABLE incluir uma opção ENGINE especificando um mecanismo de armazenamento que não seja o InnoDB, por exemplo, ENGINE = MyISAM, a tabela não será criada e você verá mensagens de erro como:

ERROR 3161 (HY000): Storage engine MyISAM is disabled (Table creation is disallowed).

Para evitar esse erro, remova a opção ENGINE = MyISAM do comando CREATE TABLE. Assim, a tabela será criada com o mecanismo de armazenamento InnoDB.

Alterações nas tabelas do sistema

As tabelas do sistema do MySQL usam o mecanismo de armazenamento MyISAM, incluindo todas as tabelas do banco de dados mysql, por exemplo, mysql.user e mysql.db. Essas tabelas são vulneráveis a encerramentos com erros. Emita o comando FLUSH CHANGES depois de fazer alterações nessas tabelas. Em caso de corrompimento do MyISAM, CHECK TABLE e REPAIR TABLE podem fazer o retorno para um ponto de bom estado, mas sem salvar dados.

Identificadores de transações globais (GTID, na sigla em inglês)

Todas as instâncias do MySQL têm o GTID ativado automaticamente. O GTID oferece proteção contra perda de dados durante a criação de réplicas e failover e torna a replicação mais robusta. No entanto, ele apresenta algumas limitações impostas pelo MySQL, conforme documentado no manual do MySQL. As operações transacionais não seguras a seguir não podem ser usadas em um servidor MySQL com GTID ativado:

  • Instruções CREATE TABLE ... SELECT
  • Instruções CREATE TEMPORARY TABLE dentro de transações
  • Transações ou instruções que afetam tabelas transacionais e não transacionais

Se usar uma transação não segura, você verá uma mensagem de erro como:

 Exception: SQLSTATE[HY000]: General error: 1786
 CREATE TABLE ... SELECT is forbidden when @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1.

Como trabalhar com gatilhos e funções armazenadas

Se a instância tiver a geração de registros binária ativada e você precisar trabalhar com gatilhos ou funções armazenadas, verifique se a instância tem a sinalização log_bin_trust_function_creators definida como on.

Estado suspenso

Há vários motivos pelos quais o Cloud SQL pode suspender uma instância, entre os quais:

  • Problemas de faturamento

    Por exemplo, se o cartão de crédito da conta de faturamento do projeto tiver expirado, a instância poderá ser suspensa. Verifique as informações de faturamento de um projeto acessando a página de faturamento do Console do Google Cloud, basta selecionar o projeto e visualizar as informações da conta de faturamento usada no projeto. Depois de resolver o problema de faturamento, a instância retorna ao status executável em algumas horas.

  • Problemas de chave do KMS

    Por exemplo, se a versão da chave do KMS usada para criptografar os dados do usuário na instância do Cloud SQL não estiver presente ou se tiver sido desativada ou destruída. Consulte Como usar chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês).

  • problemas legais

    Por exemplo, uma violação da política de uso aceitável do Google Cloud pode causar a suspensão da instância. Para mais informações, consulte "Suspensões e remoções" nos Termos de Serviço do Google Cloud.

  • Problemas operacionais

    Por exemplo, se uma instância estiver presa em um ciclo de falha (ela falha durante ou logo após a inicialização), o Cloud SQL poderá suspendê-la.

Durante a suspensão de uma instância, é possível continuar visualizando informações sobre ela ou excluí-la, caso a suspensão tenha sido acionada por problemas de faturamento.

Os usuários do Cloud SQL com pacotes de suporte Platinum, Gold ou Silver podem contatar a equipe de suporte diretamente sobre instâncias suspensas. Todos os usuários podem usar a orientação anterior com o fórum google-cloud-sql (em inglês).

Desempenho

Ativar registros de consulta

Para ajustar o desempenho das consultas, configure o Cloud SQL para registrar consultas lentas adicionando as sinalizações do banco de dados --log_output='FILE' e --slow_query_log=on à instância. Isso disponibiliza a saída de registro usando o visualizador de registros no Console do Google Cloud. As cobranças de registro do pacote de operações do Google Cloud são aplicáveis.

Não defina log_output como TABLE. Isso pode causar problemas de conexão descritos em Dicas para trabalhar com sinalizações.

Ativar o monitoramento de bloqueio

Os monitores do InnoDB fornecem informações sobre o estado interno do mecanismo de armazenamento InnoDB, que você pode usar no ajuste de desempenho.

Acesse a instância usando o MySQL Client para receber os resultados da monitoração sob demanda:

SHOW ENGINE INNODB STATUS\G

Para ver explicações sobre as seções dos resultados de monitoramento, consulte Saída do monitor padrão e do monitor de bloqueio do InnoDB.

É possível ativar monitores do InnoDB para que a saída seja gerada periodicamente em um arquivo ou tabela, com degradação no desempenho. Para conferir mais informações, veja Ativar monitores do InnoDB.

Usar esquema de desempenho

O MySQL Performance Schema é um recurso para monitorar a execução do MySQL Server em um nível baixo. A maneira mais acessível de consumir as estatísticas geradas em performance_schema é pela funcionalidade Relatórios de desempenho do MySQL Workbench.

Mantenha um número razoável de tabelas de banco de dados

As tabelas de banco de dados consomem recursos do sistema. Um grande número pode afetar o desempenho e a disponibilidade da instância e fazer com que a instância perca a cobertura do SLA. Saiba mais

Dicas de desempenho geral

Para inserções lentas, atualizações ou exclusões no banco de dados, considere as seguintes ações:

  • Verifique as localizações do gravador e do banco de dados. O envio de dados de longa distância introduz latência.

Para seleções lentas do banco de dados, considere o seguinte:

  • O armazenamento em cache é importante para o desempenho de leitura. Compare o tamanho do conjunto de dados com a capacidade de RAM da instância. O ideal é que todo o conjunto de dados se ajuste a 70% da RAM da instância. Nesse caso, as consultas não são limitadas ao desempenho de E/S. Caso contrário, considere aumentar o tamanho da RAM da instância.
  • Se a carga de trabalho consistir em consultas com uso intensivo de CPU (classificação, expressões regulares, outras funções complexas), a instância poderá ser limitada. Aumente o nível.
  • Verifique o local do leitor e do banco de dados. A latência afeta o desempenho de leitura ainda mais do que o desempenho de gravação.
  • Investigue as melhorias de desempenho específicas não relacionadas ao Cloud SQL, como adicionar indexação apropriada, reduzir dados digitalizados e evitar ciclos extras.

Caso você perceba um desempenho ruim na execução de consultas, use EXPLAIN. EXPLAIN é uma instrução adicionada a outras, como SELECT, e retorna informações sobre como o MySQL executa a instrução. Ela funciona com SELECT, DELETE, INSERT, REPLACE e UPDATE. Por exemplo, EXPLAIN SELECT * FROM myTable;.

Use EXPLAIN para identificar onde você pode:

  • adicionar índices a tabelas e melhorar o desempenho da consulta. Por exemplo, garanta que todos os campos usados como chave JOIN tenham um índice nas duas tabelas.

  • melhorar as operações ORDER BY. Se EXPLAIN mostrar "Using temporary; Using filesort" na coluna Extra da saída, os resultados intermediários serão armazenados em um arquivo que será classificado, o que geralmente resulta em baixo desempenho. Nesse caso, execute uma das seguintes etapas:

    • Se possível, use índices em vez de classificar. Veja Otimização do comando ORDER BY para saber mais informações.

    • Aumente o tamanho da variável sort_buffer_size para a sessão de consulta.

    • Use menos memória RAM por linha, declarando colunas somente com o tamanho necessário.

Solução de problemas com instâncias adicionais do Cloud SQL

Para outros problemas de instâncias do Cloud SQL, consulte a seção Como gerenciar instâncias na página de solução de problemas.

Mensagens de erro

Para ver mensagens de erro específicas da API, consulte a página de referência Mensagens de erro.

Solução de problemas de chaves de criptografia gerenciadas pelo cliente (CMEK)

As operações de administrador do Cloud SQL (como criação, clonagem ou atualização) podem falhar devido a erros do Cloud KMS e ausência de papéis ou permissões. Motivos comuns de falha incluem uma versão ausente da chave do Cloud KMS, uma versão da chave do Cloud KMS desativada ou destruída, permissões de IAM insuficientes para acessar a versão da chave do Cloud KMS ou a versão da chave do Cloud KMS está em uma região diferente da instância do Cloud SQL. Use a seguinte tabela de solução de problemas para diagnosticar e resolver problemas comuns.

Tabela de solução de problemas de chaves de criptografia gerenciadas pelo cliente

Para este erro... O problema pode ser... Tente o seguinte...
Conta de serviço por produto, por projeto não encontrada O nome da conta de serviço está incorreto. Certifique-se de ter criado uma conta de serviço para o projeto de usuário correto.

ACESSAR A PÁGINA "CONTAS DE SERVIÇO"

Não é possível conceder acesso à conta de serviço A conta de usuário não tem permissão para conceder acesso a esta versão de chave. Adicione o papel Administrador da organização à sua conta de usuário ou serviço.

ACESSAR A PÁGINA "CONTAS DE IAM"

A versão da chave do Cloud KMS foi destruída A versão da chave foi destruída. Se a versão da chave for destruída, você não poderá usá-la para criptografar ou descriptografar dados.
A versão da chave do Cloud KMS está desativada A versão da chave está desativada. Reative a versão da chave do Cloud KMS.

ACESSAR A PÁGINA "CHAVES DE CRIPTOGRAFIA"

Permissão insuficiente para usar a chave do Cloud KMS O papel cloudkms.cryptoKeyEncrypterDecrypter está ausente na conta de usuário ou serviço que você está usando para executar operações em instâncias do Cloud SQL ou a versão da chave do Cloud KMS não existe. Adicione o papel cloudkms.cryptoKeyEncrypterDecrypter à conta de usuário ou serviço.

ACESSAR A PÁGINA "CONTAS DE IAM"


Se o papel já estiver na sua conta, consulte Como criar uma chave para saber como criar uma nova versão de chave. Consulte a observação.
A chave do Cloud KMS não foi encontrada A versão da chave não existe. Crie uma nova versão de chave. Consulte Como criar uma chave. Consulte a observação.
A instância do Cloud SQL e a versão da chave do Cloud KMS estão em diferentes regiões A versão da chave do Cloud KMS e a instância do Cloud SQL precisam estar na mesma região. Ela não funcionará se a versão da chave do Cloud KMS estiver em uma região global ou em várias regiões. Crie uma versão de chave na mesma região em que você quer criar instâncias. Consulte Como criar uma chave. Consulte a observação.