Utilizzo di un file di dump per configurare la replica da database esterni

Questa pagina descrive la procedura per configurare la replica quando hai un file di dump che hai creato dal tuo server esterno.

Devi completare tutti i passaggi descritti in questa pagina. Al termine, puoi amministrare e monitorare l'istanza di rappresentazione dell'origine allo stesso modo di qualsiasi altra istanza Cloud SQL.

Prima di iniziare

Prima di iniziare, devi configurare il server esterno, creare l'istanza di rappresentazione dell'origine e configurare la replica Cloud SQL.

Aggiorna le autorizzazioni per l'utente di replica

L'utente di replica sul server esterno è configurato per accettare connessioni da qualsiasi host (%). Devi aggiornare questo account utente in modo che possa essere utilizzato solo con la replica Cloud SQL. Apri un terminale sul server esterno e inserisci questi comandi:

Client MySQL

    UPDATE mysql.user
      SET Host='NEW_HOST'
      WHERE Host='OLD_HOST'
      AND User='USERNAME';
      GRANT REPLICATION SLAVE, EXECUTE
      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
      ON *.* TO 'gcp_user'@'gmail.com';
    FLUSH PRIVILEGES;
Proprietà Descrizione
NEW_HOST Specifica l'IP in uscita della replica Cloud SQL.
OLD_HOST Il valore attuale assegnato a Host che vuoi modificare.
USERNAME L'account utente di replica sul server esterno.
GCP_USERNAME Il nome utente dell'account utente della piattaforma Google Cloud (GCP).
HOST Il nome host per l'account utente della Google Cloud piattaforma (GCP).

Verificare le impostazioni di replica

Una volta completata la configurazione, assicurati che la replica Cloud SQL possa replicare dal server esterno.

Innanzitutto, assicurati che le impostazioni di sincronizzazione esterna siano corrette. Per farlo, utilizza i comandi riportati di seguito per verificare:

  • 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 log binari sono attivati sul server esterno
  • È abilitato un identificatore di transazione globale (GTID)

Apri un terminale e inserisci questi comandi per verificare che le impostazioni di sincronizzazione esterna siano corrette:

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"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/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",
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings
Proprietà Descrizione
SYNC_MODE verifyExternalSyncSettings verifica che tu possa mantenere sincronizzate la replica Cloud SQL e il server esterno dopo la configurazione della replica. Le modalità di sincronizzazione includono EXTERNAL_SYNC_MODE_UNSPECIFIED, ONLINE e OFFLINE.
SKIP_VERIFICATION Se saltare o meno il passaggio di verifica integrato prima di sincronizzare i dati. Consigliato solo se hai già verificato le impostazioni di replica.
PROJECT_ID L'ID del tuo progetto in Google Cloud.
REPLICA_INSTANCE L'ID della replica Cloud SQL.

Esportare il database in un bucket Cloud Storage

Puoi popolare una replica Cloud SQL con un file mysqldump che si trova in un bucket Cloud Storage. Si applicano le seguenti condizioni:

  • Devi utilizzare l'utilità mysqldump inclusa in MySQL.
  • Durante l'esecuzione di mysqldump, non eseguire operazioni DDL sul server esterno. In tal caso, potrebbero verificarsi incoerenze nel file di esportazione.

Per esportare il database in un bucket Cloud Storage:

  1. In Google Cloud, crea un bucket Cloud Storage.
  2. Apri un terminale utilizzando un client che si connette al server di database esterno ed esegui il comando seguente.

mysqldump

    mysqldump \
        --host=EXTERNAL_HOST \
        --port=EXTERNAL_PORT \
        --user=USERNAME\
        --password=PASSWORD \
        --databases=DATABASE_LIST  \
        --hex-blob \
        SOURCE_DATA  \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --single-transaction \
        --set-gtid-purged=on \
        ADD_DROP_TABLE \
        ROUTINES \
        COMPRESS \
        GZIP \
        | gcloud storage cp - gs://BUCKET/DUMP_FILENAME

esempio

    mysqldump \
        --host=192.0.2.1 \
        --port=3306 \
        --user=replicationUser \
        --password \
        --databases guestbook journal \
        --hex-blob \
        --master-data=1 \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --single-transaction \
        --compress \
        | gzip \
        | gcloud storage cp - gs://replica-bucket/external-database.sql.gz
