Replica da un server esterno (v1)

Questa pagina descrive come creare una configurazione che replica i dati da un server di database di origine alle repliche MySQL.

Il server del database di origine può essere qualsiasi server MySQL che soddisfa tutti i requisiti del server, incluse le istanze di Cloud SQL. Anche le istanze ospitate da altri cloud provider possono fungere da origine dati, a condizione che soddisfino i requisiti, incluso il supporto di GTID.

Per informazioni più dettagliate su questa configurazione, consulta Informazioni sulla replica da un server esterno.

Prima di iniziare

Prima di configurare la replica da un server esterno, è necessario completare i seguenti passaggi:

  • Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  • In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  • Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  • In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  • Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  • Attiva l'API Cloud SQL Admin.

    Abilita l'API

  • Installa e autentica gcloud CLI.
  • Assicurati che il tuo server soddisfi i requisiti per il server di database di origine.
  • Determina il livello di sicurezza richiesto per le connessioni tra l'istanza principale e la replica e ottieni i file dei certificati richiesti.
  • Decidi quale regione Google Cloud utilizzare per contenere la replica Cloud SQL.
  • Raccogli le informazioni richieste sul server di database di origine:

    • Indirizzo IPv4 esterno e numero di porta

      Per impostazione predefinita, MySQL utilizza la porta 3306.

    • Account utente e password di replica MySQL
    • Numero di versione MySQL
    • Posizione di tutti i certificati e le chiavi SSL/TLS richiesti, a seconda del livello di sicurezza selezionato
  • Preparati ad aggiornare il firewall di rete del server di database di origine in modo che accetti connessioni dalla replica Cloud SQL.

    Questo passaggio deve essere completato entro 30 minuti dalla creazione della replica.

  • Se non sei un proprietario del progetto, devi avere il ruolo Storage Admin.

Requisiti per il server di database di origine

Prima di poter replicare da un server esterno a una replica Cloud SQL, assicurati che il server di database di origine soddisfi i seguenti requisiti di configurazione:

Procedura di configurazione

Per configurare la replica da un server di database esterno, procedi nel seguente modo:

  1. Crea un bucket Cloud Storage per i tuoi dati.
  2. Esporta i dati in Cloud Storage.
  3. Imposta la configurazione della replica.
  4. Configura il server di database di origine per accettare connessioni dalla replica.

  5. Limita l'accesso all'utente di replica MySQL.

  6. Finalizza la configurazione della replica.

  7. Conferma lo stato della replica.

  8. Libera spazio di archiviazione.

1. crea un bucket Cloud Storage per i tuoi dati

Crea un bucket per archiviare temporaneamente i tuoi dati durante il processo di esportazione oppure utilizza un bucket esistente.

Per ulteriori informazioni sulla creazione di un bucket, consulta Creazione di bucket di archiviazione. Per ulteriori informazioni sul ruolo Amministratore Storage, consulta Ruoli IAM di Cloud Storage.

2. Esporta i dati in Cloud Storage

La replica cerca i propri dati in Cloud Storage, quindi inserisci una copia dei dati del server. Puoi continuare ad accettare operazioni di scrittura sul tuo server dopo l'esportazione. Al termine dell'importazione del file di dump, la replica avvia l'elaborazione di tutte le modifiche dal momento dell'esecuzione dell'esportazione per poi raggiungere il file principale.

Da una macchina su cui è installata gcloud CLI e la connettività di rete al server MySQL, esegui questo comando:

mysqldump \
    -h [PRIMARY_INSTANCE_IP] -P [PRIMARY_INSTANCE_PORT] -u [USERNAME] -p \
    --databases [DBS]  \
    --hex-blob  --skip-triggers  --master-data=1  \
    --order-by-primary --no-autocommit \
    --default-character-set=utf8mb4 \
    --single-transaction --set-gtid-purged=on | gzip | \
    gsutil cp - gs://[BUCKET]/[PATH_TO_DUMP]

