Halaman ini menjelaskan cara mengonfigurasi instance Cloud SQL yang mereplikasi
satu atau beberapa replika di luar Cloud SQL, dan cara mendemosikan
instance utama di konfigurasi replika eksternal untuk membalik
konfigurasi.
Sebelum memulai tugas ini, Anda harus memiliki instance Cloud SQL dan
instance MySQL eksternal yang memenuhi persyaratan untuk replika
eksternal.
Persyaratan instance sumber
Instance sumber untuk replika baca eksternal harus berupa instance utama atau
mandiri. Anda tidak dapat menggunakan replika baca Cloud SQL sebagai instance sumber
untuk replika baca eksternal. Replika baca terkadang dibuat ulang dari clone disk instance utamanya dan status replikasinya ke replika baca eksternal tidak dapat dipertahankan oleh replika baca.
Catat alamat IP publik dan alamat IP publik keluar dari instance
utama untuk digunakan nanti. Anda dapat menemukan nilai ini di halaman
Overview instance.
Klik ikon Cloud Shell
di sudut kanan atas.
Pada layar perintah Cloud Shell, gunakan klien MySQL bawaan untuk
terhubung ke instance utama Anda:
Jika sudah memiliki database pada instance utama, Anda harus membuat
database yang sama pada replika. Untuk melakukannya, ekspor database dari instance utama
ke bucket Cloud Storage dan impor ke dalam replika. Pelajari cara
Mengekspor data dari Cloud SQL ke file dump SQL di Cloud Storage.
Mengonfigurasi replika eksternal
Peringatan: Prosedur ini menimpa data apa pun yang dihosting di database MySQL pada
replika, termasuk pengguna dan sandi, dengan setelan dan data dari
instance utama.
Di mesin yang menghosting replika, tambahkan instance MySQL eksternal baru Anda
bersama file ekspor yang dibuat dari instance utama.
Misalnya, perintah berikut memuat file yang diekspor bernama
mydump.sql:
mysql --user=root --password < mydump.sql
Tentukan ID server untuk pasangan replika-utama ini.
ID server adalah nilai numerik (misalnya, "3") yang harus unik
di seluruh konfigurasi replika eksternal
(setiap replika harus memiliki ID server yang unik).
Tambahkan opsi berikut ke opsi file my.cnf replika:
Mulai ulang proses mysqld agar file konfigurasi
terbaca.
Di klien mysql pada replika, masukkan perintah berikut:
CHANGE MASTER TO MASTER_HOST='MASTER_IP_ADDRESS', MASTER_USER='REPLICATION_USER',
MASTER_PASSWORD='REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1;
Mulai mereplikasi pada replika:
START SLAVE;
Konfirmasi status replikasi:
SHOW SLAVE STATUS\G;
Jika Anda melihat "Menunggu master untuk mengirim acara", replikasi berfungsi.
Mendemosikan instance utama replika eksternal
Jika Anda memiliki instance Cloud SQL dengan replika eksternal, Anda dapat
membalik konfigurasi, yang menyebabkan perubahan ini terjadi:
Replika eksternal menjadi instance utama baru.
Instance Cloud SQL menjadi replika baca, yang mereplikasi dari
server yang sebelumnya merupakan replika eksternal (sekarang disebut server
database sumber).
Gunakan region tempat Anda ingin menyimpan replika Cloud SQL.
Memulai proses demosi.
Karena panggilan API ini mengharuskan Anda memberikan informasi sensitif, Anda
harus
menggunakan file JSON
untuk memberikan data ke cURL, bukan pada command line.
Untuk informasi selengkapnya tentang opsi Anda untuk SSL/TLS, lihat
opsi SSL/TLS.
Untuk mengetahui informasi selengkapnya tentang properti yang digunakan oleh objek
replicaConfiguration, lihat
Mereplikasi dari Server Eksternal.
Tunggu replika eksternal menyelesaikan semua transaksi yang tertunda dari
instance utama.
Setelah replika tercapai, perintah SHOW SLAVE STATUS
akan menampilkan Seconds Behind Master sebagai 0, dan
nilai Executed_Gtid_Setakan sama antara
replika eksternal dan Cloud SQL utama.
Gunakan klien mysql untuk menghentikan replikasi pada replika eksternal:
STOP SLAVE
RESET SLAVE ALL
Tunggu hingga instance Cloud SQL mulai mereplikasi dari
server eksternal, yang sekarang menjadi server database sumber.
Menjalankan perintah SHOW SLAVE STATUS pada instance Cloud SQL
akan memberikan status replikasi.
Setelah instance Cloud SQL berhasil direplikasi dari
server database sumber, tetapkan flag read_only pada server
database sumber ke off dan update aplikasi Anda agar mengarah ke
database sumber server web.
Memecahkan masalah
Masalah
Pemecahan masalah
Pesan error: The slave is connecting ... master has purged
binary logs containing GTIDs that the slave requires.
Instance Cloud SQL utama memiliki pencadangan otomatis dan log biner,
serta pemulihan point-in-time diaktifkan, sehingga harus memiliki cukup log
agar replika dapat mengejar ketertinggalan. Namun, dalam kasus ini, meskipun
log biner ada, replika tidak tahu dari baris mana harus mulai membaca.
Buat file dump baru menggunakan setelan flag yang benar, dan konfigurasi
replika eksternal menggunakan file tersebut
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Sulit dipahami","hardToUnderstand","thumb-down"],["Informasi atau kode contoh salah","incorrectInformationOrSampleCode","thumb-down"],["Informasi/contoh yang saya butuhkan tidak ada","missingTheInformationSamplesINeed","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 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)."]]