Proprietà Descrizione
EXTERNAL_HOST L'indirizzo IPv4 o DNS del server esterno.
EXTERNAL_PORT La porta per il server esterno. Se il server esterno è ospitato su Cloud SQL, questo è 3306.
USERNAME Il nome dell'account utente di replica o dell'account utente sul server esterno con autorizzazioni di lettura del database.
PASSWORD Password utente di replica.
DATABASE_LIST Elenco separato da spazi di tutti i database sul server esterno, ad eccezione dei database di sistema (sys, mysql, performance_schema e information_schema). Utilizza il comando MySQL SHOW DATABASES per elencare i tuoi database.
SOURCE_DATA Se utilizzi una versione di MySQL precedente alla 8.0.26, utilizza --master-data come valore per questo parametro. Per le versioni di MySQL 8.0.26 o successive, imposta il valore di questo parametro su --source-data.
ADD_DROP_TABLE Se vuoi aggiungere una dichiarazione DROP TABLE prima di ogni dichiarazione CREATE TABLE, includi --add-drop-table.
ROUTINES Se vuoi mostrare le routine archiviate, ad esempio procedure e funzioni, nell'output dei database di cui è stato eseguito il dump, includi --routines.
COMPRESS Se vuoi comprimere tutte le informazioni inviate tra la replica Cloud SQL e il server esterno, utilizza --compress.
GZIP Se vuoi comprimere ulteriormente il file di dump, utilizza | gzip. Se il database contiene dati che non vengono compressi bene, ad esempio dati binari non comprimibili o immagini JPG, non utilizzare questa opzione.
BUCKET Il nome del bucket creato nel passaggio 1 per contenere il file di dump.
DUMP_FILENAME Nel bucket viene creato un file con questo nome. Questo file contiene i contenuti del database sul tuo server esterno.

Aggiorna l'istanza di rappresentazione dell'origine con il percorso del file del bucket Cloud Storage

L'istanza di rappresentazione dell'origine è un'istanza Cloud SQL che rappresenta il server di database di origine per la replica Cloud SQL. È visibile nella console Google Cloud e appare come una normale istanza Cloud SQL, ma non contiene dati, non richiede configurazione o manutenzione e non influisce sulla fatturazione.

Il file source.json contiene informazioni sull'istanza della rappresentazione della sorgente.

REST

{
  "name": "PRIMARY_INSTANCE_NAME",
  "region": "REGION_NAME",
  "databaseVersion": "DB_NAME_AND_VERSION",
  "onPremisesConfiguration": {
    "hostPort": "IP_ADDRESS_AND_PORT",
    "username": "USERNAME",
    "password": "PASSWORD"
  },
  "dumpFilePath" :"DUMP_FILE_PATH"
}

esempio

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  },
  "dumpFilePath" :"gs://replica-bucket/source-database.sql.gz"
}
Proprietà Descrizione
PRIMARY_INSTANCE_NAME Il nome dell'istanza Cloud SQL associata all'istanza di rappresentazione di origine.
REGION_NAME Il nome della regione assegnata all'istanza di rappresentazione dell'origine.
DB_NAME_AND_VERSION Il nome e il numero di versione del database associato all'istanza di rappresentazione dell'origine.
IP_ADDRESS_AND_PORT L'indirizzo IP e il numero di porta riservati all'istanza di rappresentazione dell'origine.
USERNAME Il nome utente dell'istanza della rappresentazione dell'origine.
PASSWORD La password dell'istanza di rappresentazione dell'origine.
DUMP_FILE_PATH Il percorso del file di dump che contiene i contenuti del database sul server esterno.

Dopo aver configurato la replica Cloud SQL, devi aggiornare l'istanza di rappresentazione di origine con il percorso file del bucket Cloud Storage.

REST

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @JSON_PATH \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/SOURCE_REPRESENTATION_INSTANCE

esempio

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @./source.json \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
Proprietà Descrizione
JSON_PATH Il percorso del file JSON archiviato nel bucket Cloud Storage. Questo file contiene dati sull'istanza di rappresentazione dell'origine.
PROJECT_ID L'ID del tuo progetto in Google Cloud.
SOURCE_REPRESENTATION_INSTANCE Il nome dell'istanza della rappresentazione dell'origine.

Avvia la replica sul server esterno

