Mereplikasi dari server eksternal (v1)

Halaman ini menjelaskan cara membuat konfigurasi yang mereplikasi data dari server database sumber ke replika MySQL.

Server database sumber dapat menjadi server MySQL apa pun yang memenuhi semua persyaratan server, termasuk instance Cloud SQL. Instance yang dihosting penyedia cloud lain juga dapat berfungsi sebagai sumber data, asalkan memenuhi persyaratan, termasuk mendukung GTID.

Untuk informasi selengkapnya tentang konfigurasi ini, lihat Tentang Mereplikasi dari Server Eksternal.

Sebelum memulai

Sebelum menyiapkan replikasi dari server eksternal, Anda harus menyelesaikan langkah-langkah berikut:

  • 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

  • Instal dan autentikasi gcloud CLI.
  • Pastikan server Anda memenuhi persyaratan untuk server database sumber.
  • Tentukan tingkat keamanan yang Anda perlukan untuk koneksi antara instance utama dan replika, dan dapatkan file sertifikat yang diperlukan.
  • Pilih region Google Cloud yang ingin digunakan untuk menampung replika Cloud SQL Anda.
  • Kumpulkan informasi yang diperlukan terkait server database sumber Anda:

    • Alamat IPv4 eksternal dan nomor port

      Secara default, MySQL menggunakan port 3306.

    • Akun pengguna dan sandi replikasi MySQL
    • Nomor versi MySQL
    • Lokasi semua sertifikat dan kunci SSL/TLS yang diperlukan, tergantung tingkat keamanan yang dipilih.
  • Bersiaplah untuk mengupdate firewall jaringan untuk server database sumber agar dapat menerima koneksi dari replika Cloud SQL.

    Langkah ini harus diselesaikan dalam waktu 30 menit setelah membuat replika.

  • Jika Anda bukan pemilik project, Anda harus memiliki peran Storage Admin.

Persyaratan untuk server database sumber

Sebelum Anda dapat mereplikasi dari server eksternal ke replika Cloud SQL, pastikan server database sumber memenuhi persyaratan konfigurasi berikut:

Proses konfigurasi

Untuk menyiapkan replikasi dari server database eksternal, lakukan langkah-langkah berikut:

  1. Buat bucket Cloud Storage untuk data Anda.
  2. Ekspor data Anda ke Cloud Storage.
  3. Siapkan konfigurasi replikasi.
  4. Konfigurasikan server database sumber agar dapat menerima koneksi dari replika.

  5. Batasi akses pengguna replikasi MySQL.

  6. Selesaikan konfigurasi replika.

  7. Konfirmasi status replikasi.

  8. Bersihkan penyimpanan Anda.

1. Buatlah bucket Cloud Storage untuk data Anda

Buatlah bucket untuk menangguhkan sementara data Anda selama proses ekspor, atau gunakan bucket yang sudah ada.

Untuk informasi selengkapnya tentang bucket, lihat Membuat Bucket Penyimpanan. Untuk informasi selengkapnya tentang peran Storage Admin, lihat Peran IAM Cloud Storage.

2. Ekspor data Anda ke Cloud Storage

Replika mencari datanya di Cloud Storage, sehingga Anda perlu menempatkan salinan data server di sana. Setelah ekspor selesai, Anda dapat terus menerima operasi tulis pada server Anda. Setelah selesai mengimpor file dump, replika akan mulai memproses semua perubahan sejak ekspor dilakukan dan akhirnya menyamai instance utama.

Dari mesin yang telah terinstal gcloud CLI dan terhubung ke server MySQL Anda, jalankan perintah berikut:

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);

Ganti [PROPERTIES_IN_BRACKETS] dengan nilai berikut:

Properti Nilai
[PRIMARY_INSTANCE_IP] Alamat IPv4 untuk server database sumber.
[PRIMARY_INSTANCE_PORT] Port untuk server database sumber.
[USERNAME] Akun pengguna replikasi MySQL.
[PASSWORD] Sandi untuk akun pengguna replikasi MySQL.
[DBS] Daftar semua database sumber yang dipisahkan oleh spasi, kecuali database sistem (sys, mysql, performance_schema, dan information_schema). Gunakan perintah MySQL SHOW DATABASES untuk menampilkan database.
[BUCKET] Nama bucket yang Anda buat untuk menyimpan file ekspor.
[PATH_TO_DUMP] Jalur ke file ekspor.

Jika Anda melihat peringatan terkait dump parsial dan GTID, itu adalah hal yang wajar.

Perintah ini mungkin terlihat seperti contoh berikut:

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. Buat konfigurasi replikasi

Jika replika menggunakan IP pribadi, server database sumber harus dikonfigurasi agar dapat diakses dari VPC replika. Pembuatan replika di VPC Pribadi hanya didukung melalui gcloud CLI dan Cloud SQL Admin API.

