Replica da un server esterno (v1)

In questa pagina viene descritto come creare una configurazione che replica i dati da un dal server di 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 provider 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 la 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

  • Installare e autenticare 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 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 per il database di origine per accettare 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 di Storage Admin ruolo.

Requisiti per il server del database di origine

Prima di poter eseguire la replica da un server esterno in una replica Cloud SQL, verifica che il server di database di origine soddisfi queste configurazioni requisiti:

Procedura di configurazione

Per configurare la replica da un server di database esterno: segui questi passaggi:

  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 conservare temporaneamente i tuoi dati durante il processo di esportazione oppure usano un bucket esistente.

Per ulteriori informazioni sulla creazione di un bucket, consulta Creazione di un archivio Bucket. Per ulteriori informazioni sul ruolo Amministratore dello spazio di archiviazione, 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 i dati del tuo 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 con gcloud CLI installata e connettività di rete 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 | \
    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 del database di origine.
[PRIMARY_INSTANCE_PORT] La porta per il 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). Usa 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, è quello previsto.

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 l'IP privato, il server del database di origine deve essere configurato per l'accesso dalla rete in un VPC. 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 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 del 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 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 sul certificato SSL/TLS per il server di origine.

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

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

    Per assicurarti che l'importazione avvenga 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 di dump che hai caricato in 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 di rappresentazione dell'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 di 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 qualsiasi nome di istanza Cloud SQL valido.
    [SOURCE_REPRESENTATION_NAME] Il nome dell'istanza di rappresentazione dell'origine che hai creato 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 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] La dimensione 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] La dimensione dello spazio di archiviazione della 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 di origine di 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 risiedano 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 di 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 aperta sulla porta 3306, con MySQL 5.7, per le repliche Cloud SQL il progetto MyProject e la regione us-central1, useresti 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, creerai una replica di lettura di Cloud SQL utilizzando l'origine dati di rappresentazione per rappresentare il server di database di origine e fornire la replica con i dati che hai caricato in Cloud Storage nell'esperienza passaggio.

Perché questa chiamata API richiede che tu fornisca dati sensibili informazioni, Utilizzare un file JSON per fornire i tuoi dati a cURL, anziché 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 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 all'incirca le stesse dimensioni del server di 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] La dimensione dello spazio di archiviazione della 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 qualsiasi 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 dell'origine che abbiamo creato in precedenza, il file di dati, data.json, potrebbe essere simile al 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"
}

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 di dump, la replica tipo di macchina e lo schema del 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 di database di origine in modo che accetti connessioni dalla replica

Affinché la replica riesca, è necessario che si connetta al server del database di origine. Se il server del database di origine è protetto da un firewall o da qualche altro limitazione di rete, devi abilitare 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. Per recuperare l'indirizzo IP di OUTGOING, passa il mouse sopra la scheda Ulteriori informazioni descrizione comando per l'indirizzo IP oppure usando 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 riuscita a connettersi 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 di database di origine sia configurato su consenti connessioni dall'OUTGOING della replica Indirizzo IP.
      • 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 della replica MySQL sul server di database di origine è configurato su accetta connessioni da qualsiasi host (%). Aggiorna l'account utente per accettare 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 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 di connettersi alla replica utilizzando indirizzi IP pubblici.

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

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

7. Conferma lo stato della replica

Quando la replica termina di importare il file di dump, si connette server locale e applica tutti gli aggiornamenti apportati dopo l'esportazione prese.

È importante controlla lo stato della replica prima di promuoverla in un o un'istanza standalone. 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 di database di origine con Cloud SQL, promuovi la replica in modo che diventi un'istanza principale autonoma in esecuzione in un'istanza Compute Engine. Una volta che la replica diventa l'istanza principale, collegato 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 per Eliminazione di oggetti ed Eliminazione di bucket.

Aggiorna la configurazione

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

Passaggi successivi