Replica da un server esterno (v1)

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

Il server del database di origine può essere qualsiasi server MySQL che soddisfi tutti i requisiti del server, incluse le istanze Cloud SQL. Anche le istanze ospitate da altri fornitori di servizi cloud possono fungere da origine dati, a condizione che soddisfino i requisiti, inclusa la supportabilità del 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, devi completare i seguenti passaggi:

  • Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  • In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  • Make sure that billing is enabled for your Google Cloud project.

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

    Go to project selector

  • Make sure that billing is enabled for your Google Cloud project.

  • Enable the Cloud SQL Admin API.

    Enable the API

  • Installa e autentica la gcloud CLI.
  • Assicurati che il server soddisfi i requisiti per il server di database di origine.
  • Determina il livello di sicurezza necessario per le connessioni tra l'istanza principale e la replica e ottieni i file del certificato richiesti.
  • Decidi quale regione Google Cloud vuoi utilizzare per contenere la replica Cloud SQL.
  • Riunisci le informazioni richieste sul server del 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 di MySQL
    • Posizione di tutte le chiavi e di tutti i certificati SSL/TLS richiesti, a seconda del livello di sicurezza selezionato.
  • Preparati ad aggiornare il firewall di rete per il server di database di origine in modo che accetti le 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 disporre del ruolo Storage Admin.

Requisiti per il server del database di origine

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

Procedura di configurazione

Per configurare la replica da un server di database esterno:

  1. Crea un bucket Cloud Storage per i tuoi dati.
  2. Esporta i dati in Cloud Storage.
  3. Configura la configurazione della replica.
  4. Configura il server del database di origine in modo che accetti le 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. Creare un bucket Cloud Storage per i dati

Crea un bucket per contenere temporaneamente i dati durante il processo di esportazione o utilizza un bucket esistente.

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

2. Esportare i dati in Cloud Storage

La replica cerca i suoi dati in Cloud Storage, quindi devi inserire lì una copia dei dati del server. Puoi continuare ad accettare operazioni di scrittura sul server dopo l'esportazione. Una volta completata l'importazione del file dump, la replica inizia a elaborare tutte le modifiche apportate dall'esportazione e alla fine raggiunge l'istanza principale.

Da una macchina su cui è installato gcloud CLI e con connettività di rete al tuo server MySQL, esegui il seguente 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 | \
    gcloud storage 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 | \
    gcloud storage 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 per il server del 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 del database di origine, ad eccezione dei database di sistema (sys, mysql, performance_schema e information_schema). Utilizza il comando MySQL SHOW DATABASES per elencare i database.
[BUCKET] Il nome del bucket che hai creato per contenere il file di esportazione.
[PATH_TO_DUMP] Il percorso del file di esportazione.

Se viene visualizzato un avviso relativo a dump parziali e GTID, è normale.

Questo comando potrebbe avere il seguente aspetto:

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 | \
    gcloud storage cp - gs://export-bucket/hq-primary1.sql.gz

3. Crea la configurazione della replica

Se la replica utilizza un indirizzo IP privato, il server del database di origine deve essere configurato per l'accesso dalla VPC della replica. La creazione di repliche su VPC private è 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 per la migrazione di Cloud SQL.

  3. Fai clic su Inizia migrazione.

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

    Questo nome è un riferimento per la configurazione. Puoi utilizzare qualsiasi nome valido per l'istanza Cloud SQL.

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

  6. Fornisci il nome utente e la password dell'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 sul certificato SSL/TLS per il server di origine.

    Per ulteriori informazioni sulle opzioni SSL/TLS, consulta Opzioni SSL/TLS.

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

    Per assicurarti che l'importazione venga eseguita nel modo più efficiente possibile, configura la replica con spazio di archiviazione approssimativamente sufficiente per contenere il database. Scegli dimensioni di core e memoria simili a quelle del server di origine.

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

  11. Fai clic su Crea per creare la replica.

  12. Fai clic su Avanti.

gcloud

  1. Crea l'istanza di rappresentazione dell'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 vuoi che si trovino le repliche Cloud SQL.
    [MYSQL_VERSION] La versione di 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 del database di origine.
    [SOURCE_PORT] La porta accessibile dall'esterno per il server del database di origine.
  2. Crea la replica 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 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 del database di origine.
    [BUCKET] Il nome del bucket che hai creato per contenere 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 del 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 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 le migliori prestazioni, crea la replica con spazio di archiviazione sufficiente per 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 vuoi che si trovino le repliche Cloud SQL.