Konsol

Langkah ini akan membuat replika Cloud SQL dan instance representasi sumber.

  1. Buka daftar instance Cloud SQL di konsol Google Cloud.

    Buka daftar instance

  2. Klik Migrasikan data pada panel tombol untuk membuka Asisten Migrasi Cloud SQL.

  3. Klik Mulai migrasi.

  4. Di kolom Nama database sumber, berikan nama untuk konfigurasi replikasi di Cloud SQL.

    Nama ini merupakan referensi untuk konfigurasi, gunakan nama instance Cloud SQL apa pun yang valid.

  5. Masukkan alamat IP dan nomor port untuk server database sumber Anda.

  6. Cantumkan nama pengguna dan sandi untuk pengguna MySQL yang akan digunakan untuk koneksi replikasi.

  7. Pilih versi MySQL server database sumber Anda.

  8. Jika menggunakan SSL/TLS untuk koneksi antara replika dan server database sumber (disarankan), pilih Aktifkan keamanan SSL/TLS dan berikan informasi sertifikat SSL/TLS untuk server sumber Anda.

    Untuk informasi selengkapnya tentang opsi SSL/TLS, lihat opsi SSL/TLS.

  9. Klik Berikutnya, dan isi detail untuk replika Anda.

    Untuk memastikan impor berjalan seefisien mungkin, konfigurasikan replika dengan kapasitas penyimpanan yang cukup untuk menampung database. Atur jumlah inti dan memori agar serupa dengan server sumber.

  10. Berikan jalur ke file dump yang telah Anda upload ke Cloud Storage sebelumnya.

  11. Klik Buat untuk membuat replika.

  12. Klik Berikutnya.

gcloud

  1. Buat instance representasi sumber.

    gcloud beta sql instances create [REPLICA_NAME] \
        --region=[REGION] --database-version=[MYSQL_VERSION] \
        --source-ip-address=[SOURCE_IP] --source-port=[SOURCE_PORT]
    

    Jika replika menggunakan alamat IP pribadi, tambahkan juga: --network=[VPC_NETWORK_NAME]

    Ganti [PROPERTIES_IN_BRACKETS] dengan nilai berikut:

    Properti Nilai
    [SOURCE_REPRESENTATION_NAME] Nama instance representasi sumber. Gunakan nama instance Cloud SQL yang valid.
    [REGION] Region tempat Anda ingin menempatkan replika Cloud SQL.
    [MYSQL_VERSION] Versi MySQL yang berjalan di server database sumber Anda: MYSQL_5_6 atau MYSQL_5_7.
    [SOURCE_IP] Alamat IPv4 yang dapat diakses secara eksternal untuk server database sumber.
    [SOURCE_PORT] Port yang dapat diakses secara eksternal untuk server database sumber.
  2. Buat replika 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]
    

    Jika replika menggunakan alamat IP pribadi, tambahkan juga: --network=[VPC_NETWORK_NAME]

    Ganti [PROPERTIES_IN_BRACKETS] dengan nilai berikut:

    Properti Nilai
    [REPLICA_NAME] Nama replika baca Cloud SQL. Gunakan nama instance Cloud SQL yang valid.
    [SOURCE_REPRESENTATION_NAME] Nama instance representasi sumber yang Anda buat di langkah sebelumnya.
    [USERNAME] Akun pengguna replikasi MySQL di server database sumber.
    [BUCKET] Nama bucket yang Anda buat untuk menyimpan file ekspor.
    [PATH_TO_DUMP] Jalur ke file ekspor.
    [SOURCE_SERVER_CA_PATH] Jalur lokal tempat Sertifikat CA server database sumber disimpan. Hanya diperlukan untuk SSL/TLS.
    [CLIENT_CERT_PATH] Jalur lokal tempat sertifikat klien disimpan. Hanya diperlukan untuk autentikasi server-klien.
    [PRIVATE_KEY_PATH] Jalur lokal tempat file kunci pribadi untuk sertifikat klien disimpan. Hanya diperlukan untuk autentikasi server-klien.
    [MACHINE_TYPE] Ukuran replika Anda. Umumnya, ukuran replika hampir sama dengan ukuran server database sumber. Jika Anda tidak yakin dengan jenis mesin yang akan digunakan, mulailah dengan db-custom-2-7680. Anda dapat mengubah ukurannya nanti jika diperlukan.
    [DISK_SIZE] Ukuran penyimpanan untuk replika diukur dalam GB. Untuk performa terbaik, buat replika dengan penyimpanan yang cukup untuk menampung seluruh file impor.
    [VPC_NETWORK_NAME] VPC dalam format: projects/[PROJECT_ID]/global/networks/[NETWORK_NAME]

cURL

1. Buat instance representasi sumber 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

Ganti [PROPERTIES_IN_BRACKETS] dengan nilai berikut:

