Mengonfigurasi replika eksternal

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.

Untuk mengetahui informasi selengkapnya tentang konfigurasi replika eksternal, lihat Tentang replikasi eksternal.

Menyiapkan konfigurasi replika eksternal

Sebelum memulai

Sebelum memulai tugas ini, Anda harus memiliki instance Cloud SQL dan instance MySQL eksternal yang memenuhi persyaratan untuk replika eksternal.

Mengonfigurasi instance utama

  1. Buka halaman Instance Cloud SQL di konsol Google Cloud.
  2. Aktifkan akses pada instance utama untuk alamat IP replika eksternal.

    Untuk informasi tentang cara mengaktifkan akses IP, lihat Mengonfigurasi akses untuk koneksi IP.

  3. Catat alamat IP publik dan alamat IP publik keluar dari instance utama untuk digunakan nanti. Anda dapat menemukan nilai ini di halaman Overview instance.
  4. Klik ikon Cloud Shell di sudut kanan atas.
  5. Pada layar perintah Cloud Shell, gunakan klien MySQL bawaan untuk terhubung ke instance utama Anda:
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=root
       
       
  6. Masukkan sandi root Anda. Anda kemudian akan melihat perintah mysql.
  7. Membuat pengguna khusus untuk replikasi dan memberikan hak istimewa replikasi:
    CREATE USER 'REPLICATION_USER'@'%' IDENTIFIED BY 'REPLICATION_USER_PASSWORD';
    GRANT REPLICATION SLAVE ON *.* TO 'REPLICATION_USER'@'%';
       
  8. Jika Anda memulai dengan database baru, buat database dan tabel yang sama pada instance utama dan replika. Contoh:
    CREATE DATABASE test;
    
    USE test;
    
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
  9. 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.
  1. 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
    
  2. 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).

  3. Tambahkan opsi berikut ke opsi file my.cnf replika:
    [mysqld]
    server-id=[SERVER_ID]
    gtid_mode=ON
    enforce_gtid_consistency=ON
    log_slave_updates=ON
    replicate-ignore-db=mysql
    binlog-format=ROW
    log_bin=mysql-bin
    expire_logs_days=1
    read_only=ON
    

    Untuk mengetahui informasi lebih lanjut mengenai opsi replikasi MySQL, lihat Opsi Replikasi dan Logging Biner.

  4. Mulai ulang proses mysqld agar file konfigurasi terbaca.
  5. 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;
    
  6. Mulai mereplikasi pada replika:
    START SLAVE;
    
  7. 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).

Untuk membalik konfigurasi replika eksternal:

  1. Buat instance representasi sumber.

    Instance ini akan mewakili server database sumber ke replika Cloud SQL setelah operasi demosi selesai.

    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": "EXTERNAL_SERVER_DATABASE_VERSION",
             "onPremisesConfiguration": {
                 "hostPort": "EXTERNAL_SERVER_IP:EXTERNAL_SERVER_PORT"
             }
         }' \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
    

    Gunakan region tempat Anda ingin menyimpan replika Cloud SQL.

  2. 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.

    Membuat file data:

    {
        "demoteMasterContext": {
            "replicaConfiguration": {
                "mysqlReplicaConfiguration": {
                    "username": "REPLICATION_USERNAME",
                    "password": "PASSWORD",
                    "caCertificate": "EXTERNAL_SERVER_CA",
                    "clientCertificate": "CLIENT_CERT",
                    "clientKey": "PRIVATE_KEY"
                }
            },
            "masterInstanceName": "SOURCE_REPRESENTATION_NAME",
        },
    }
    

    Kemudian, panggil API.

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @PATH_TO_DATA_FILE \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_NAME/demoteMaster
    

    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.

  3. 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.

  4. Gunakan klien mysql untuk menghentikan replikasi pada replika eksternal:

    STOP SLAVE
    RESET SLAVE ALL
    
  5. 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.

  6. 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

  1. Hubungkan ke klien mysql Anda melalui instance Compute Engine.
  2. Jalankan mysqldump lalu gunakan flag --master-data=1 dan --flush-privileges.

    Penting: Jangan sertakan flag --set-gtid-purged=OFF.

    Pelajari lebih lanjut.

  3. Pastikan file dump yang baru saja dibuat berisi baris SET @@GLOBAL.GTID_PURGED='...'.
  4. Upload file dump ke bucket Cloud Storage dan konfigurasi replika menggunakan file dump.

Langkah berikutnya