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 in corso: hai l'autorizzazione per connetterti all'istanza?
- Autenticazione: il database accetta le credenziali del database?
Ognuno di questi può essere ulteriormente suddiviso in percorsi diversi le indagini. 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 attivato
Service Networking API
per il tuo progetto? - Utilizzi un VPC condiviso?
- Il tuo account utente o di servizio dispone delle 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 MySQL?
- Se specifichi un intervallo di indirizzi IP allocati 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?
- La connessione privata è stata creata?
- Se la connessione privata è stata modificata, i vpc-peerings sono stati aggiornati?
- I log VPC indicano degli errori?
- L'IP della 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 necessarie per connettersi a un'istanza Cloud SQL?
- Hai attivato
Cloud SQL Admin API
per il tuo progetto? - Se disponi di 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 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 linguaggio
- La stringa di connessione è formata correttamente?
- Hai confrontato il tuo codice con il codice campione del tuo linguaggio di programmazione?
- Utilizzi un runtime o un framework per il quale non disponiamo di codice di esempio?
- In tal caso, hai rivolto alla community il materiale di riferimento pertinente?
- Certificati SSL/TLS autogestiti
- Il certificato client è installato sul computer di origine?
- Il certificato client è scritto correttamente negli argomenti di connessione?
- Il certificato client è ancora valido?
- Ricevi messaggi di errore quando ti connetti tramite SSL?
- Il certificato del server è ancora valido?
- Reti autorizzate
- È incluso l'indirizzo IP di origine?
- Utilizzi un indirizzo IP non RFC 1918?
- Utilizzi un indirizzo IP non supportato?
- Errori di connessione
- Disponi dell'autorizzazione al collegamento?
- Visualizzi gli errori relativi al limite di connessione?
- L'applicazione chiude le connessioni correttamente?
- Autenticazione in corso
- Autenticazione database nativa (nome utente/password)
- Visualizzi
access denied
errori? - Nome utente e password corretti?
- Autenticazione dei database IAM
- Hai attivato il flag
cloudsql.iam_authentication
nella tua istanza? - Hai aggiunto un'associazione di norme per l'account?
- Utilizzi 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, utilizzi il nome email abbreviato?
- Scopri di più sull'autenticazione del database IAM in PostgreSQL.
Messaggi di errore
Per messaggi di errore specifici relativi all'API, consulta la pagina di riferimento Messaggi di errore.
Risolvere altri problemi di connettività
Per altri problemi, consulta 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
si sono verificati problemi
con l'istanza Cloud SQL. Ti invitiamo inoltre a eseguire tcpdump
per esaminare i pacchetti e individuare l'origine del problema.
Per esempi di best practice per la gestione della connessione, vedi Gestione delle connessioni ai database
Verifica che i certificati non siano scaduti
Se la tua istanza è configurata per utilizzare SSL, vai alla Pagina delle istanze Cloud SQL nella console Google Cloud e apri l'istanza. Apri la relativa pagina Connessioni, seleziona la Sicurezza e assicurati che il certificato del server sia valido. Se è scaduta, devi aggiungere un nuovo certificato e ruotarvi.
Verifica di avere l'autorizzazione per la connessione
Se le connessioni non funzionano, verifica di disporre dell'autorizzazione per la connessione:
- Se hai difficoltà a connetterti utilizzando un indirizzo IP, ad esempio,
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 utilizzano un indirizzo IP privato con l'autorizzazione automatica per RFC 1918 di indirizzi IP esterni. In questo modo, tutti i client privati possono accedere al database senza passare per il proxy di autenticazione Cloud SQL. Devi configurare gli intervalli di indirizzi non RFC 1918 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.
- Prova la
gcloud sql connect
per connetterti all'istanza. Questo comando autorizza il tuo indirizzo IP per breve tempo. Puoi eseguire questo comando in un ambiente con gcloud CLI e il client mysql installati. Puoi anche eseguire questo comando in Cloud Shell, disponibile in Console Google Cloud con gcloud CLI e il client mysql preinstallati. Cloud Shell fornisce un'istanza Compute Engine che puoi utilizzare per la connessione 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
.
Verifica la modalità di connessione
Se viene visualizzato un messaggio di errore simile al seguente: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 usare la password corretta e di si connettono tramite SSL, se l'istanza lo richiede.
Determina la modalità di avvio delle connessioni
Puoi vedere le informazioni sulle tue connessioni attuali connettendoti al tuo ed eseguendo questo 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
ha avuto origine da App Engine. Le connessioni da localhost
potrebbero essere
utilizzata da alcuni processi interni di Cloud SQL.
Limiti di connessione
Non sono previsti limiti QPS per le istanze Cloud SQL. Tuttavia, c'è connessione, e limiti specifici di 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 ulteriori informazioni, vedi Gestione delle connessioni ai database
Mostra connessioni e thread
Se viene visualizzato il messaggio "Troppe connessioni" messaggio di errore o vuoi sapere che cos'è
su un'istanza, puoi mostrare 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 la documentazione di riferimento di MySQL.
Per ottenere il numero di 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)
Connessioni con il timeout di un'istanza Compute Engine dopo 10 minuti di di inattività, che può incidere sulle connessioni inutilizzate di lunga durata tra i tuoi dall'istanza Compute Engine e dall'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 comandi seguenti impostano il valore keepalive TCP su un minuto e la configurazione permanente tra 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 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
Connetti con IPv6
Se ricevi uno dei 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 è funzionale sulla tua workstation visitando il sito ipv6.google.com. Se non si carica, significa che IPv6 non è disponibile. Connettiti a IPv4 o l'istanza Cloud SQL. Potresti dover prima aggiungere un indirizzo IPv4 all'istanza.
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 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 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 configurazione e, in alcuni casi, esegue la verifica del tempo 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 mysql per verificare la tua capacità di connetterti dall'ambiente locale. Per ulteriori informazioni, vedi Connessione del client mysql tramite indirizzi IP e Connessione del client mysql tramite 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 da un firewall, accedi al computer e utilizza Qual è il mio 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.
Apri 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.
Ad esempio, se hai un database MySQL in esecuzione, la porta 3306 dovrebbe essere attiva
in ascolto. Per SSH, dovresti vedere la porta 22.
Ad esempio, se hai un database PostgreSQL in esecuzione, la porta 5432 dovrebbe essere attiva e in ascolto. Per SSH, dovresti vedere la porta 22.
Tutte le attività relative alle porte locali
Usa il comando netstat
per vedere tutte le attività delle porte locali. Per
Ad esempio, netstat -lt
mostra tutte le porte attualmente attive.
Connettiti all'istanza Cloud SQL utilizzando telnet
Per verificare la possibilità di connetterti all'istanza Cloud SQL utilizzando TCP
, esegui
il comando telnet
. Telnet tenta di connettersi all'indirizzo IP e
e la porta assegnata.
telnet 35.193.198.159 3306
.
Se la tua istanza Cloud SQL esegue un database PostgreSQL, ad esempio,
dovresti essere in grado di farlo tramite Telnet sulla porta 5432:
telnet 35.193.198.159 5432
.
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.
.
Autenticazione client
L'autenticazione client è controllata da un file di configurazione, denominato
pg_hba.conf
(HBA è l'acronimo di Host-based Authentication).
Assicurati che la sezione delle connessioni di replica di pg_hba.conf
sul database di origine viene aggiornato in modo da accettare connessioni dal
Intervallo di indirizzi IP del VPC Cloud SQL.
Cloud Logging
Cloud SQL e Cloud SQL utilizzano Cloud Logging. Consulta le Documentazione di Cloud Logging per avere informazioni complete ed esaminare Query di esempio di Cloud SQL.
Visualizza i log
Puoi visualizzare i log per le istanze Cloud SQL e altri servizi Google Cloud a progetti come le istanze Cloud VPN o 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 di Cloud SQL.
- Nomi dei log: scorri fino alla sezione Cloud SQL e seleziona
i file di log appropriati per l'istanza. Ad esempio:
- cloudsql.googlapis.com/mysql-general.log
- cloudsql.googleapis.com/mysql.err
- cloudsql.googleapis.com/postgres.log
- Gravità: seleziona un livello di log.
- Intervallo di tempo: seleziona un valore preimpostato o creane uno personalizzato.
gcloud
Utilizza la gcloud logging
per visualizzare le voci di log. Nell'esempio riportato di seguito, sostituisci PROJECT_ID
.
La limit
è un parametro facoltativo che indica il numero massimo di voci da
per tornare indietro.
gcloud logging read "projects/PROJECT_ID/logs/cloudsql.googleapis.com/mysql-general.log" \ --limit=10
gcloud logging read "projects/PROJECT_ID/logs/cloudsql.googleapis.com/postgres.log" \ --limit=10
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-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.