Properti Nilai
[SOURCE_REPRESENTATION_NAME] Nama instance representasi sumber. Gunakan nama instance Cloud SQL yang valid.
[REGION] Region tempat Anda ingin menempatkan replika Cloud SQL.
[MYSQL_VERSION] Versi MySQL yang berjalan di server database sumber Anda: MYSQL_5_6 atau MYSQL_5_7.
[SOURCE_SERVER_IP] Alamat IPv4 yang dapat diakses secara eksternal untuk server database sumber.
[SOURCE_SERVER_PORT] Port yang dapat diakses secara eksternal untuk server database sumber.
[PROJECT_ID] Project ID untuk project Google Cloud Anda.

Misalnya, untuk membuat instance representasi sumber bernama hq-primary1, pada server database sumber dengan alamat IP 192.0.2.0 yang terbuka pada port 3306 dan menjalankan MySQL 5.7, untuk replika Cloud SQL dalam project MyProject dan region us-central1, gunakan perintah berikut:

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. Buat replika Cloud SQL

Pada langkah ini, Anda akan membuat replika baca Cloud SQL menggunakan server representasi sumber untuk mewakili server database sumber, serta menyediakan replika dengan data yang telah dimuat ke Cloud Storage pada langkah sebelumnya.

Karena panggilan API ini mengharuskan Anda memberikan informasi sensitif, gunakan file JSON untuk memberikan data ke cURL, daripada memberikan data melalui command line.

Buat file data:

{
    "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]"
}

Jika replika menggunakan alamat IP pribadi, tambahkan ke setelan: "ipConfiguration.privateNetwork" dengan nilai: "projects/[PROJECT_ID]/global/networks/[NETWORK_NAME]"

Ganti [PROPERTIES_IN_BRACKETS] dengan nilai berikut:

Properti Nilai
[USERNAME] Akun pengguna replikasi MySQL di server database sumber.
[PASSWORD] Sandi untuk akun pengguna replikasi MySQL.
[BUCKET] Nama bucket yang Anda buat untuk menyimpan file ekspor.
[PATH_TO_DUMP] Jalur ke file ekspor.
[SOURCE_SERVER_CA] Sertifikat CA server database sumber. Hanya diperlukan untuk SSL/TLS. Tempelkan sertifikat ke dalam isi permintaan.
[CLIENT_CERT] Sertifikat klien. Hanya diperlukan untuk autentikasi server-klien. Tempelkan sertifikat ke dalam isi permintaan.
[PRIVATE_KEY] File kunci pribadi untuk sertifikat klien. Hanya diperlukan untuk autentikasi server-klien. Tempelkan kunci ke dalam isi permintaan.
[MACHINE_TYPE] Ukuran replika Anda. Umumnya, ukuran replika hampir sama dengan ukuran server database sumber. Jika Anda tidak yakin dengan jenis mesin yang akan digunakan, mulailah dengan db-custom-2-7680. Anda dapat mengubah ukurannya nanti jika diperlukan.
[DISK_SIZE] Ukuran penyimpanan untuk replika diukur dalam GB. Untuk performa terbaik, buat replika dengan penyimpanan yang cukup untuk menampung seluruh impor.
[SOURCE_REPRESENTATION_NAME] Nama instance representasi sumber yang Anda buat sebelumnya.
[REGION] Region tempat Anda membuat instance representasi sumber. Replika baca harus berada di region yang sama dengan instance representasi sumber.
[MYSQL_VERSION] Versi MySQL yang berjalan di server database sumber Anda: MYSQL_5_6 atau MYSQL_5_7.
[REPLICA_NAME] Nama replika baca Cloud SQL. Gunakan nama instance Cloud SQL yang valid.

Pada command line, panggil 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

Untuk instance representasi sumber dan bucket yang telah dibuat sebelumnya, file data, data.json, mungkin terlihat seperti contoh berikut:

{
    "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"
}

Perintah cURL akan terlihat seperti berikut:

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

Saat replika baca dapat mengakses file dump, proses impor akan dimulai. Durasi proses impor bergantung pada ukuran file dump, jenis mesin, dan skema database. Sebagai panduan umum untuk estimasi, perkirakan replika dapat mengimpor sekitar 25-50 GB per jam.

Replika tetap dalam status PENDING_CREATE sampai proses impor selesai; setelah itu, replika akan berubah ke status RUNNABLE.

4. Konfigurasikan server database sumber agar dapat menerima koneksi dari replika