[MYSQL_VERSION] La versione di 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 del database di origine.
[SOURCE_SERVER_PORT] La porta accessibile dall'esterno per il server del 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 ed esecuzione di 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 Cloud SQL

In questo passaggio, crei una replica di lettura Cloud SQL utilizzando il server di rappresentazione di origine per rappresentare il server del database di origine e fornisci alla replica i dati caricati 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é sulla 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 alle impostazioni anche: "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 del database di origine.
[PASSWORD] La password per l'account utente di replica MySQL.
[BUCKET] Il nome del bucket che hai creato per contenere 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 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 le migliori prestazioni, 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 della rappresentazione di origine. Le repliche di lettura devono trovarsi nella stessa regione dell'istanza di rappresentazione di origine.
[MYSQL_VERSION] La versione di MySQL in esecuzione sul server del database di origine: MYSQL_5_6 o MYSQL_5_7.
[REPLICA_NAME] Il nome della replica di lettura 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 della rappresentazione dell'origine che abbiamo creato in precedenza, il file di dati data.json potrebbe avere il seguente aspetto:

{
    "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"
}

Il comando cURL sarà simile al seguente:

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 dump, inizia il processo di importazione. La durata del processo di importazione dipende dalle dimensioni del file dump, dal tipo di macchina replica e dallo schema di database. Come guida generale per la stima, tieni conto che la replica importerà circa 25-50 GB all'ora.

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

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

Affinché la replica riesca, è necessario che si connetta al server del database di origine. Se il server di database di origine si trova dietro un firewall o un'altra limitazione di rete, devi attivare l'accesso alla rete per la replica utilizzando l'indirizzo IP OUTGOING della replica. Tieni presente che non si tratta dell'indirizzo IP visualizzato nella scheda principale della replica nella console Google Cloud. Puoi recuperare l'indirizzo IP OUTGOING passando il mouse sopra la descrizione comando Altre informazioni per l'indirizzo IP o 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. Se necessario, configura il firewall di rete in modo che il server di database di origine accetti connessioni dall'indirizzo IP OUTGOING.
  3. Verifica che la replica sia collegata correttamente al server del database di origine.

    1. L'icona della replica nella pagina della scheda dell'istanza non gira più ed è verde.
    2. Vai al visualizzatore log nella console Google Cloud.

      Vai al visualizzatore log

    3. Seleziona la replica dal menu a discesa Instance (Instanza).
    4. Seleziona il file log replication-setup.log.

      Se la replica non riesce a connettersi al server del database di origine, verifica quanto segue:

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

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

Questo passaggio è facoltativo, ma consigliato per motivi di 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. Completare la configurazione della replica

  1. Configura un account utente sulla replica.

    Puoi farlo utilizzando 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 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 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 prevedi di utilizzare per connetterti alla replica utilizzando indirizzi IP pubblici.

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

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

7. Conferma lo stato della replica

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

È importante controllare lo stato della replica prima di promuovere la replica a un istanza autonoma. Se il processo di replica non è completo e riuscito, una replica promossa non contiene tutte le modifiche dell'istanza esterna.

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

Dopo aver controllato lo stato della replica, se vuoi sostituire completamente ("eseguire la migrazione") il server del 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ù collegata al server del 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. Liberare spazio di archiviazione

  1. Elimina il file di esportazione:

    gcloud storage rm gs://[BUCKET]/[PATH_TO_DUMP]
    
  2. Se non ti serve più, elimina il bucket:

    gcloud storage rm gs://[BUCKET] --recursive
    

Per ulteriori informazioni, consulta la documentazione di Cloud Storage sull'eliminazione di oggetti e sull'eliminazione di bucket.

Aggiorna la configurazione

Per aggiornare le impostazioni di configurazione in un secondo momento, puoi modificare l'istanza della rappresentazione della sorgente. Se devi aggiornare le impostazioni di configurazione on-premise, tieni presente che hostPort e type non possono essere aggiornati.

Passaggi successivi