If the source of the migration is a Relational Database Service (RDS) for MySQL,
the master-data flag is not supported and should not be specified.
This command might look like the following example:

mysqldump \
    -h [PRIMARY_INSTANCE_IP] -P [PRIMARY_INSTANCE_PORT] -u [USERNAME] -p \
    --databases [DBS]  \
    --hex-blob  --skip-triggers \
    --order-by-primary --no-autocommit \
    --default-character-set=utf8mb4 \
    --single-transaction --set-gtid-purged=on | gzip | \
    gsutil cp - gs://[BUCKET]/[PATH_TO_DUMP]

Additionally, you should configure RDS instances to retain binlogs for a
a longer period of time.
This command might look like the following example:

// Sets the retention period to one day.
call mysql.rds_set_configuration('binlog retention hours', 24);

Sostituisci [PROPERTIES_IN_BRACKETS] con i seguenti valori:

Proprietà Valore
[PRIMARY_INSTANCE_IP] L'indirizzo IPv4 del server di database di origine.
[PRIMARY_INSTANCE_PORT] La porta del server di database di origine.
[USERNAME] L'account utente di replica MySQL.
[PASSWORD] La password per l'account utente di replica MySQL.
[DBS] Elenco separato da spazi di tutti i database sul server di database di origine, ad eccezione dei database di sistema (sys, mysql, performance_schema e information_schema). Utilizza il comando SHOW DATABASES MySQL per elencare i tuoi database.
[BUCKET] Il nome del bucket che hai creato in cui conservare il file di esportazione.
[PATH_TO_DUMP] Il percorso del file di esportazione.

Se viene visualizzato un avviso relativo a dump parziali e GTID, significa che è previsto.

Questo comando potrebbe essere simile al seguente esempio:

mysqldump \
    -h 192.0.2.1 -P 3306 -u replicationUser \
    --databases guestbook  \
    --hex-blob  --skip-triggers  --master-data=1  \
    --order-by-primary --no-autocommit \
    --default-character-set=utf8mb4 \
    --single-transaction --set-gtid-purged=on | gzip | \
    gsutil cp - gs://export-bucket/hq-primary1.sql.gz

3. Crea la configurazione della replica

Se la replica utilizza un IP privato, il server del database di origine deve essere configurato per l'accesso dal VPC della replica. La creazione di repliche sui VPC privati è supportata solo tramite gcloud CLI e l'API Cloud SQL Admin.

Console

Questo passaggio crea la replica Cloud SQL e l'istanza di rappresentazione di origine.

  1. Apri l'elenco delle istanze Cloud SQL nella console Google Cloud.

    Apri l'elenco delle istanze

  2. Fai clic su Esegui la migrazione dei dati nella barra dei pulsanti per aprire l'Assistente migrazione Cloud SQL.

  3. Fai clic su Inizia migrazione.

  4. Nel campo Nome del database di origine, fornisci un nome per la configurazione di replica in Cloud SQL.

    Questo nome è un riferimento per la configurazione. Utilizza un qualsiasi nome di istanza Cloud SQL valido.

  5. Inserisci l'indirizzo IP e il numero di porta del server del database di origine.

  6. Fornisci il nome utente e la password per l'utente MySQL che verrà utilizzato per la connessione di replica.

  7. Seleziona la versione MySQL del server del database di origine.

  8. Se utilizzi SSL/TLS per la connessione tra la replica e il server del database di origine (opzione consigliata), seleziona Abilita la sicurezza SSL/TLS e fornisci le informazioni del certificato SSL/TLS per il server di origine.

    Per maggiori informazioni sulle opzioni SSL/TLS, vedi Opzioni SSL/TLS.

  9. Fai clic su Avanti e inserisci i dettagli della replica.

    Per garantire che l'importazione avvenga nel modo più efficiente possibile, configura la replica con uno spazio di archiviazione approssimativamente sufficiente a contenere il database. Dimensiona i core e la memoria in modo che siano simili al server di origine.

  10. Fornisci il percorso del file di dump che hai caricato su Cloud Storage in precedenza.

  11. Fai clic su Crea per creare la replica.

  12. Tocca Avanti.