Replika harus terhubung ke server database sumber agar replikasi berhasil. Jika server database sumber berada di belakang firewall atau batasan jaringan lainnya, Anda harus mengaktifkan akses jaringan untuk replika menggunakan alamat IP OUTGOING replika. Perhatikan bahwa ini bukan alamat IP yang ditampilkan di listingan utama untuk replika di konsol Google Cloud. Anda dapat mengambil alamat IP OUTGOING dengan mengarahkan kursor ke Info selengkapnya untuk alamat IP, atau menggunakan perintah gcloud berikut.

  1. Ambil alamat IP replika baca:

    gcloud sql instances describe [REPLICA_NAME] --format="default(ipAddresses)"
  2. Jika perlu, konfigurasikan firewall jaringan agar server database sumber dapat menerima koneksi dari alamat IP OUTGOING.
  3. Pastikan replika telah berhasil terhubung ke server database sumber.

    1. Ikon replika di halaman listingan instance tidak lagi berputar dan berwarna hijau.
    2. Buka Logs Viewer di Konsol Google Cloud.

      Buka Logs Viewer

    3. Pilih replika dari dropdown Instance.
    4. Pilih file log replication-setup.log.

      Jika replika tidak dapat terhubung ke server database sumber, pastikan hal-hal berikut:

      • Firewall pada server database sumber dikonfigurasi untuk mengizinkan koneksi dari alamat IP OUTGOING replika.
      • Konfigurasi SSL/TLS Anda sudah benar.
      • Pengguna, host, dan sandi replikasi Anda sudah benar.

5. Batasi akses pengguna replikasi MySQL

Langkah ini bersifat opsional, tetapi direkomendasikan demi keamanan.

Pengguna replikasi MySQL di server database sumber dikonfigurasi untuk menerima koneksi dari host mana pun (%). Update akun pengguna tersebut untuk menerima koneksi hanya dari alamat IP OUTGOING replika:

    UPDATE mysql.user SET Host='[OUTGOING_IP]' WHERE Host='%' AND User='[USERNAME]';
    FLUSH PRIVILEGES;

6. Selesaikan konfigurasi replika

  1. Konfigurasikan akun pengguna pada replika.

    Anda dapat melakukannya dengan menggunakan konsol Google Cloud, alat gcloud CLI, atau Cloud SQL API. Namun, Anda tidak dapat menggunakan klien mysql. Untuk mengetahui informasi selengkapnya tentang pengguna MySQL, lihat pengguna MySQL.

    Untuk membuat pengguna menggunakan konsol Google Cloud:

    1. Buka halaman Instance Cloud SQL di konsol Google Cloud.
      Buka halaman Instance Cloud SQL
    2. Klik nama instance untuk membuka halaman Detail instance.
    3. Pilih tab Pengguna.
    4. Klik Buat akun pengguna.
    5. Pada dialog Buat akun pengguna, tentukan detail pengguna Anda.
    6. Klik Buat.
  2. Izinkan akses ke replika dari klien mana pun yang ingin Anda gunakan untuk terhubung ke replika menggunakan alamat IP publik.

    Untuk mengetahui petunjuknya, lihat Menambahkan alamat IP atau rentang alamat IP yang diizinkan. Agar terhubung ke replika, gunakan alamat IP PRIMARY replika. Alamat IP ini ditampilkan di konsol Google Cloud

    Atau, Anda dapat menggunakan metode koneksi lain untuk terhubung ke replika.

7. Konfirmasi status replikasi

Setelah selesai mengimpor file dump, replika akan terhubung ke server lokal dan menerapkan semua update yang telah dilakukan setelah proses ekspor.

Penting untuk memeriksa status replikasi sebelum mempromosikan replika ke instance independen. Jika proses replikasi belum selesai dan gagal, maka replika yang dipromosikan tidak memiliki semua perubahan pada instance eksternal Anda.

8. (Opsional) Promosikan replika ke instance independen

Setelah memeriksa status replikasi, jika Anda ingin sepenuhnya mengganti ('migrasi') server database sumber dengan Cloud SQL, promosikan replika menjadi instance utama yang independen. Setelah menjadi instance utama, replika tidak lagi terhubung ke server database sumber asli.

Buat replika baru untuk instance utama baru, dan mulai ulang aplikasi yang terhubung untuk menunjuk instance utama baru (untuk operasi tulis) atau replika baru (untuk operasi baca).

9. Bersihkan penyimpanan Anda

  1. Hapus file ekspor:

    gcloud storage rm gs://[BUCKET]/[PATH_TO_DUMP]
    
  2. Jika Anda tidak lagi memerlukan bucket, hapus bucket:

    gcloud storage rm gs://[BUCKET] --recursive
    

Untuk informasi selengkapnya, lihat dokumentasi Cloud Storage untuk Menghapus Objek dan Menghapus Bucket.

Memperbarui konfigurasi

Untuk memperbarui setelan konfigurasi nanti, Anda dapat mengedit instance representasi sumber. Jika perlu memperbarui setelan konfigurasi lokal, perhatikan bahwa hostPort dan type tidak dapat diupdate.

Langkah berikutnya