Introduzione
In genere, i problemi di connessione rientrano in una delle seguenti tre aree:
- Connessione: riesci a raggiungere l'istanza tramite la rete?
- Autorizzazione: hai l'autorizzazione per connetterti all'istanza?
- Autenticazione: il database accetta le tue credenziali del database?
Ognuna di queste aree può essere ulteriormente suddivisa in diversi percorsi di indagine. La sezione seguente include esempi di domande che puoi porti per restringere ulteriormente il problema:
Elenco di controllo dei problemi di connessione
- Connessione
- IP privato
- Hai abilitato l'
Service Networking APIper il tuo progetto? - Stai utilizzando 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 contengono almeno uno spazio /24 per ogni regione in cui prevedi di creare istanze SQL Server?
- Se stai specificando un intervallo di indirizzi IP allocato per le istanze SQL Server, l'intervallo contiene almeno uno spazio /24 per ogni regione in cui prevedi di creare istanze SQL Server in questo intervallo?
- La connessione privata è stata creata?
- 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
- L'IP di origine è elencato come una rete autorizzata?
- Sono necessari certificati SSL/TLS richiesti?
- 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 di 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 abilitato l'
Cloud SQL Admin APIper il tuo progetto? - Se hai una policy del 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 il quale non abbiamo codice campione?
- In questo caso, hai cercato materiale di riferimento pertinente nella community?
- Certificati SSL/TLS con gestione indipendente
- Il certificato del server è ancora valido?
- Reti autorizzate
- L'indirizzo IP di origine è incluso?
- 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 ai limiti di connessione?
- La tua applicazione chiude correttamente le connessioni?
- Autenticazione
- Autenticazione del database nativa (nome utente/password)
- Visualizzi errori
access denied? - Il nome utente e la password sono corretti?
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
Verificare che l'applicazione chiuda correttamente le connessioni
Se visualizzi errori contenenti "Aborted connection nnnn to db:", in genere significa che l'applicazione non interrompe correttamente le connessioni. Anche i problemi di rete possono causare questo errore. L'errore non indica che ci sono 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 Gestire le connessioni ai database.
Verificare che i certificati non siano scaduti
Se l'istanza è configurata per utilizzare SSL, vai alla pagina Istanze Cloud SQL nella Google Cloud console 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 e ruotarlo.
Verificare di avere l'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,
ti connetti dal tuo ambiente on-premise con il client sqlcmd, assicurati che l'indirizzo IP da cui ti connetti
sia autorizzato a connettersi
all'istanza Cloud SQL.
Le connessioni a un'istanza Cloud SQL utilizzando un indirizzo IP privato vengono autorizzate automaticamente per gli intervalli di indirizzi RFC 1918 . In questo modo, tutti i client privati possono accedere al database senza passare attraverso il proxy di autenticazione Cloud SQL. Gli intervalli di indirizzi non RFC 1918 devono essere configurati come reti autorizzate.
Per impostazione predefinita, Cloud SQL non apprende le route delle subnet non RFC 1918 dal tuo 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.
Determinare come vengono avviate le connessioni
Puoi visualizzare informazioni sulle connessioni attuali connettendoti al database ed eseguendo il seguente comando:
sp_who go
Le connessioni che mostrano un indirizzo IP, ad esempio 1.2.3.4, si connettono utilizzando l'IP.
Le connessioni con cloudsqlproxy~1.2.3.4 utilizzano il proxy di autenticazione Cloud SQL oppure provengono da App Engine. Le connessioni da localhost possono essere utilizzate da alcuni processi Cloud SQL interni.
Limiti di connessione
Non esistono limiti di QPS per le istanze Cloud SQL. Tuttavia, sono in vigore limiti specifici per connessione, dimensioni e App Engine. Consulta Quote e limiti.
Le connessioni ai database consumano risorse sul server e sull'applicazione di connessione. Utilizza sempre buone pratiche di gestione delle connessioni per ridurre al minimo l'impronta dell'applicazione e ridurre la probabilità di superare i limiti di connessione di Cloud SQL. Per saperne di più, consulta Gestire le connessioni ai database.
Mostrare connessioni e thread
Per visualizzare i processi in esecuzione sul database, connettiti al database ed esegui il seguente comando:sp_who go
Per informazioni su come interpretare le colonne restituite da
sp_who, consulta il riferimento di SQL Server.
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 a lunga durata tra l'istanza Compute Engine e l'istanza Cloud SQL. Per saperne di più, consulta Networking e firewall nella documentazione di Compute Engine.
Per mantenere attive le connessioni inutilizzate a lunga durata, puoi impostare il keepalive TCP. I seguenti comandi impostano il valore keepalive TCP su un minuto e rendono la configurazione permanente tra i riavvii dell'istanza.
Visualizza il valore tcp_keepalive_time corrente.
cat /proc/sys/net/ipv4/tcp_keepalive_timeImposta tcp_keepalive_time su 60 secondi e rendilo permanente tra 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 tcp_keepalive_time per verificare che la modifica sia stata applicata.
cat /proc/sys/net/ipv4/tcp_keepalive_timeStrumenti per il debug della connettività
tcpdump
tcpdump è uno strumento per acquisire i pacchetti. Ti consigliamo vivamente di eseguire tcpdump per acquisire ed esaminare i pacchetti tra l'host e le istanze Cloud SQL durante il debug dei problemi di connettività.
Individuare l'indirizzo IP locale
Se non conosci l'indirizzo locale dell'host, esegui il comando ip -br address show. Su Linux, questo comando mostra 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.
Eseguire il test con Connectivity Test
Connectivity Test è uno strumento di diagnostica che ti consente di verificare la connettività tra gli endpoint della rete. Analizza la 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 istanze Cloud SQL.
Eseguire il test della connessione
Puoi utilizzare il client sqlcmd per verificare la tua capacità di connetterti dal tuo ambiente locale. Per saperne di più, consulta Connettere il client sqlcmd utilizzando gli indirizzi IP e Connettere il client sqlcmd utilizzando il proxy di autenticazione Cloud SQL.
Determinare l'indirizzo IP dell'applicazione
Per determinare l'indirizzo IP di un computer che esegue l'applicazione in modo da poter autorizzare l'accesso all'istanza Cloud SQL da quell'indirizzo, utilizza una delle seguenti opzioni:
- Se il computer non si trova dietro un proxy o un firewall, accedi al computer e utilizza il sito Qual è il mio IP? per determinarne l'indirizzo IP.
- Se il computer si trova dietro un proxy o un firewall, accedi al computer e utilizza uno strumento o un servizio come whatismyipaddress.com per determinarne l'indirizzo IP effettivo.
Aprire le porte locali
Per verificare che l'host sia in ascolto sulle porte che ritieni, esegui il comando ss -tunlp4. Questo comando indica quali porte sono aperte e in ascolto.
Tutte le attività delle porte locali
Utilizza il comando netstat per visualizzare tutte le attività delle porte locali. Ad esempio, netstat -lt mostra tutte le porte attualmente attive.
Connettersi 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 gli fornisci.
Se l'operazione va a buon fine, viene visualizzato il seguente messaggio:
Trying 35.193.198.159...
Connected to 35.193.198.159.
.
In caso di errore, telnet si blocca 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 ed esamina le query di esempio di Cloud SQL.
Visualizzare i log
Puoi visualizzare i log per le istanze Cloud SQL e altri Google Cloud progetti come le istanze Cloud VPN o Compute Engine. Per visualizzare le voci di log dell'istanza Cloud SQL:
Console
-
Nella Google Cloud console, 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
file di log appropriati per l'istanza. Ad esempio:
- Gravità: seleziona un livello di log.
- Intervallo di tempo: seleziona un intervallo preimpostato o creane uno personalizzato.
gcloud
Utilizza il gcloud logging
comando per visualizzare le voci di log. Nell'esempio seguente, sostituisci PROJECT_ID.
Il limit
flag è un parametro facoltativo che indica il numero massimo di voci da
restituire.
Indirizzi IP privati
Le connessioni a un'istanza Cloud SQL utilizzando un indirizzo IP privato vengono 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-sqlserver-googleapis-com
--network=NETWORK
--export-subnet-routes-with-public-ip
--project=PROJECT_ID
Risoluzione dei problemi relativi alla VPN
Consulta la pagina di risoluzione dei problemi di Cloud VPN.