gcloud

  1. Crea l'istanza di rappresentazione di origine.

    gcloud beta sql instances create [REPLICA_NAME] \
        --region=[REGION] --database-version=[MYSQL_VERSION] \
        --source-ip-address=[SOURCE_IP] --source-port=[SOURCE_PORT]
    

    Se la replica utilizza un indirizzo IP privato, aggiungi anche: --network=[VPC_NETWORK_NAME]

    Sostituisci [PROPERTIES_IN_BRACKETS] con i seguenti valori:

    Proprietà Valore
    [SOURCE_REPRESENTATION_NAME] Il nome dell'istanza della rappresentazione di origine. Utilizza un nome di istanza Cloud SQL valido.
    [REGION] La regione in cui devono trovarsi le repliche Cloud SQL.
    [MYSQL_VERSION] La versione MySQL in esecuzione sul server del database di origine: MYSQL_5_6 o MYSQL_5_7.
    [SOURCE_IP] L'indirizzo IPv4 accessibile dall'esterno per il server di database di origine.
    [SOURCE_PORT] La porta accessibile dall'esterno per il server di database di origine.
  2. Crea la replica di Cloud SQL:

    gcloud beta sql instances create [REPLICA_NAME] \
        --master-instance-name=[SOURCE_REPRESENTATION_NAME] \
        --master-username=[USERNAME] --prompt-for-master-password \
        --master-dump-file-path=gs://[BUCKET]/[PATH_TO_DUMP] \
        --master-ca-certificate-path=[SOURCE_SERVER_CA_PATH] \
        --client-certificate-path=[CLIENT_CERT_PATH] \
        --client-key-path=[PRIVATE_KEY_PATH] \
        --tier=[MACHINE_TYPE] --storage-size=[DISK_SIZE]
    

    Se la replica utilizza un indirizzo IP privato, aggiungi anche: --network=[VPC_NETWORK_NAME]

    Sostituisci [PROPERTIES_IN_BRACKETS] con i seguenti valori:

    Proprietà Valore
    [REPLICA_NAME] Il nome della replica di lettura di Cloud SQL. Utilizza un nome di istanza Cloud SQL valido.
    [SOURCE_REPRESENTATION_NAME] Il nome dell'istanza della rappresentazione di origine creata nel passaggio precedente.
    [USERNAME] L'account utente di replica MySQL sul server di database di origine.
    [BUCKET] Il nome del bucket che hai creato in cui conservare il file di esportazione.
    [PATH_TO_DUMP] Il percorso del file di esportazione.
    [SOURCE_SERVER_CA_PATH] Il percorso locale in cui è archiviato il certificato CA del server di database di origine. Obbligatorio solo per SSL/TLS.
    [CLIENT_CERT_PATH] Il percorso locale in cui è archiviato il certificato client. Obbligatorio solo per l'autenticazione server-client.
    [PRIVATE_KEY_PATH] Il percorso locale in cui è archiviato il file della chiave privata per il certificato client. Obbligatorio solo per l'autenticazione server-client.
    [MACHINE_TYPE] Le dimensioni della replica. In genere, la replica ha all'incirca le stesse dimensioni del server del database di origine. Se hai dubbi su quale tipo di macchina utilizzare, inizia con db-custom-2-7680. Se necessario, puoi modificarne le dimensioni in un secondo momento.
    [DISK_SIZE] Le dimensioni dello spazio di archiviazione per la replica, in GB. Per ottenere prestazioni ottimali, crea la replica con spazio di archiviazione approssimativamente sufficiente a contenere l'intero file di importazione.
    [VPC_NETWORK_NAME] VPC nel formato: projects/[PROJECT_ID]/global/networks/[NETWORK_NAME]

cURL