Dopo aver verificato di poter eseguire la replica dal server esterno, puoi procedere.

Durante il processo di importazione iniziale, non eseguire operazioni DDL sul server esterno. In caso contrario, potrebbero verificarsi incoerenze durante l'importazione. Al termine del processo di importazione, la replica utilizza i log binari sul server esterno per raggiungere lo stato attuale del server esterno.

Apri un terminale, accedi utilizzando gcloud, quindi inserisci il comando curl per eseguire la replica dal server esterno.

REST

  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"
         }' \
       -X POST \
       https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/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",
             "skipVerification": false
           }' \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
Proprietà Descrizione
SYNC_MODE Verifica che sia possibile mantenere sincronizzati la replica Cloud SQL e il server esterno dopo la configurazione della replica.
SKIP_VERIFICATION Se saltare o meno il passaggio di verifica integrato prima di sincronizzare i dati. Consigliato solo se hai già verificato le impostazioni di replica.
PROJECT_ID L'ID del tuo progetto in Google Cloud.
REPLICA_INSTANCE L'ID della replica Cloud SQL.

Liberare spazio di archiviazione

Se hai eseguito la replica da un file in un bucket, puoi rimuovere questo file e il bucket. Consulta la documentazione di Cloud Storage per Eliminare oggetti ed Eliminare bucket.

Procedi con la replica

Una volta avviata la replica dal server esterno, devi monitorarla e poi completare la migrazione. Per saperne di più, consulta Monitoraggio della replica.

Risoluzione dei problemi

Problema Risoluzione dei problemi
Lost connection to MySQL server during query when dumping table. La fonte potrebbe non essere più disponibile o il dump conteneva pacchetti troppo grandi.

Assicurati che la primaria esterna sia disponibile per la connessione. Puoi anche modificare i valori dei flag net_read_timeout e net_write_timeout nell'istanza di origine per interrompere l'errore. Per ulteriori informazioni sui valori consentiti per questi flag, consulta la pagina Configurare i flag di database.

Per scoprire di più sull'utilizzo dei flag mysqldump per la migrazione dell'importazione gestita, vedi Flag di sincronizzazione iniziale consentiti e predefiniti

La migrazione iniziale dei dati è stata completata, ma non vengono replicati dati. Una possibile causa principale potrebbe essere che il database di origine ha definito flag di replica che comportano la mancata replica di alcune o di tutte le modifiche al database.

Assicurati che i flag di replica come binlog-do-db, binlog-ignore-db, replicate-do-db o replicate-ignore-db non siano impostati in modo conflittuale.

Esegui il comando show master status sull'istanza primaria per visualizzare le impostazioni correnti.

La migrazione iniziale dei dati è stata completata, ma la replica dei dati smette di funzionare dopo un po' di tempo. Tentativi da effettuare

  • Controlla le metriche di replica per l'istanza di replica nella sezione Cloud Monitoring della console Google Cloud .
  • Gli errori del thread I/O o SQL di MySQL sono disponibili in Cloud Logging nei file mysql.err log.
  • L'errore può essere rilevato anche durante la connessione all'istanza di replica. Esegui il comando SHOW SLAVE STATUS e controlla i seguenti campi nell'output:
    • Slave_IO_Running
    • Slave_SQL_Running
    • Last_IO_Error
    • Last_SQL_Error
mysqld check failed: data disk is full. Il disco dati dell'istanza di replica è pieno.

Aumenta le dimensioni del disco dell'istanza di replica. Puoi aumentare manualmente le dimensioni del disco o attivare l'aumento automatico dello spazio di archiviazione.

Esaminare i log di replica

Quando verifichi le impostazioni di replica, vengono prodotti i log.

Per visualizzare questi log, procedi nel seguente modo:

  1. Vai al visualizzatore log nella console Google Cloud .

    Vai al visualizzatore log

  2. Seleziona la replica Cloud SQL dal menu a discesa Istanza.
  3. Seleziona il file di log replication-setup.log.

Se la replica Cloud SQL non riesce a connettersi al server esterno, verifica quanto segue:

  • Qualsiasi firewall sul server esterno è configurato per consentire le connessioni dall'indirizzo IP in uscita della replica Cloud SQL.
  • La configurazione SSL/TLS è corretta.
  • L'utente di replica, l'host e la password siano corretti.

Passaggi successivi