Introduzione
In genere, i problemi di connessione rientrano in una delle seguenti aree:
- Connessione: riesci a raggiungere l'istanza sulla rete?
- Autorizzazione - Hai l'autorizzazione per connetterti all'istanza?
- Autenticazione in corso: il database accetta le credenziali del database?
Ognuna di queste opzioni può essere ulteriormente suddivisa in diversi percorsi per le indagini. La seguente sezione contiene alcuni esempi di domande che puoi porti per contribuire a circoscrivere 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? - Stai utilizzando un VPC condiviso?
- Il tuo account utente o di servizio ha le autorizzazioni IAM necessarie 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 sqlserver?
- Se specifichi un intervallo di indirizzi IP allocato per le tue istanze sqlserver, l'intervallo contiene almeno uno spazio /24 per ogni regione in cui prevedi di creare istanze sqlserver in questo intervallo?
- La connessione privata è stata creata?
- Se la connessione privata è stata modificata, è stato aggiornato il vpc-peering?
- I log VPC indicano errori?
- L'IP del tuo computer 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 account utente o di servizio ha le autorizzazioni IAM necessarie 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?
- L'istanza nome connessione è formattata correttamente nel comando di connessione proxy Cloud SQL Auth?
- Hai verificato l'output del proxy di autenticazione Cloud SQL? Indirizza l'output a un file oppure osserva il terminale Cloud Shell da cui hai avviato il proxy di autenticazione Cloud SQL.
- Il tuo account utente o di servizio ha le autorizzazioni IAM necessarie per connettersi a un'istanza Cloud SQL?
- Hai attivato
Cloud SQL Admin API
per il tuo progetto? - Se hai un criterio 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 siano stati creati elencando la directory specificata con -dir quando hai avviato il proxy di autenticazione Cloud SQL.
- Connettori Cloud SQL e codice specifico del linguaggio
- La stringa di connessione è formattata correttamente?
- Hai confrontato il codice con il codice campione del tuo linguaggio di programmazione?
- Utilizzi un runtime o un framework per il quale non abbiamo un codice campione?
- Se sì, hai cercato nella community materiale di riferimento pertinente?
- Certificati SSL/TLS autogestiti
- Il certificato del server è ancora valido?
- Reti autorizzate
- È incluso l'indirizzo IP di origine?
- Utilizzi un indirizzo IP non conforme alla RFC 1918?
- Utilizzi un indirizzo IP non supportato?
- Errori di connessione
- Hai l'autorizzazione a collegarti?
- Visualizzi errori per il limite di connessioni?
- L'applicazione chiude le connessioni correttamente?
- Autenticazione
- Autenticazione database nativa (nome utente/password)
- Visualizzi errori
access denied
? - Nome utente e password sono corretti?
Messaggi di errore
Per i messaggi di errore API specifici, consulta la pagina di riferimento Messaggi di errore.
Risolvere altri problemi di connettività
Per altri problemi, visita la sezione relativa alla connettività nella pagina di risoluzione dei problemi.
Problemi comuni di connessione
Verifica che la tua applicazione chiuda correttamente le connessioni
Se visualizzi errori contenenti"Aborted connection nnnn to db:
", in genere significa che la tua applicazione non interrompe correttamente le connessioni. Anche i problemi di rete possono causare questo errore. L'errore non significa che ci sono problemi con la tua istanza Cloud SQL. Ti invitiamo inoltre a eseguire tcpdump
per ispezionare i pacchetti per 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 l'istanza è configurata per l'utilizzo di SSL, vai alla pagina Istanze Cloud SQL nella console e apri l'istanza. Apri la pagina Connessioni e seleziona la scheda Sicurezza, quindi assicurati che il certificato del tuo server sia valido. Se è scaduto, devi aggiungere un nuovo certificato e ruotarlo.
Verifica di avere l'autorizzazione a eseguire la connessione
Se le connessioni non riescono, verifica di avere l'autorizzazione a connettersi:
- Se hai problemi di connessione utilizzando un indirizzo IP, ad esempio
ti stai connettendo 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 vengono automaticamente autorizzate per gli intervalli di indirizzi RFC 1918. In questo modo, tutti i client privati possono accedere al database senza dover passare attraverso il proxy di autenticazione Cloud SQL. Gli intervalli di indirizzi non conformi alla RFC 1918 devono essere configurati come reti autorizzate.
Cloud SQL non apprende le route di subnet non RFC 1918 dal tuo VPC per impostazione predefinita. Devi aggiornare il peering di rete in Cloud SQL per esportare eventuali 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 corrente.
Determinare l'avvio delle connessioni
Per visualizzare le informazioni sulle tue connessioni attuali, connettiti al tuo database ed esegui questo comando:
sp_who go
Le connessioni che mostrano un indirizzo IP, ad esempio 1.2.3.4
, si connettono tramite IP.
Le connessioni a cloudsqlproxy~1.2.3.4
utilizzano il proxy di autenticazione Cloud SQL oppure provengono da App Engine. Le connessioni da localhost
potrebbero
essere utilizzate da alcuni processi interni di Cloud SQL.
Limiti di connessione
Non sono previsti limiti QPS per istanze Cloud SQL. Tuttavia, sono previsti limiti specifici per connessione, dimensioni e App Engine. Vedi Quote e limiti.
Le connessioni di database consumano risorse sul server e sull'applicazione di connessione. Utilizza sempre buone pratiche di gestione delle connessioni per ridurre al minimo l'impatto della tua applicazione e ridurre la probabilità di superare i limiti di connessione di Cloud SQL. Per ulteriori informazioni, consulta Gestione delle connessioni ai database.
Mostra connessioni e thread
Per vedere i processi in esecuzione sul tuo database, connettiti al tuo 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 connessioni (da Compute Engine)
Connessioni con un timeout dell'istanza Compute Engine dopo 10 minuti di inattività. Questo può influire sulle connessioni inutilizzate a lunga durata tra l'istanza di Compute Engine e l'istanza di Cloud SQL. Per ulteriori informazioni, consulta la sezione 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 permanente la configurazione tra i riavvii dell'istanza.
Visualizza il valore corrente tcp_keepalive_time.
cat /proc/sys/net/ipv4/tcp_keepalive_time
Imposta 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_time
Strumenti per eseguire il debug della connettività
tcpdump
tcpdump
è uno strumento per acquisire pacchetti. Ti consigliamo 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 comando ip -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 tue interfacce di rete.
Test con test di connettività
Il Test di connettività è uno strumento di diagnostica che consente di controllare la connettività tra gli endpoint nella tua rete. Analizza la configurazione e, in alcuni casi, esegue la verifica in fase di esecuzione. 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 testare la tua capacità di connessione dal tuo ambiente locale. Per ulteriori informazioni, consulta Connessione del client sqlcmd tramite 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 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? per determinare il suo 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 determinare il suo vero indirizzo IP.
Aprire le porte locali
Per verificare che l'host sia in ascolto sulle porte che ritieni siano presenti, esegui il comando ss -tunlp4
. Questo indica quali porte sono aperte e sono in ascolto.
Tutte le attività di trasferimento locale
Usa il comando netstat
per vedere tutte le attività nella 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 gli hai fornito.
Se l'operazione va a buon fine, vedrai quanto segue:
Trying 35.193.198.159...
Connected to 35.193.198.159.
.
In caso di errore, telnet
si blocca finché non forza la chiusura del tentativo:
Trying 35.193.198.159...
^C.
.
Cloud Logging
Cloud SQL e Cloud SQL utilizzano Cloud Logging. Per informazioni complete, consulta la documentazione di Cloud Logging e le query di esempio Cloud SQL.
Visualizza i log
Puoi visualizzare i log per le istanze Cloud SQL e altri progetti Google Cloud come le istanze Cloud VPN o Compute Engine. Per visualizzare i log per le voci di log dell'istanza Cloud SQL:
console
-
In Google Cloud Console, vai alla pagina Cloud Logging.
- Seleziona un progetto Cloud SQL esistente nella parte superiore della pagina.
- Nel generatore di query, aggiungi quanto segue:
- Risorsa: 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 l'istanza. Ad esempio:
- Gravità: seleziona un livello di log.
- Intervallo di tempo: seleziona un intervallo predefinito o crea un intervallo 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.
Indirizzi IP privati
Le connessioni a un'istanza Cloud SQL che utilizzano un indirizzo IP privato vengono automaticamente autorizzate per gli intervalli di indirizzi RFC 1918. Gli intervalli di indirizzi non conformi alla RFC 1918 devono essere configurati in Cloud SQL come reti autorizzate. Devi inoltre aggiornare il peering di rete in 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.