1. Crea l'istanza di rappresentazione dell'origine Cloud SQL

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "name": "[SOURCE_REPRESENTATION_NAME]",
         "region": "[REGION]",
         "databaseVersion": "[MYSQL_VERSION]",
         "onPremisesConfiguration": {
             "hostPort": "[SOURCE_SERVER_IP]:[SOURCE_SERVER_PORT]"
         }
     }' \
     -X POST \
     https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances

Sostituisci [PROPERTIES_IN_BRACKETS] con i seguenti valori:

Proprietà Valore
[SOURCE_REPRESENTATION_NAME] Il nome dell'istanza della rappresentazione di origine. Utilizza un nome di istanza Cloud SQL valido.
[REGION] La regione in cui devono trovarsi le repliche Cloud SQL.
[MYSQL_VERSION] La versione MySQL in esecuzione sul server del database di origine: MYSQL_5_6 o MYSQL_5_7.
[SOURCE_SERVER_IP] L'indirizzo IPv4 accessibile dall'esterno per il server di database di origine.
[SOURCE_SERVER_PORT] La porta accessibile dall'esterno per il server di database di origine.
[PROJECT_ID] L'ID del tuo progetto Google Cloud.

Ad esempio, per creare un'istanza di rappresentazione di origine denominata hq-primary1, per un server di database di origine con indirizzo IP 192.0.2.0 aperto sulla porta 3306 e che esegue MySQL 5.7, per le repliche Cloud SQL nel progetto MyProject e nella regione us-central1, devi utilizzare i seguenti comandi:

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "name": "hq-primary1",
         "region": "us-central1",
         "databaseVersion": "MYSQL_5_7",
         "onPremisesConfiguration": {
             "hostPort": "192.0.2.0:3306"
         }
     }' \
     -X POST \
     https://www.googleapis.com/sql/v1beta4/projects/MyProject/instances

2. crea la replica di Cloud SQL

In questo passaggio, creerai una replica di lettura di Cloud SQL, utilizzando il server di rappresentazione dell'origine per rappresentare il server del database di origine e fornirai la replica con i dati che hai caricato in Cloud Storage nel passaggio precedente.

Poiché questa chiamata API richiede di fornire informazioni sensibili, utilizza un file JSON per fornire i dati a cURL, anziché fornirli nella riga di comando.

Crea il file di dati:

{
    "replicaConfiguration": {
        "mysqlReplicaConfiguration": {
            "username": "[USERNAME]",
            "password": "[PASSWORD]",
            "dumpFilePath": "gs://[BUCKET]/[PATH_TO_DUMP]",
            "caCertificate": "[SOURCE_SERVER_CA]",
            "clientCertificate": "[CLIENT_CERT]",
            "clientKey": "[PRIVATE_KEY]"
        }
     },
     "settings": {
         "tier": "[MACHINE_TYPE]",
         "dataDiskSizeGb": "[DISK_SIZE]"
     },
     "masterInstanceName": "[SOURCE_REPRESENTATION_NAME]",
     "region": "[REGION]",
     "databaseVersion": "[MYSQL_VERSION]",
     "name": "[REPLICA_NAME]"
}

Se la replica utilizza un indirizzo IP privato, aggiungi anche alle impostazioni: "ipConfiguration.privateNetwork" con il valore nel formato: "projects/[PROJECT_ID]/global/networks/[NETWORK_NAME]"

Sostituisci [PROPERTIES_IN_BRACKETS] con i seguenti valori:

