Questa pagina descrive come configurare e utilizzare un'importazione gestita per i dati durante la replica da un server esterno a Cloud SQL.
Devi completare tutti i passaggi riportati in questa pagina. Al termine, puoi amministrare e monitorare l'istanza di rappresentazione di origine allo stesso modo a qualsiasi altra istanza Cloud SQL.
Prima di iniziare
Prima di iniziare, completa i seguenti passaggi:
Aggiorna i privilegi per l'utente di replica
L'utente di replica sul server esterno è configurato su
accetta connessioni da qualsiasi host (%
). Aggiorna questo account utente
in modo da poter essere utilizzato solo
con la replica di Cloud SQL.
Privilegi obbligatori
Esistono quattro tipi di combinazioni di migrazioni e dump.
- Tipo 1: migrazione continua e dump gestito
- Tipo 2: migrazione continua e dump manuale
- Tipo 3: migrazione una tantum e dump gestito
- Tipo 4: migrazione una tantum e dump manuale
Di seguito sono elencati i privilegi per ciascun tipo di migrazione e combinazione stupida.
Tipo 1
L'account utente deve avere i seguenti privilegi:
- REPLICATION SLAVE
- ESEGUI
- SELECT
- VISUALIZZAZIONE DEL PROGRAMMA
- CLIENTE REPLICATION
- RICARICA
- ATTIVATORE
- (solo per la migrazione da Amazon RDS e Amazon Aurora) TABELLA BLOCCO
Per MySQL versione 8.0 e successive, è consigliabile saltare il privilegio BACKUP ADMIN
per prestazioni ottimali.
Tipo 2
L'account utente deve avere i seguenti privilegi:
Tipo 3
L'account utente deve disporre dei seguenti privilegi:
- SELECT
- MOSTRA VISUALIZZAZIONE
- TRIGGER
- (Solo per la migrazione da origini con impostazione
GTID_MODE = ON
) RICARICA
Per MySQL versione 8.0 e successive, è consigliabile ignorare il privilegio BACKUP ADMIN
per ottenere prestazioni ottimali.
Tipo 4
Non sono richiesti privilegi.
Aggiorna privilegi
Per aggiornare i privilegi, apri un terminale sul server esterno e inserisci i seguenti comandi.
Client mysql
Per GTID:
UPDATE mysql.user SET Host='NEW_HOST' WHERE Host='OLD_HOST' AND User='USERNAME'; GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW, REPLICATION_CLIENT, RELOAD ON . TO 'USERNAME'@'HOST'; FLUSH PRIVILEGES;
Per il file binlog:
UPDATE mysql.user SET Host='NEW_HOST' WHERE Host='OLD_HOST' AND User='USERNAME'; GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW, REPLICATION CLIENT, RELOAD ON . TO 'GCP_USERNAME'@'HOST'; FLUSH PRIVILEGES;
esempio
UPDATE mysql.user
SET Host='192.0.2.0'
WHERE Host='%'
AND User='replicationUser';
GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW, REPLICATION CLIENT,
RELOAD ON *.* TO 'username'@'host.com';
FLUSH PRIVILEGES;
Proprietà | Descrizione |
---|---|
NEW_HOST | Specifica l'indirizzo IP in uscita della replica Cloud SQL. |
OLD_HOST | Il valore attuale assegnato a Host che vuoi
per cambiare. |
USERNAME | L'account utente di replica sul server esterno. |
GCP_USERNAME | Il nome utente dell'account utente. |
HOST | Il nome host per l'account utente. |
Verifica le impostazioni di replica
Al termine della configurazione, assicurati che la replica Cloud SQL possa eseguire la replica dal server esterno.
Le seguenti impostazioni di sincronizzazione esterna devono essere corrette.
- Connettività tra la replica Cloud SQL e il server esterno
- Privilegi utente di replica
- Compatibilità delle versioni
- La replica Cloud SQL non è già in fase di replica
- I binlog sono abilitati sul server esterno
- GTID è abilitato se stai tentando di eseguire una sincronizzazione esterna da un server RDS esterno e utilizzi un bucket Google Cloud
Per verificare queste impostazioni, apri un terminale Cloud Shell e inserisci quanto segue :
curl
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "SYNC_MODE",
"syncParallelLevel": "SYNC_PARALLEL_LEVEL",
"mysqlSyncConfig": {
"initialSyncFlags": "SYNC_FLAGS"
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/verifyExternalSyncSettings
esempio
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
"syncParallelLevel": "optimal"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings
example w/ sync flags
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
"syncParallelLevel": "optimal"
"mysqlSyncConfig": {
"initialSyncFlags": [{"name": "max-allowed-packet", "value": "1073741824"}, {"name": "hex-blob"}, {"name": "compress"}]
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/verifyExternalSyncSettings
Queste chiamate restituiscono un elenco di tipo sql#externalSyncSettingErrorList
.
Se l'elenco è vuoto, non ci sono errori. Una risposta senza errori è simile alla seguente:
{ "kind": "sql#externalSyncSettingErrorList" }
Proprietà | Descrizione |
---|---|
SYNC_MODE | Assicurati di poter mantenere la replica Cloud SQL e il server esterno
sincronizzati dopo la configurazione della replica. Le modalità di sincronizzazione includono EXTERNAL_SYNC_MODE_UNSPECIFIED , ONLINE e OFFLINE . |
SYNC_PARALLEL_LEVEL | Verifica l'impostazione che controlla la velocità di trasferimento dei dati dalle tabelle di un database. Sono disponibili i seguenti valori:
Nota: il valore predefinito per questo parametro è |
SYNC_FLAGS | Un elenco di flag di sincronizzazione iniziale da verificare. Consigliato solo se prevedi di utilizzare flag di sincronizzazione personalizzati durante la replica dall'origine. Per un elenco degli indicatori consentiti, vedi Indicatori di sincronizzazione iniziale. |
PROJECT_ID | L'ID del tuo progetto Google Cloud. |
REPLICA_INSTANCE_ID | L'ID della replica Cloud SQL. |
Autorizzazione di blocco di lettura globale
Se non disponi dell'autorizzazione per accedere al blocco di lettura globale sul server esterno, come potrebbe essere il caso di Amazon RDS e Amazon Aurora, metti in pausa le scritture sul tuo server come descritto nei passaggi che seguono:
- Vai a Esplora log, e seleziona la tua replica Cloud SQL dall'elenco delle risorse. Dovresti visualizzare un elenco dei log più recenti per la replica Cloud SQL. Per il momento ignorale.
- Apri un terminale e inserisci i comandi Avvia la replica sul server esterno per la replica dal server esterno.
Torna a Esplora log. Quando vedi il log riportato di seguito, interrompi la scrittura nel database sul server esterno. Nella maggior parte dei casi, è richiesta solo per alcuni secondi.
DUMP_IMPORT(START): Start importing data, please pause any write to the external primary database.
Quando vedi la seguente voce di log in Esplora log, riattiva la scrittura nel database sul server esterno.
DUMP_IMPORT(SYNC): Consistent state on primary and replica. Writes to the external primary may resume.
Avvia la replica sul server esterno
Dopo aver verificato di poter replicare dal server esterno, avvia la replica. La velocità di esecuzione della replica per la procedura di importazione iniziale è fino a 500 GB all'ora. Tuttavia, questa velocità può variare in base al livello della macchina, alle dimensioni del disco dati, alla velocità effettiva di rete e alla natura del database.
Durante la procedura di importazione iniziale, non eseguire operazioni DDL sul server esterno. In caso contrario, potrebbero verificarsi incoerenze durante l'importazione. Dopo l'importazione il processo viene completato, la replica utilizza i log binari per recuperare lo stato attuale a un server esterno.
curl
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "SYNC_MODE",
"skipVerification": "SKIP_VERIFICATION",
"syncParallelLevel": "SYNC_PARALLEL_LEVEL",
"mysqlSyncConfig": {
"initialSyncFlags": "SYNC_FLAGS"
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/startExternalSync
esempio
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
"syncParallelLevel": "optimal"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
esempio con flag di sincronizzazione
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
"syncParallelLevel": "optimal"
"skipVerification": false,
"mysqlSyncConfig": {
"initialSyncFlags": [{"name": "max-allowed-packet", "value": "1073741824"}, {"name": "hex-blob"}, {"name": "compress"}]
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
Proprietà | Descrizione |
---|---|
SYNC_MODE | Verifica di poter mantenere la replica Cloud SQL e il server esterno sincronizzati dopo la configurazione della replica. |
SKIP_VERIFICATION | Indica se saltare il passaggio di verifica integrata prima di sincronizzare i dati. Questo parametro è consigliato solo se hai già verificato le impostazioni di replica. |
SYNC_PARALLEL_LEVEL | Fornisci un'impostazione che controlla la velocità di trasferimento dei dati delle tabelle di un database. Sono disponibili i seguenti valori:
Nota: il valore predefinito per questo parametro è |
SYNC_FLAGS | Un elenco di flag di sincronizzazione iniziale da verificare. Consigliato solo se prevedi di utilizzare flag di sincronizzazione personalizzati durante la replica dall'origine. Per un elenco dei flag consentiti, vedi Flag di sincronizzazione iniziali. |
PROJECT_ID | L'ID del tuo progetto Google Cloud. |
REPLICA_INSTANCE_ID | L'ID della replica Cloud SQL. |
Flag di sincronizzazione iniziali
Per eseguire la migrazione con flag del database personalizzati, puoi utilizzare i seguenti flag consentiti:
- --add-drop-database
- --add-drop-table
- --add-drop-trigger
- --add-locks
- --allow-keywords
- --all-tablespaces
- --apply-slave-statements
- --column-statistics
- --comments
- --compact
- --compatible
- --complete-insert
- --compress
- --compression-algorithms
- --create-options
- --default-character-set
- --delayed-insert
- --disable-keys
- --dump-date
- - eventi
- --extended-insert
- --fields-enclosed-by
- --fields-escaped-by
- --fields-optionally-enclosed-by
- --fields-terminated-by
- --flush-logs
- --flush-privileges
- --forza
- --get-server-public-key
- --hex-blob
- --ignore-error
- --ignore-read-lock-error
- --ignore-table
- --insert-ignore
- --lines-terminated-by
- --lock-all-tables
- --lock-tables
- --max-allowed-packet
- --net-buffer-length
- --network-timeout
- --no-autocommit
- --no-create-db
- --no-create-info
- --no-data
- --no-defaults
- --no-set-names
- --no-tablespaces
- --opt
- --order-by-primary
- --pipe
- --quote-names
- --quick
- -sostituisci
- -routine
- --secure-auth
- --set-charset
- --shared-memory-base-name
- --show-create-skip-secondary-engine
- --skip-opt
- --ssl-cipher
- --ssl-fips-mode
- --ssl-verify-server-cert
- --tls-ciphersuites
- --tls-version
- --triggers
- --tz-utc
- --verbose
- --xml
- --zstd-compression-level
Per i valori consentiti, consulta la documentazione pubblica di MySQL.
Monitoraggio della migrazione
Una volta avviata la replica dal server esterno, devi monitorare la replica dei dati. Per scoprire di più, consulta Monitorare la replica. A questo punto potrai completare la migrazione.
Risoluzione dei problemi
Valuta le seguenti opzioni per la risoluzione dei problemi:
Problema | Risoluzione dei problemi |
---|---|
La replica di lettura non è stata avviata al momento della creazione. | Probabilmente contiene un errore più specifico nei file di log. Esamina i log in Cloud Logging per trovare l'errore effettivo. |
Impossibile creare la replica di lettura: errore invalidFlagValue. | Uno dei flag nella richiesta non è valido. Potrebbe trattarsi di un flag fornito esplicitamente o di un flag impostato su un valore predefinito.
Innanzitutto, controlla che il valore del flag Se il flag |
Impossibile creare la replica di lettura: errore sconosciuto. | Probabilmente contiene un errore più specifico nei file di log.
Esamina i log in
Cloud Logging per trovare l'errore effettivo.
Se l'errore è: |
Lo spazio sul disco è esaurito. | La dimensione del disco dell'istanza principale può diventare piena durante la creazione della replica. Modifica l'istanza principale per eseguirne l'upgrade a una dimensione del disco maggiore. |
L'istanza replica utilizza troppa memoria. | La replica utilizza la memoria temporanea per memorizzare nella cache la lettura richiesta più spesso
operazioni, il che può portarlo a utilizzare più memoria rispetto all'istanza principale.
Riavvia l'istanza replica per recuperare lo spazio di memoria temporaneo. |
Replica interrotta. | È stato raggiunto il limite massimo di spazio di archiviazione e l'archiviazione automatica
L'aumento non è abilitato.
Modifica l'istanza per abilitare |
Il ritardo nella replica è costantemente elevato. | Il carico di scrittura è troppo elevato per la replica. Ritardo della replica
si verifica quando il thread SQL su una replica non riesce a stare al passo
Thread IO. Alcuni tipi di query o carichi di lavoro possono causare un ritardo elevato della replica temporaneo o permanente per un determinato schema. Alcune delle cause comuni del ritardo nella replica sono:
Ecco alcune possibili soluzioni:
|
Il ritardo della replica presenta picchi improvvisi. | Questo è causato da transazioni a lunga esecuzione. Quando una transazione
(una singola istruzione o più istruzioni) viene eseguita nell'istanza di origine, la
relativa ora di inizio viene registrata nel log binario. Quando la replica riceve questo evento del log bin, confronta il timestamp con quello corrente per calcolare il ritardo nella replica. Pertanto, una transazione a lunga esecuzione
sulla sorgente causerebbe un ritardo di replica elevato immediato sulla
replica. Se il numero di modifiche delle righe nella transazione è elevato,
della replica impiegherebbe molto tempo per eseguirla. Durante questo periodo,
di replicazione è in aumento. Una volta completata la transazione, il periodo di aggiornamento dipenderà dal carico di lavoro di scrittura sull'origine e dalla velocità di elaborazione della replica.
Per evitare una transazione lunga, alcune possibili soluzioni sono:
|
La modifica dei flag di replica parallela genera un errore. | Per uno o più di questi flag è stato impostato un valore errato.
Nell'istanza principale che mostra il messaggio di errore, imposta i flag di replica parallela:
|
La creazione della replica non riesce a causa di un timeout. | Le transazioni non committate di lunga durata nell'istanza principale possono causare
il fallimento della creazione della replica di lettura.
Ricrea la replica dopo aver interrotto tutte le query in esecuzione. |
Inoltre, per MySQL, valuta anche le seguenti opzioni:
Problema | Risoluzione dei problemi |
---|---|
Lost connection to MySQL server during query when dumping table . |
La sorgente potrebbe non essere più disponibile o il dump potrebbe contenere pacchetti
troppo grandi.
Assicurati che l'istanza principale esterna sia disponibile per la connessione. Puoi anche modificare i valori dell'attributo net_read_timeout e net_write_timeout sull'istanza di origine per arrestare l'errore. Per ulteriori informazioni sui valori consentiti per questi flag, consulta Configurare i flag di database. Per scoprire di più sull'utilizzo degli indicatori |
La migrazione iniziale dei dati è riuscita, ma non viene replicato alcun dato. | Un possibile motivo di fondo potrebbe essere che il database di origine abbia definito indicatori di replica che impediscono la replica di alcune o di tutte le modifiche al database.
Assicurati che i flag di replica, ad esempio Esegui il comando |
La migrazione iniziale dei dati è riuscita, ma la replica dei dati si arresta dopo un po' di tempo. | Tentativi da effettuare
|
mysqld check failed: data disk is full . |
Il disco dati dell'istanza di replica è pieno.
Aumenta la dimensione del disco dell'istanza di replica. Puoi aumentare manualmente le dimensioni del disco o attivare l'aumento automatico dello spazio di archiviazione. |
Esamina i log di replica
Quando verifichi le impostazioni di replica, vengono generati i log.
Per visualizzare questi log:
Vai al visualizzatore log nella console Google Cloud.
- Seleziona la replica Cloud SQL dal menu a discesa Instance (Instanza).
- Seleziona il file log
replication-setup.log
.
Se la replica Cloud SQL non riesce a connettersi al server esterno, conferma quanto segue:
- Qualsiasi firewall sul server esterno è configurato per consentire le connessioni dalla replica di Cloud SQL indirizzo IP in uscita.
- La configurazione SSL/TLS è corretta.
- L'utente, l'host e la password di replica siano corretti.
Passaggi successivi
- Scopri di più sull'aggiornamento di un'istanza.
- Scopri di più sulla gestione delle repliche.
- Scopri di più sul monitoraggio delle istanze.
- Scopri come promuovere la replica Cloud SQL.