Questa pagina descrive come configurare un'istanza Cloud SQL che esegue la replica
in una o più repliche esterne a Cloud SQL e come eseguire il downgrade dell'istanza
primaria in una configurazione di replica esterna per invertire la
configurazione.
Prima di iniziare questa attività, devi disporre di un'istanza Cloud SQL e di un'istanza MySQL esterna che soddisfi i requisiti per le repliche esterne.
Requisiti dell'istanza di origine
L'istanza di origine per una replica di lettura esterna deve essere un'istanza principale o autonoma. Non puoi utilizzare una replica di lettura Cloud SQL come istanza di origine
per una replica di lettura esterna. A volte le repliche di lettura vengono ricreate dal clone del disco dell'istanza principale e il relativo stato di replica a una replica di lettura esterna non può essere mantenuto dalla replica di lettura.
Registra l'indirizzo IP pubblico e l'indirizzo IP pubblico in uscita dell'istanza principale per utilizzarli in seguito. Puoi trovare questi valori nella pagina
Panoramica dell'istanza.
Fai clic sull'icona di Cloud Shell
nell'angolo in alto a destra.
Al prompt di Cloud Shell, utilizza il client MySQL integrato per
connetterti all'istanza primaria:
Avviso: questa procedura sovrascrive tutti i dati ospitati in un database MySQL sulla replica, inclusi utenti e password, con le impostazioni e i dati dell'istanza primaria.
Sulla macchina che ospita la replica, inizializza la nuova istanza MySQL esterna
con il file di esportazione creato dall'istanza principale.
Ad esempio, il seguente comando carica un file esportato denominato
mydump.sql:
mysql --user=root --password < mydump.sql
Determina l'ID server per questa coppia replica-primaria.
L'ID server è un valore numerico (ad esempio "3") che deve essere univoco
nella configurazione della replica esterna
(ogni replica deve avere un ID server univoco).
Aggiungi le seguenti opzioni al file di opzioni my.cnf della replica:
Riavvia il processo mysqld per leggere il file di configurazione.
In un client mysql sulla replica, inserisci questo comando:
CHANGE MASTER TO MASTER_HOST='MASTER_IP_ADDRESS', MASTER_USER='REPLICATION_USER',
MASTER_PASSWORD='REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1;
Avvia la replica sulla replica:
START SLAVE;
Conferma lo stato della replica:
SHOW SLAVE STATUS\G;
Se vedi il messaggio "Waiting for master to send event" (In attesa che il master invii l'evento), la replica funziona.
Retrocedere l'istanza principale di una replica esterna
Quando hai un'istanza Cloud SQL con una replica esterna, puoi
invertire la configurazione, il che comporta le seguenti modifiche:
La replica esterna diventa la nuova istanza principale.
L'istanza Cloud SQL diventa una replica di lettura, replicando dal server che in precedenza era la replica esterna (ora chiamato server di database di origine).
Per invertire la configurazione della replica esterna:
Utilizza la regione in cui vuoi che risieda la replica Cloud SQL.
Avvia la procedura di declassamento.
Poiché questa chiamata API richiede di fornire informazioni sensibili, è consigliabile
utilizzare un file JSON
per fornire i dati a cURL, anziché fornirli dalla riga di comando.
Per ulteriori informazioni sulle opzioni per SSL/TLS, vedi
Opzioni SSL/TLS.
Per saperne di più sulle proprietà utilizzate dall'oggetto
replicaConfiguration, consulta
Replica da un server esterno.
Attendi che la replica esterna completi tutte le transazioni in attesa dall'istanza principale.
Quando la replica è aggiornata, il comando SHOW SLAVE STATUS
mostrerà Seconds Behind Master come 0 e il
valore Executed_Gtid_Set sarà identico tra la
replica esterna e l'istanza principale Cloud SQL.
Utilizza il client mysql per interrompere la replica sulla replica esterna:
STOP SLAVE
RESET SLAVE ALL
Attendi che l'istanza Cloud SQL inizi la replica dal server esterno, che ora è il server di database di origine.
L'esecuzione del comando SHOW SLAVE STATUS sull'istanza Cloud SQL
fornisce lo stato della replica.
Quando l'istanza Cloud SQL replica correttamente dal server di database di origine, imposta il flag read_only sul server di database di origine su off e aggiorna le applicazioni in modo che puntino al server di database di origine.
Risoluzione dei problemi
Problema
Risoluzione dei problemi
Messaggio di errore: The slave is connecting ... master has purged
binary logs containing GTIDs that the slave requires.
L'istanza Cloud SQL principale dispone di backup automatici e log binari e il recupero point-in-time è abilitato, quindi dovrebbe avere log sufficienti per consentire alla replica di recuperare. Tuttavia, in questo caso, anche se i
log binari esistono, la replica non sa da quale riga iniziare a leggere.
Crea un nuovo file di dump utilizzando le impostazioni dei flag corrette e configura
la replica esterna utilizzando questo file.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Difficile da capire","hardToUnderstand","thumb-down"],["Informazioni o codice di esempio errati","incorrectInformationOrSampleCode","thumb-down"],["Mancano le informazioni o gli esempi di cui ho bisogno","missingTheInformationSamplesINeed","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-09-04 UTC."],[],[],null,["# Configure external replicas\n\n\u003cbr /\u003e\n\nMySQL \\| [PostgreSQL](/sql/docs/postgres/replication/configure-external-replica \"View this page for the PostgreSQL database engine\") \\| [SQL Server](/sql/docs/sqlserver/replication/configure-external-replica \"View this page for the SQL Server database engine\")\n\n\u003cbr /\u003e\n\nThis page describes how to configure a Cloud SQL instance that replicates to one or more replicas external to Cloud SQL, and how to demote the primary instance in an external replica configuration to reverse the configuration.\n\nFor more information about replication, see\n[About replication in Cloud SQL](/sql/docs/mysql/replication).\n\nSet up the external replica configuration\n-----------------------------------------\n\n### Before you begin\n\nBefore you start this task, you must have a Cloud SQL instance and an\nexternal MySQL instance that meets the [requirements for external\nreplicas](/sql/docs/mysql/replication#external-read-replicas).\n\n### Configure the primary instance\n\n1. Go to the [Cloud SQL Instances page](https://console.cloud.google.com/sql/instances) in the Google Cloud console.\n2. Enable access on the primary instance for the IP address of the external replica. For information about enabling IP access, see\n [Configuring access for IP connections](/sql/docs/mysql/configure-ip).\n\n3. Record the public IP address and the public outgoing IP address of the primary instance for later use. You can find these values on the instance's **Overview** page.\n4. Click the Cloud Shell icon in the upper right corner.\n5. At the Cloud Shell prompt, use the built-in MySQL client to connect to your primary instance: \n\n ```bash\n \n gcloud sql connect PRIMARY_INSTANCE_NAME \\\n --user=root\n \n \n ```\n6. Enter your root password. You should then see the mysql prompt.\n7. Create a special user for replication and grant replication privileges: \n\n ```bash\n CREATE USER '\u003cvar translate=\"no\"\u003eREPLICATION_USER\u003c/var\u003e'@'%' IDENTIFIED BY '\u003cvar translate=\"no\"\u003eREPLICATION_USER_PASSWORD\u003c/var\u003e';\n GRANT REPLICATION SLAVE ON *.* TO '\u003cvar translate=\"no\"\u003eREPLICATION_USER\u003c/var\u003e'@'%';\n \n ```\n8. If you are starting with a new database, create the same database and tables on both the primary and replica instances. For example: \n\n ```sql\n CREATE DATABASE test;\n\n USE test;\n\n CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);\n INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');\n ```\n9. If you already have a database on the primary instance, you must create the same on the replica. To do this, export the database from the primary instance to a Cloud Storage bucket and import it into the replica. Learn more about [Exporting data from Cloud SQL to a SQL dump file in Cloud Storage](/sql/docs/mysql/import-export/exporting#cloud-sql).\n\n### Configure the external replica\n\nWarning: This procedure overwrites any data hosted in a MySQL database on the replica, including users and passwords, with the settings and data from the primary instance.\n\n1. On the machine hosting the replica, seed your new external MySQL instance with the export file you created from the primary instance. For example, the following command loads an exported file named\n `mydump.sql`:\n\n ```\n mysql --user=root --password \u003c mydump.sql\n ```\n2. Determine the server ID for this replica-primary pair. The server ID is a numeric value (for example, \"3\") that must be unique\n across the external replica configuration\n (each replica must have a unique server ID).\n\n3. Add the following options to the replica's `my.cnf` option file: \n\n ```\n [mysqld]\n server-id=[SERVER_ID]\n gtid_mode=ON\n enforce_gtid_consistency=ON\n log_slave_updates=ON\n replicate-ignore-db=mysql\n binlog-format=ROW\n log_bin=mysql-bin\n expire_logs_days=1\n read_only=ON\n ```\n | **Note:** You must set `gtid_mode=ON` for all external replicas in a configuration that includes a Cloud SQL primary instance. Changing the default to `gtid_mode=OFF` causes replication with the external server to fail.\n\n For more information about MySQL replication options, see\n [Replication and Binary Logging Options](https://dev.mysql.com/doc/refman/8.0/en/replication-options.html).\n4. Restart the `mysqld` process to cause the configuration file to be read.\n5. In a `mysql` client on the replica, enter the following command: \n\n ```\n CHANGE MASTER TO MASTER_HOST='MASTER_IP_ADDRESS', MASTER_USER='REPLICATION_USER',\n MASTER_PASSWORD='REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1;\n ```\n6. Start replication on the replica: \n\n ```\n START SLAVE;\n ```\n7. Confirm replication status:\n\n ```\n SHOW SLAVE STATUS\\G;\n ```\n\n If you see \"Waiting for master to send event\", replication is working.\n\nDemote the primary instance of an external replica\n--------------------------------------------------\n\nWhen you have a Cloud SQL instance with an external replica, you can\nreverse the configuration, which causes these changes to happen:\n\n- The external replica becomes the new primary instance.\n- The Cloud SQL instance becomes a read replica, replicating from the server that was previously the external replica (now called the source database server).\n\nTo reverse the external replica configuration:\n\n1. Create a\n [source representation instance](/sql/docs/mysql/replication/external-server#config-description).\n\n This instance will represent the source database server to the Cloud SQL replica\n after the demotion operation completes.\n\n ```\n gcloud auth login\n ACCESS_TOKEN=\"$(gcloud auth print-access-token)\"\n curl --header \"Authorization: Bearer ${ACCESS_TOKEN}\" \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"name\": \"SOURCE_REPRESENTATION_NAME\",\n \"region\": \"REGION\",\n \"databaseVersion\": \"EXTERNAL_SERVER_DATABASE_VERSION\",\n \"onPremisesConfiguration\": {\n \"hostPort\": \"EXTERNAL_SERVER_IP:EXTERNAL_SERVER_PORT\"\n }\n }' \\\n -X POST \\\n https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances\n ```\n\n Use the region where you want your Cloud SQL replica to reside.\n2.\n Start the demotion process.\n\n\n Because this API call requires you to provide sensitive information, you\n should\n [use a JSON file](/sql/docs/mysql/admin-api#json-file)\n to provide your data to cURL, rather than providing it on the command line.\n\n Create the data file: \n\n ```\n {\n \"demoteMasterContext\": {\n \"replicaConfiguration\": {\n \"mysqlReplicaConfiguration\": {\n \"username\": \"REPLICATION_USERNAME\",\n \"password\": \"PASSWORD\",\n \"caCertificate\": \"EXTERNAL_SERVER_CA\",\n \"clientCertificate\": \"CLIENT_CERT\",\n \"clientKey\": \"PRIVATE_KEY\"\n }\n },\n \"masterInstanceName\": \"SOURCE_REPRESENTATION_NAME\",\n },\n }\n ```\n\n Then, call the API. \n\n ```\n curl --header \"Authorization: Bearer ${ACCESS_TOKEN}\" \\\n --header 'Content-Type: application/json' \\\n --data @PATH_TO_DATA_FILE \\\n https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_NAME/demoteMaster\n ```\n\n For more information about your options for SSL/TLS, see\n [SSL/TLS options](/sql/docs/mysql/replication/external-server#ssl-options).\n For more information about the properties used by the\n `replicaConfiguration` object, see\n [Replicating from an External Server](/sql/docs/mysql/replication/replication-from-external#setup).\n3. Wait for the external replica to complete all pending transactions from\n the primary instance.\n\n When the replica is caught up, the `SHOW SLAVE STATUS` command\n will show `Seconds Behind Master` as 0, and the\n `Executed_Gtid_Set` value will be identical between the\n external replica and the Cloud SQL primary.\n4.\n Use the `mysql` client to stop replication on the external replica:\n\n ```\n STOP SLAVE\n RESET SLAVE ALL\n ```\n5.\n Wait for the Cloud SQL instance to start replicating from the\n external server, which is now the source database server.\n\n Running the `SHOW SLAVE STATUS` command on the Cloud SQL\n instance provides replication status.\n6. When the Cloud SQL instance is successfully replicating from the source database server, set the `read_only` flag on the source database server to `off` and update your applications to point to the source database server.\n\nTroubleshoot\n------------\n\n\u003cbr /\u003e\n\nWhat's next\n-----------\n\n- Learn how to [manage replicas](/sql/docs/mysql/replication/manage-replicas).\n- Learn about [requirements and best practices for the external replica configuration](/sql/docs/mysql/replication#external-read-replicas).\n- Learn more about [MySQL replication](https://dev.mysql.com/doc/refman/8.0/en/replication.html).\n- Learn more about [replication options](https://dev.mysql.com/doc/refman/8.0/en/replication-options.html).\n- Learn more about [checking replication status](https://dev.mysql.com/doc/refman/8.0/en/replication-administration-status.html).\n- Learn more about [replicating from an external server](/sql/docs/mysql/replication/replication-from-external)."]]