Proprietà Valore
[USERNAME] L'account utente di replica MySQL sul server di database di origine.
[PASSWORD] La password per l'account utente di replica MySQL.
[BUCKET] Il nome del bucket che hai creato in cui conservare il file di esportazione.
[PATH_TO_DUMP] Il percorso del file di esportazione.
[SOURCE_SERVER_CA] Il certificato CA del server di database di origine. Obbligatorio solo per SSL/TLS. Incolla il certificato nel corpo della richiesta.
[CLIENT_CERT] Il certificato client. Obbligatorio solo per l'autenticazione server-client. Incolla il certificato nel corpo della richiesta.
[PRIVATE_KEY] Il file della chiave privata per il certificato client. Obbligatorio solo per l'autenticazione server-client. Incolla la chiave nel corpo della richiesta.
[MACHINE_TYPE] Le dimensioni della replica. In genere, la replica ha all'incirca le stesse dimensioni del server del database di origine. Se hai dubbi su quale tipo di macchina utilizzare, inizia con db-custom-2-7680. Se necessario, puoi modificarne le dimensioni in un secondo momento.
[DISK_SIZE] Le dimensioni dello spazio di archiviazione per la replica, in GB. Per ottenere prestazioni ottimali, crea la replica con spazio di archiviazione sufficiente per contenere l'intera importazione.
[SOURCE_REPRESENTATION_NAME] Il nome dell'istanza della rappresentazione di origine creata in precedenza.
[REGION] La regione in cui hai creato l'istanza di rappresentazione di origine. Le repliche di lettura devono trovarsi nella stessa regione dell'istanza di rappresentazione di origine.
[MYSQL_VERSION] La versione MySQL in esecuzione sul server del database di origine: MYSQL_5_6 o MYSQL_5_7.
[REPLICA_NAME] Il nome della replica di lettura di Cloud SQL. Utilizza un nome di istanza Cloud SQL valido.

Nella riga di comando, chiama l'API:

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

Per l'istanza e il bucket di rappresentazione di origine creati in precedenza, il file di dati, data.json, potrebbe avere il seguente esempio:

{
    "replicaConfiguration": {
        "mysqlReplicaConfiguration": {
            "username": "replicationUser",
            "password": "486#@%*@",
            "dumpFilePath": "gs://export-bucket/hq-primary1.sql.gz",
            "caCertificate": "[SOURCE_SERVER_CA]",
            "clientCertificate": "[CLIENT_CERT]",
            "clientKey": "[PRIVATE_KEY]"
        }
    },
    "settings": {
        "tier": "db-custom-4-15360",
        "dataDiskSizeGb": "100"
    },
    "masterInstanceName": "hq-primary1",
    "region": "us-central1",
    "databaseVersion": "MYSQL_5_7",
    "name": "hq-primary1-replica1"
}

E il comando cURL avrebbe questo aspetto:

curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @./data.json
     -X POST \
     https://www.googleapis.com/sql/v1beta4/projects/MyProject/instances

Quando la replica di lettura può accedere al file di dump, inizia il processo di importazione. La durata del processo di importazione dipende dalla dimensione del file di dump, dal tipo di macchina di replica e dallo schema del database. Come regola generale per la stima, la replica importerà circa 25-50 GB all'ora.

La replica rimane nello stato PENDING_CREATE fino al completamento del processo di importazione, dopodiché la replica passa allo stato RUNNABLE.

4. Configura il server di database di origine in modo che accetti connessioni dalla replica

La replica deve connettersi al server del database di origine affinché la replica abbia esito positivo. Se il server del database di origine è protetto da un firewall o da qualche altra restrizione di rete, devi abilitare l'accesso alla rete per la replica, utilizzando l'indirizzo IP OUTGOING della replica. Tieni presente che questo non è l'indirizzo IP visualizzato nell'elenco principale della replica nella console Google Cloud. Puoi recuperare l'indirizzo IP di OUTGOING passando il mouse sopra il suggerimento dello strumento Ulteriori informazioni relativo all'indirizzo IP oppure utilizzando il comando gcloud riportato di seguito.

  1. Recupera gli indirizzi IP della replica di lettura:

    gcloud sql instances describe [REPLICA_NAME] --format="default(ipAddresses)"
    
  2. Configura il firewall di rete, se necessario, affinché il server del database di origine accetti connessioni dall'indirizzo IP OUTGOING.
  3. Verifica che la replica si sia connessa correttamente al server di database di origine.

    1. L'icona della replica nella pagina dell'elenco delle istanze non ruota più ed è verde.
    2. Vai al visualizzatore log nella console Google Cloud.

      Vai al visualizzatore log

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

      Se la replica non è in grado di connettersi al server del database di origine, verifica quanto segue:

      • Qualsiasi firewall sul server di database di origine è configurato in modo da consentire le connessioni dall'indirizzo IP OUTGOING della replica.
      • La configurazione SSL/TLS è corretta.
      • L'utente, l'host e la password di replica sono corretti.

