Introduzione
In genere, i problemi di connessione rientrano in una delle seguenti tre aree:
- Connessione in corso. Riesci a raggiungere la tua istanza tramite la rete?
- Autorizzazione: disponi dell'autorizzazione per connetterti all'istanza?
- Autenticazione: il database accetta le tue credenziali?
Ognuno di questi può essere ulteriormente suddiviso in percorsi diversi per l'indagine. La sezione seguente include esempi di domande che puoi porti per restringere ulteriormente il problema:
Elenco di controllo per i problemi di connessione
- Connessione in corso…
- IP privato
- Hai attivato
Service Networking API
per il tuo progetto? - Utilizzi un VPC condiviso?
- Il tuo utente o account di servizio dispone delle autorizzazioni IAM richieste per gestire una connessione di accesso privato ai servizi?
- La connessione di accesso privato ai servizi è configurata per il tuo progetto?
- Hai allocato un intervallo di indirizzi IP per la connessione privata?
- Gli intervalli di indirizzi IP allocati contenevano almeno uno spazio /24 per ogni regione in cui prevedi di creare istanze MySQL?
- Se stai specificando un intervallo di indirizzi IP allocato per le tue istanze MySQL, l'intervallo contiene almeno uno spazio /24 per ogni regione in cui prevedi di creare istanze MySQL in questo intervallo?
- È stata creata la connessione privata?
- Se la connessione privata è stata modificata, i peering VPC sono stati aggiornati?
- I log VPC indicano errori?
- L'IP della macchina di origine è un indirizzo non RFC 1918?
- IP pubblico
- Il tuo IP di origine è elencato come rete autorizzata?
- I certificati SSL/TLS sono obbligatori?
- Il tuo utente o account di servizio dispone delle autorizzazioni IAM richieste per connettersi a un'istanza Cloud SQL?
- Autorizzazione
- Proxy di autenticazione Cloud SQL
- Il proxy di autenticazione Cloud SQL è aggiornato?
- Il proxy di autenticazione Cloud SQL è in esecuzione?
- Il nome della connessione dell'istanza è formato correttamente nel comando di connessione del proxy di autenticazione Cloud SQL?
- Hai controllato l'output del proxy di autenticazione Cloud SQL? Invia l'output a un file o guarda il terminale Cloud Shell in cui hai avviato il proxy di autenticazione Cloud SQL.
- Il tuo utente o account di servizio dispone delle autorizzazioni IAM richieste per connettersi a un'istanza Cloud SQL?
- Hai attivato
Cloud SQL Admin API
per il tuo progetto? - Se hai una policy firewall in uscita, assicurati che consenta le connessioni alla porta 3307 sull'istanza Cloud SQL di destinazione.
- Se ti connetti utilizzando i socket di dominio Unix, verifica che i socket siano stati creati elencando la directory specificata con -dir quando hai avviato il proxy di autenticazione Cloud SQL.
- Connettori Cloud SQL e codice specifico per la lingua
- La stringa di connessione è formata correttamente?
- Hai confrontato il tuo codice con il codice campione per il tuo linguaggio di programmazione?
- Stai utilizzando un runtime o un framework per cui non disponiamo di codice campione?
- In caso affermativo, hai cercato nella community materiale di riferimento pertinente?
- Certificati SSL/TLS autogestiti
- Il certificato client è installato sulla macchina di origine?
- Il certificato client è scritto correttamente negli argomenti di connessione?
- Il certificato client è ancora valido?
- Ricevi errori quando ti connetti tramite SSL?
- Il certificato del server è ancora valido?
- Reti autorizzate
- È incluso l'indirizzo IP di origine?
- Stai utilizzando un indirizzo IP non RFC 1918?
- Stai utilizzando un indirizzo IP non supportato?
- Errori di connessione
- Hai l'autorizzazione per connetterti?
- Visualizzi errori relativi al limite di connessione?
- La tua applicazione chiude correttamente le connessioni?
- Autenticazione in corso
- Autenticazione del database nativa (nome utente/password)
- Visualizzi errori
access denied
? - Il nome utente e la password sono corretti?
- Autenticazione database IAM
- Hai attivato il flag
cloudsql.iam_authentication
sulla tua istanza? - Hai aggiunto un'associazione di criteri per l'account?
- Stai utilizzando il proxy di autenticazione Cloud SQL con
-enable_iam_login
o un token OAuth 2.0 come password del database? - Se utilizzi un account di servizio, stai utilizzando il nome email abbreviato?
- Scopri di più sull'autenticazione dei database IAM in PostgreSQL.
Messaggi di errore
Per messaggi di errore API specifici, consulta la pagina di riferimento Messaggi di errore.
Ulteriori procedure per la risoluzione dei problemi di connettività
Per altri problemi, consulta la sezione Connettività nella pagina di risoluzione dei problemi.
Problemi di connessione comuni
Verifica che l'applicazione chiuda correttamente le connessioni
Se visualizzi errori contenenti "Aborted connection nnnn to db:
", in genere
indica che l'applicazione non interrompe correttamente le connessioni. Anche i problemi di rete possono causare questo errore. L'errore non significa che
ci siano problemi con l'istanza Cloud SQL. Ti consigliamo inoltre di eseguire tcpdump
per esaminare i pacchetti e individuare l'origine del problema.
Per esempi di best practice per la gestione delle connessioni, vedi Gestione delle connessioni ai database.
Verifica che i certificati non siano scaduti
Se la tua istanza è configurata per utilizzare SSL, vai alla pagina Istanze Cloud SQL nella console Google Cloud e apri l'istanza. Apri la pagina Connessioni, seleziona la scheda Sicurezza e assicurati che il certificato del server sia valido. Se è scaduto, devi aggiungere un nuovo certificato ed eseguirne la rotazione.
Verifica di disporre dell'autorizzazione per connetterti
Se le connessioni non riescono, verifica di avere l'autorizzazione per connetterti:
- Se hai difficoltà a connetterti utilizzando un indirizzo IP, ad esempio, se ti connetti dal tuo ambiente on-premise con il client mysql, assicurati che l'indirizzo IP da cui ti connetti sia autorizzato a connettersi all'istanza Cloud SQL.
Le connessioni a un'istanza Cloud SQL che utilizza un indirizzo IP privato sono autorizzate automaticamente per gli intervalli di indirizzi RFC 1918. In questo modo, tutti i client privati possono accedere al database senza passare dal proxy di autenticazione Cloud SQL. Gli intervalli di indirizzi non conformi a RFC 1918 devono essere configurati come reti autorizzate.
Per impostazione predefinita, Cloud SQL non apprende le route di subnet non RFC 1918 dalla tua rete VPC. Devi aggiornare il peering di rete a Cloud SQL per esportare le route non RFC 1918. Ad esempio:
gcloud compute networks peerings update cloudsql-mysql-googleapis-com \ --network=NETWORK \ --export-subnet-routes-with-public-ip \ --project=PROJECT_ID
Ecco il tuo indirizzo IP attuale.
- Prova il comando
gcloud sql connect
per connetterti all'istanza. Questo comando autorizza il tuo indirizzo IP per un breve periodo di tempo. Puoi eseguire questo comando in un ambiente in cui sono installati gcloud CLI e il client MySQL. Puoi eseguire questo comando anche in Cloud Shell, disponibile nella consoleGoogle Cloud e con gcloud CLI e il client mysql preinstallati. Cloud Shell fornisce un'istanza Compute Engine che puoi utilizzare per connetterti a Cloud SQL. - Consenti temporaneamente a tutti gli indirizzi IP di connettersi a un'istanza. Per IPv4
autorizza
0.0.0.0/0
(per IPv6, autorizza::/0
.
Verificare la modalità di connessione
Se ricevi un messaggio di errore simile a:ERROR 1045 (28000): Access denied for user 'root'@'1.2.3.4' (using password: NO)
Quando ti connetti, verifica di fornire una password.
Se ricevi un messaggio di errore simile a:
ERROR 1045 (28000): Access denied for user 'root'@'1.2.3.4' (using password: YES)
Quando ti connetti, verifica di utilizzare la password corretta e di connetterti tramite SSL se l'istanza lo richiede.
Determina come vengono avviate le connessioni
Per visualizzare informazioni sulle connessioni attuali, connettiti al tuo database ed esegui il seguente comando:
SHOW PROCESSLIST;
Le connessioni che mostrano un indirizzo IP, ad esempio 1.2.3.4
, si connettono tramite IP.
Le connessioni con cloudsqlproxy~1.2.3.4
utilizzano il proxy di autenticazione Cloud SQL oppure
hanno avuto origine da App Engine. Le connessioni da localhost
potrebbero essere
utilizzate da alcuni processi Cloud SQL interni.
Limiti di connessione
Non sono previsti limiti di QPS per le istanze Cloud SQL. Tuttavia, sono in vigore limiti specifici per connessione, dimensioni e App Engine. Consulta la sezione Quote e limiti.
Le connessioni al database consumano risorse sul server e sull'applicazione di connessione. Utilizza sempre buone pratiche di gestione delle connessioni per ridurre al minimo l'impronta della tua applicazione e ridurre la probabilità di superare i limiti di connessione di Cloud SQL. Per saperne di più, vedi Gestione delle connessioni ai database.
Mostra connessioni e thread
Se ricevi il messaggio di errore "Troppe connessioni" o vuoi scoprire cosa
sta succedendo in un'istanza, puoi visualizzare il numero di connessioni e thread
con SHOW PROCESSLIST
.
Da un client MySQL, esegui:
mysql> SHOW PROCESSLIST;
Viene visualizzato un output simile al seguente:
+----+-----------+--------------+-----------+---------+------+-------+----------------------+ | 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)
Per informazioni su come interpretare le colonne restituite da
PROCESSLIST
, consulta il riferimento MySQL.
Per ottenere un conteggio dei thread, puoi utilizzare:
mysql> SHOW STATUS WHERE Variable_name = 'Threads_connected';
Viene visualizzato un output simile al seguente:
+-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_connected | 7 | +-------------------+-------+ 1 row in set (0.08 sec)
Timeout delle connessioni (da Compute Engine)
Le connessioni con un'istanza Compute Engine scadono dopo 10 minuti di inattività, il che può influire sulle connessioni inutilizzate di lunga durata tra l'istanza Compute Engine e l'istanza Cloud SQL. Per ulteriori informazioni, consulta Networking e firewall nella documentazione di Compute Engine.
Per mantenere attive le connessioni inutilizzate di lunga durata, puoi impostare il keepalive TCP. I seguenti comandi impostano il valore TCP keepalive su un minuto e rendono permanente la configurazione dopo i riavvii dell'istanza.
Visualizza il valore corrente di tcp_keepalive_time.
cat /proc/sys/net/ipv4/tcp_keepalive_time
Imposta tcp_keepalive_time su 60 secondi e rendilo permanente dopo i riavvii.
echo 'net.ipv4.tcp_keepalive_time = 60' | sudo tee -a /etc/sysctl.conf
Applica la modifica.
sudo /sbin/sysctl --load=/etc/sysctl.conf
Visualizza il valore di tcp_keepalive_time per verificare che la modifica sia stata applicata.
cat /proc/sys/net/ipv4/tcp_keepalive_time
Connessione con IPv6
Se ricevi uno dei due messaggi di errore
Can't connect to MySQL server on '2001:1234::4321' (10051) Can't connect to MySQL server on '2001:1234::4321' (101)
quando ti connetti, è probabile che tu stia tentando di connetterti all'indirizzo IPv6 della tua istanza, ma non hai IPv6 disponibile sulla tua workstation. Puoi verificare se IPv6 funziona sulla tua workstation andando su ipv6.google.com. Se la pagina non viene caricata, significa che IPv6 non è disponibile. Connettiti all'indirizzo IPv4 o alla tua istanza Cloud SQL. Potresti dover prima aggiungere un indirizzo IPv4 all'istanza.
Errori di connessione occasionali (HA legacy)
Quando Cloud SQL riavvia un'istanza a causa di eventi di manutenzione, le connessioni potrebbero essere indirizzate alla replica di failover. Quando ti connetti alla replica di failover:
- Le richieste dei client che utilizzano connessioni non criptate vengono lette normalmente. Tuttavia, le richieste di scrittura non vanno a buon fine e restituiscono un messaggio di errore, ad esempio "Errore 1290: Il server MySQL è in esecuzione con l'opzione --read-only, quindi non può eseguire questa istruzione".
- Le richieste di lettura e scrittura dei client che utilizzano connessioni criptate non vanno a buon fine e restituiscono un messaggio di errore, ad esempio "x509: certificate is valid for master-instance, not failover-instance." (x509: il certificato è valido per master-instance, not failover-instance).
Al termine dell'evento, Cloud SQL reimposta la connessione. Riprova a connetterti. Ti consigliamo di progettare le applicazioni in modo che gestiscano gli errori di connessione occasionali implementando una strategia di gestione degli errori come il backoff esponenziale. Per saperne di più, consulta Implementazione dell'applicazione.
Strumenti per il debug della connettività
tcpdump
tcpdump
è uno strumento per acquisire pacchetti. È consigliabile eseguire tcpdump
per acquisire e ispezionare i pacchetti tra l'host e le istanze Cloud SQL durante il debug dei problemi di connettività.
Trovare il tuo indirizzo IP locale
Se non conosci l'indirizzo locale del tuo host, esegui il comando
ip -br address show
. Su Linux, vengono visualizzati l'interfaccia di rete,
lo stato dell'interfaccia, l'IP locale e gli indirizzi MAC. Ad esempio:
eth0 UP 10.128.0.7/32 fe80::4001:aff:fe80:7/64
.
In alternativa, puoi eseguire ipconfig
o ifconfig
per visualizzare
lo stato delle interfacce di rete.
Test con Connectivity Tests
Test di connettività è uno strumento di diagnostica che consente di verificare la connettività tra gli endpoint della rete. Analizza la tua configurazione e, in alcuni casi, esegue la verifica in fase di runtime. Ora supporta Cloud SQL. Segui queste istruzioni per eseguire i test con le tue istanze Cloud SQL.
Esegui il test della connessione
Puoi utilizzare il client mysql per verificare la tua capacità di connetterti dal tuo ambiente locale. Per ulteriori informazioni, consulta Connessione del client mysql utilizzando gli indirizzi IP e Connessione del client mysql utilizzando il proxy di autenticazione Cloud SQL.
Determinare l'indirizzo IP della tua applicazione
Per determinare l'indirizzo IP di un computer che esegue la tua applicazione in modo da poter autorizzare l'accesso alla tua istanza Cloud SQL da quell'indirizzo, utilizza una delle seguenti opzioni:
- Se il computer non è protetto da un proxy o da un firewall, accedi al computer e utilizza Qual è il mio IP? sito per determinare il suo indirizzo IP.
- Se il computer è protetto da un proxy o un firewall, accedi al computer e utilizza uno strumento o un servizio come whatismyipaddress.com per determinare il suo vero indirizzo IP.
Apri porte locali
Per verificare che l'host sia in ascolto sulle porte che ritieni, esegui il comando
ss -tunlp4
. Indica quali porte sono aperte e
in ascolto.
Ad esempio, se è in esecuzione un database MySQL, la porta 3306 deve essere attiva e
in ascolto. Per SSH, dovresti vedere la porta 22.
Tutta l'attività della porta locale
Utilizza il comando netstat
per visualizzare tutta l'attività della porta locale. Ad esempio, netstat -lt
mostra tutte le porte attualmente attive.
Connettiti all'istanza Cloud SQL utilizzando telnet
Per verificare di poterti connettere all'istanza Cloud SQL utilizzando TCP
, esegui
il comando telnet
. Telnet tenta di connettersi all'indirizzo IP e alla porta che fornisci.
telnet 35.193.198.159 3306
.
In caso di esito positivo, viene visualizzato quanto segue:
Trying 35.193.198.159...
Connected to 35.193.198.159.
.
In caso di errore, telnet
rimane in attesa finché non forzi la chiusura del tentativo:
Trying 35.193.198.159...
^C.
.
Cloud Logging
Cloud SQL e Cloud SQL utilizzano Cloud Logging. Consulta la documentazione di Cloud Logging per informazioni complete e rivedi le query di esempio di Cloud SQL.
Visualizza i log
Puoi visualizzare i log per le istanze Cloud SQL e altri progetti Google Cloud come Cloud VPN o istanze Compute Engine. Per visualizzare i log per le voci di log dell'istanza Cloud SQL:
Console
-
Nella console Google Cloud , vai alla pagina Cloud Logging.
- Seleziona un progetto Cloud SQL esistente nella parte superiore della pagina.
- In Query Builder, aggiungi quanto segue:
- Risorsa: seleziona Database Cloud SQL. Nella finestra di dialogo, seleziona un'istanza Cloud SQL.
- Nomi dei log: scorri fino alla sezione Cloud SQL e seleziona
i file di log appropriati per la tua istanza. Ad esempio:
- cloudsql.googlapis.com/mysql-general.log
- cloudsql.googleapis.com/mysql.err
- Gravità: seleziona un livello di log.
- Intervallo di tempo: seleziona un intervallo preimpostato o creane uno personalizzato.
gcloud
Utilizza il comando gcloud logging
per visualizzare le voci di log. Nell'esempio riportato di seguito, sostituisci PROJECT_ID
.
Il flag limit
è un parametro facoltativo che indica il numero massimo di voci da
restituire.
gcloud logging read "projects/PROJECT_ID/logs/cloudsql.googleapis.com/mysql-general.log" \ --limit=10
Indirizzi IP privati
Le connessioni a un'istanza Cloud SQL che utilizza un indirizzo IP privato sono autorizzate automaticamente per gli intervalli di indirizzi RFC 1918. Gli intervalli di indirizzi non RFC 1918 devono essere configurati in Cloud SQL come reti autorizzate. Devi anche aggiornare il peering di rete a Cloud SQL per esportare le route non RFC 1918. Ad esempio:
gcloud compute networks peerings update cloudsql-mysql-googleapis-com
--network=NETWORK
--export-subnet-routes-with-public-ip
--project=PROJECT_ID
Risoluzione dei problemi relativi alla VPN
Consulta la pagina Risoluzione dei problemi di Cloud VPN.