En esta página, se describe cómo configurar una instancia de Cloud SQL para crear una o más réplicas externas a Cloud SQL, y cómo descender de nivel la instancia principal en la configuración de una réplica externa para revertir esa configuración.
Antes de comenzar con esta tarea, debes contar con una instancia de Cloud SQL y una instancia externa de MySQL que cumpla con los requisitos para réplicas externas.
Configura la instancia principal
Ve a la página Instancias de Cloud SQL en la consola de Google Cloud.
En la instancia principal, habilita el acceso de la dirección IP de la réplica externa.
Registra la dirección IP pública y la dirección IP saliente pública de la instancia principal para usarla más adelante. Puedes encontrar estos valores en la página Descripción general de la instancia.
Haz clic en el ícono de Cloud Shell en la esquina superior derecha.
En el mensaje de Cloud Shell, usa el cliente MySQL incorporado para conectarte a tu instancia principal:
Si estás comenzando con una base de datos nueva, crea la misma base de datos y las mismas tablas en las instancias principal y de réplica. Por ejemplo:
Si ya tienes una base de datos en la instancia principal, debes crear la misma en la réplica. Para ello, exporta la base de datos de la instancia principal a un bucket de Cloud Storage y, luego, impórtala en la réplica. Obtén más información sobre la exportación de datos desde Cloud SQL a un archivo de volcado de SQL en Cloud Storage.
Configura la réplica externa
Advertencia: Con este procedimiento, se reemplazarán todos los datos alojados en la base de datos de MySQL de la réplica (incluidos los usuarios y las contraseñas) por la configuración y los datos de la instancia principal.
En la máquina que aloja a la réplica, propaga tu nueva instancia externa de MySQL con el archivo de exportación que creaste desde la instancia principal.
Por ejemplo, con el siguiente comando, se carga un archivo exportado llamado mydump.sql:
mysql --user=root --password < mydump.sql
Determina el ID del servidor para este par réplica-instancia principal.
El ID del servidor es un valor numérico (por ejemplo, “3”) que debe ser único en la configuración de la réplica externa (cada réplica debe tener un ID de servidor único).
Agrega las siguientes opciones al archivo de opciones my.cnf de la réplica:
Reinicia el proceso mysqld para que se lea el archivo de configuración.
En un cliente mysql en la réplica, ingresa el siguiente comando:
CHANGE MASTER TO MASTER_HOST='MASTER_IP_ADDRESS', MASTER_USER='REPLICATION_USER',
MASTER_PASSWORD='REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1;
Inicia la replicación en la réplica:
START SLAVE;
Confirma el estado de la replicación:
SHOW SLAVE STATUS\G;
Si ves el mensaje “En espera de que la instancia principal envíe un evento”, la replicación está en funcionamiento.
Desciende de nivel la instancia principal de una réplica externa
Cuando tienes una instancia de Cloud SQL con una réplica externa, puedes revertir la configuración, lo que genera los siguientes cambios:
La réplica externa pasa a ser la nueva instancia principal.
La instancia de Cloud SQL pasa a ser una réplica de lectura, que replicará desde el servidor que antes era la réplica externa (ahora llamado servidor de la base de datos de origen).
Para revertir la configuración de la réplica externa, sigue estos pasos:
Esta instancia representará al servidor de la base de datos de origen para la réplica de Cloud SQL luego de que se complete la operación de descenso de nivel.
Usa la región en la que quieres que resida tu réplica de Cloud SQL.
Inicia el proceso de descenso de nivel.
Debido a que esta llamada a la API requiere que brindes información sensible, usa un archivo JSON para proporcionar tus datos a cURL, en lugar de ingresarlos en la línea de comandos.
Para obtener más información sobre las opciones de SSL/TLS, consulta las opciones de SSL/TLS.
Para obtener más información sobre las propiedades que usó el objeto replicaConfiguration, consulta cómo replicar desde un servidor externo.
Espera a que la réplica externa complete todas las transacciones pendientes desde la instancia principal.
Cuando la réplica haya finalizado, el comando SHOW SLAVE STATUS mostrará 0 en Seconds Behind Master y el valor de Executed_Gtid_Set será idéntico entre la réplica externa y la instancia principal de Cloud SQL.
Usa el cliente mysql para detener la replicación en la réplica externa:
STOP SLAVE
RESET SLAVE ALL
Espera a que la instancia de Cloud SQL comience a replicar desde el servidor externo, que ahora es el servidor de la base de datos de origen.
Ejecutar el comando SHOW SLAVE STATUS en la instancia de Cloud SQL brinda el estado de la replicación.
Cuando la instancia de Cloud SQL replique de manera exitosa desde el servidor de la base de datos de origen, configura la marca read_only del servidor de la base de datos de origen como off y actualiza tus aplicaciones para que apunten al servidor de la base de datos de origen.
Solucionar problemas
Problema
Soluciona problemas
Mensaje de error: The slave is connecting ... master has purged
binary logs containing GTIDs that the slave requires.
La instancia principal de Cloud SQL tiene copias de seguridad automáticas y registros binarios, y está habilitada la recuperación de un momento determinado, por lo que debería tener suficientes registros para que la réplica pueda ponerse al día. Sin embargo, en este caso, a pesar de que existen los registros binarios, la réplica no sabe desde qué fila debe comenzar a leer.
Crea un nuevo archivo de volcado con la configuración correcta de la marca y configura la réplica externa con ese archivo
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-08-28 (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)."]]