5. Limita l'accesso all'utente della replica MySQL

Questo passaggio è facoltativo, ma consigliato per la sicurezza.

L'utente di replica MySQL sul server di database di origine è configurato per accettare connessioni da qualsiasi host (%). Aggiorna l'account utente in modo che accetti connessioni solo dall'indirizzo IP OUTGOING della replica:

    UPDATE mysql.user SET Host='[OUTGOING_IP]' WHERE Host='%' AND User='[USERNAME]';
    FLUSH PRIVILEGES;

6. Finalizza la configurazione della replica

  1. Configura un account utente nella replica.

    Per farlo, utilizza la console Google Cloud, lo strumento gcloud CLI o l'API Cloud SQL. Tuttavia, non puoi utilizzare il client mysql. Per ulteriori informazioni sugli utenti MySQL, consulta la pagina relativa agli utenti MySQL.

    Per creare un utente utilizzando la console Google Cloud:

    1. Vai alla pagina Istanze Cloud SQL nella console Google Cloud.
      Vai alla pagina Istanze Cloud SQL
    2. Fai clic sul nome dell'istanza per aprire la relativa pagina Dettagli istanza.
    3. Seleziona la scheda Utenti.
    4. Fai clic su Crea account utente.
    5. Nella finestra di dialogo Crea account utente, specifica i dettagli dell'utente.
    6. Fai clic su Crea.
  2. Autorizza l'accesso alla replica da qualsiasi client che intendi utilizzare per connettersi alla replica utilizzando indirizzi IP pubblici.

    Per le istruzioni, consulta Aggiungere un intervallo di indirizzi o indirizzi autorizzati. Per connetterti alla replica, utilizza l'indirizzo IP PRIMARY della replica. Questo indirizzo IP viene visualizzato nella console Google Cloud.

    In alternativa, puoi utilizzare qualsiasi altro metodo di connessione per connetterti alla replica.

7. Conferma stato della replica

Al termine dell'importazione del file di dump, la replica si connette al server on-premise e applica tutti gli aggiornamenti eseguiti dopo l'esportazione.

È importante controllare lo stato della replica prima di promuoverla su un'istanza autonoma. Se il processo di replica non è completo e ha esito positivo, una replica promossa non ha tutte le modifiche provenienti dall'istanza esterna.

8. (Facoltativo) Promuovi la replica a un'istanza autonoma

Dopo aver controllato lo stato della replica, se vuoi sostituire completamente il server di database di origine con Cloud SQL, promuovi la replica in modo che diventi un'istanza principale autonoma. Una volta che la replica diventa l'istanza principale, non è più connessa al server di database di origine originale.

Crea una nuova replica per la nuova istanza principale e riavvia le applicazioni di connessione in modo che puntino alla nuova istanza principale (per le operazioni di scrittura) o alla nuova replica (per le operazioni di lettura).

9. Libera spazio di archiviazione

  1. Elimina il file di esportazione:

    gsutil rm gs://[BUCKET]/[PATH_TO_DUMP]
    
  2. Se il bucket non ti serve più, eliminalo:

    gsutil rm -r gs://[BUCKET]
    

Per ulteriori informazioni, consulta la documentazione di Cloud Storage per gli argomenti Eliminazione di oggetti ed Eliminazione dei bucket.

Aggiorna la configurazione

Per aggiornare le impostazioni di configurazione in un secondo momento, puoi modificare l'istanza di rappresentazione dell'origine. Se devi aggiornare le impostazioni di configurazione on-premise, tieni presente che non è possibile aggiornare hostPort e type.

Passaggi successivi