Introduzione
In genere, i problemi di connessione rientrano in una delle tre seguenti aree:
- Connessione: 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 diversi percorsi di indagine. La sezione seguente include esempi di domande che puoi farti per restringere ulteriormente il problema:
Elenco di controllo per i problemi di connessione
- Connessione in corso…
- IP privato
- Hai abilitato
Service Networking API
per il tuo progetto? - Utilizzi una rete VPC condivisa?
- Il tuo account utente o 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 SQL Server?
- Se specifichi un intervallo di indirizzi IP allocati 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 vpc-peerings sono stati aggiornati?
- I log VPC indicano eventuali errori?
- L'indirizzo IP della tua macchina di origine è un indirizzo non RFC 1918?
- IP pubblico
- Il tuo IP di origine è indicato come rete autorizzata?
- I certificati SSL/TLS sono obbligatori?
- Il tuo account utente o 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 controlla il terminale Cloud Shell in cui hai avviato il proxy di autenticazione Cloud SQL.
- Il tuo account utente o di servizio dispone delle autorizzazioni IAM richieste per connettersi a un'istanza Cloud SQL?
- Hai abilitato
Cloud SQL Admin API
per il tuo progetto? - Se hai un criterio del firewall in uscita, assicurati che consenta le connessioni alla porta 3307 nell'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 di esempio per il tuo linguaggio di programmazione?
- Utilizzi un runtime o un framework per cui non disponiamo di codice di esempio?
- In questo caso, hai consultato la community per trovare materiale di riferimento pertinente?
- Certificati SSL/TLS autogestiti
- Il certificato del server è ancora valido?
- Reti autorizzate
- L'indirizzo IP di origine è incluso?
- Utilizzi un indirizzo IP non RFC 1918?
- Utilizzi un indirizzo IP non supportato?
- Errori di connessione
- Hai l'autorizzazione per collegarti?
- Visualizzi errori relativi al limite di connessione?
- L'applicazione chiude le connessioni correttamente?
- Autenticazione in corso
- Autenticazione del database nativa (nome utente/password)
- Visualizzi errori
access denied
? - Nome utente e password 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
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 indica che esistono problemi con l'istanza Cloud SQL. Ti invitiamo inoltre a eseguire tcpdump
per ispezionare i pacchetti e risalire all'origine del problema.
Per esempi di best practice per la gestione delle connessioni, consulta Gestione delle connessioni ai database.
Verifica che i certificati non siano scaduti
Se l'istanza è configurata per l'utilizzo di 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 e eseguire la rotazione.
Verifica di disporre dell'autorizzazione per la connessione
Se le connessioni non riescono, verifica di disporre dell'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 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 che utilizzano 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 per 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 dalla VPC. Per esportare eventuali route non RFC 1918, devi aggiornare il peering di rete con Cloud SQL. 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.
Determina come vengono avviate le connessioni
Per visualizzare le informazioni sulle connessioni correnti, connettiti al database ed esegui il seguente comando:
sp_who go
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 o provengono da App Engine. Le connessioni da localhost
potrebbero essere
utilizzate da alcuni processi Cloud SQL interni.
Limiti di connessione
Non sono previsti limiti QPS per le istanze Cloud SQL. Tuttavia, sono previsti limiti specifici per connessioni, 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 la probabilità di superare i limiti di connessione di Cloud SQL. Per saperne di più, consulta Gestire le connessioni al database.
Mostra connessioni e thread
Per visualizzare i processi in esecuzione nel database, connettiti al database ed esegui il seguente comando:sp_who go
Per informazioni su come interpretare le colonne restituite da
sp_who
, consulta la documentazione di 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 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 del keepalive TCP su un minuto e rendono permanente la configurazione durante i riavvii dell'istanza.
Mostra 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 tcp_keepalive_time per verificare che la modifica sia stata applicata.
cat /proc/sys/net/ipv4/tcp_keepalive_time
Strumenti per il debug della connettività
tcpdump
tcpdump
è uno strumento per acquisire i pacchetti. Ti consigliamo vivamente di eseguire tcpdump
per acquisire e ispezionare 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 del tuo host, esegui il comandoip -br address show
. Su Linux vengono mostrati 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 test con Connectivity Test
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 di runtime. Ora supporta Cloud SQL. Segui queste istruzioni per eseguire test con le tue istanze Cloud SQL.
Esegui il test della connessione
Puoi utilizzare il client sqlcmd per verificare la tua capacità di connetterti dall'ambiente locale. Per ulteriori informazioni, consulta Connessione del client sqlcmd utilizzando gli indirizzi IP e Connessione del client sqlcmd utilizzando il proxy di autenticazione Cloud SQL.
Determina l'indirizzo IP della tua applicazione
Per determinare l'indirizzo IP di un computer su cui è in esecuzione la tua applicazione in modo da poter autorizzare l'accesso all'istanza Cloud SQL da quell'indirizzo, utilizza una delle seguenti opzioni:
- Se il computer non è protetto da un proxy o un firewall, accedi al computer e utilizza la pagina Qual è il mio indirizzo IP? per determinare il relativo 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 indirizzo IP reale.
Aprire le porte locali
Per verificare che l'host ascolti sulle porte che ritieni, esegui il comando ss -tunlp4
. In questo modo puoi sapere quali porte sono aperte e in ascolto.
Tutta l'attività della porta locale
Usa il comando netstat
per visualizzare tutta l'attività delle porte locali. 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 specifichi.
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
si blocca finché non chiudi forzatamente il 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 consulta le query di esempio di Cloud SQL.
Visualizza i log
Puoi visualizzare i log per le istanze Cloud SQL e per altri progetti Google Cloud, ad esempio le istanze Cloud VPN o Compute Engine. Per visualizzare i log per le voci dei log delle tue istanze 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:
- Gravità: seleziona un livello di log.
- Intervallo di tempo: seleziona un'opzione preimpostata o crea un intervallo personalizzato.
gcloud
Utilizza il comando gcloud logging
per visualizzare le voci di log. Nell'esempio seguente, sostituisci PROJECT_ID
.
Il flag limit
è un parametro facoltativo che indica il numero massimo di voci da restituire.
Indirizzi IP privati
Le connessioni a un'istanza Cloud SQL che utilizzano 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 con Cloud SQL per esportare eventuali 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 Risoluzione dei problemi di Cloud VPN.