Menggunakan file dump untuk menyiapkan replikasi dari database eksternal

Halaman ini menjelaskan proses untuk menyiapkan replikasi jika Anda memiliki file dump yang dibuat dari server eksternal.

Anda harus menyelesaikan semua langkah di halaman ini. Setelah selesai, Anda dapat mengelola dan memantau instance representasi sumber dengan cara yang sama seperti yang Anda lakukan pada instance Cloud SQL lainnya.

Sebelum memulai

Sebelum memulai, Anda harus mengonfigurasi server eksternal, membuat instance representasi sumber, dan menyiapkan replika Cloud SQL.

Memperbarui izin untuk pengguna replikasi

Pengguna replikasi di server eksternal dikonfigurasi untuk menerima koneksi dari host mana pun (%). Anda harus memperbarui akun pengguna ini agar akun ini hanya dapat digunakan dengan replika Cloud SQL. Buka terminal di server eksternal, lalu masukkan perintah ini:

Klien mysql

    UPDATE mysql.user
      SET Host='NEW_HOST'
      WHERE Host='OLD_HOST'
      AND User='USERNAME';
      GRANT REPLICATION SLAVE, EXECUTE
      ON *.* TO 'GCP_USERNAME'@'HOST';
    FLUSH PRIVILEGES;

contoh

    UPDATE mysql.user
      SET Host='192.0.2.0'
      WHERE Host='%'
      AND User='replicationUser';
      GRANT REPLICATION SLAVE, EXECUTE
      ON *.* TO 'gcp_user'@'gmail.com';
    FLUSH PRIVILEGES;
Properti Deskripsi
NEW_HOST Menentukan IP keluar dari replika Cloud SQL.
OLD_HOST Nilai saat ini yang ditetapkan ke Host yang ingin Anda ubah.
USERNAME Akun pengguna replikasi di server eksternal.
GCP_USERNAME Nama pengguna untuk akun pengguna Google Cloud Platform (GCP).
HOST Nama host untuk akun pengguna Google Cloud Platform (GCP).

Memverifikasi setelan replikasi Anda

Setelah penyiapan selesai, pastikan replika Cloud SQL dapat direplikasi dari server eksternal.

Pertama, pastikan setelan sinkronisasi eksternal Anda sudah benar. Untuk melakukannya, gunakan perintah di bawah ini untuk memverifikasi:

  • Konektivitas replika Cloud SQL dengan server eksternal
  • Hak istimewa pengguna replikasi
  • Kompatibilitas versi
  • Replika Cloud SQL belum direplikasi
  • Binlog diaktifkan di server eksternal
  • ID transaksi global (GTID) diaktifkan

Buka terminal, lalu masukkan perintah ini untuk memverifikasi bahwa setelan sinkronisasi eksternal sudah benar:

curl

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "SYNC_MODE",
         "skipVerification": "SKIP_VERIFICATION"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/verifyExternalSyncSettings

contoh

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "online",
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings
Properti Deskripsi
SYNC_MODE verifyExternalSyncSettings memverifikasi bahwa Anda dapat menjaga replika Cloud SQL dan server eksternal tetap sinkron setelah replikasi disiapkan. Mode sinkronisasi mencakup EXTERNAL_SYNC_MODE_UNSPECIFIED, ONLINE, dan OFFLINE.
SKIP_VERIFICATION Jika Anda akan melewati langkah verifikasi bawaan sebelum menyinkronkan data. Hanya direkomendasikan jika Anda sudah memverifikasi setelan replikasi.
PROJECT_ID ID project Anda di Google Cloud.
REPLICA_INSTANCE ID replika Cloud SQL Anda.

Mengekspor database ke bucket Cloud Storage

Anda dapat mengisi replika Cloud SQL dengan file mysqldump yang berada di bucket Cloud Storage. Ketentuan berikut berlaku:

  • Anda harus menggunakan utilitas mysqldump yang dipaketkan dengan MySQL.
  • Saat mysqldump sedang berjalan, jangan jalankan operasi DDL apa pun di server eksternal. Jika Anda melakukannya, file ekspor akan mengalami inkonsistensi.

Untuk mengekspor database ke bucket Cloud Storage, ikuti langkah-langkah berikut:

  1. Di Google Cloud, buat bucket Cloud Storage.
  2. Buka terminal menggunakan klien yang terhubung ke server database eksternal, lalu jalankan perintah berikut.

mysqldump

    mysqldump \
        --host=EXTERNAL_HOST \
        --port=EXTERNAL_PORT \
        --user=USERNAME\
        --password=PASSWORD \
        --databases=DATABASE_LIST  \
        --hex-blob \
        SOURCE_DATA  \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --single-transaction \
        --set-gtid-purged=on \
        ADD_DROP_TABLE \
        ROUTINES \
        COMPRESS \
        GZIP \
        | gsutil cp - gs://BUCKET/DUMP_FILENAME

contoh

    mysqldump \
        --host=192.0.2.1 \
        --port=3306 \
        --user=replicationUser \
        --password \
        --databases guestbook journal \
        --hex-blob \
        --master-data=1 \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --single-transaction \
        --compress \
        | gzip \
        | gsutil cp - gs://replica-bucket/external-database.sql.gz
Properti Deskripsi
EXTERNAL_HOST Alamat IPv4 atau DNS untuk server eksternal.
EXTERNAL_PORT Port untuk server eksternal. Jika server eksternal dihosting di Cloud SQL, maka ini adalah 3306.
USERNAME Nama akun pengguna replikasi atau akun pengguna di server eksternal yang memiliki izin baca database.
PASSWORD Sandi pengguna replikasi.
DATABASE_LIST Daftar yang dipisahkan spasi dari semua database di server eksternal, kecuali untuk database sistem (sys, mysql, performance_schema, dan information_schema). Gunakan perintah MySQL SHOW DATABASES untuk menampilkan database.
SOURCE_DATA Jika Anda menggunakan versi MySQL yang lebih lama dari versi 8.0.26, gunakan --master-data sebagai nilai untuk parameter ini. Untuk versi MySQL 8.0.26 atau versi yang lebih tinggi, tetapkan nilai parameter ini ke --source-data.
ADD_DROP_TABLE Jika Anda ingin menambahkan pernyataan DROP TABLE sebelum setiap pernyataan CREATE TABLE, sertakan --add-drop-table.
ROUTINES Jika Anda ingin menampilkan rutinitas yang tersimpan, seperti prosedur dan fungsi dalam output untuk database yang dibuang, sertakan --routines.
COMPRESS Jika Anda ingin mengompresi semua informasi yang dikirim antara replika Cloud SQL dan server eksternal, gunakan --compress.
GZIP Jika ingin mengompresi file dump lebih banyak lagi, gunakan | gzip. Jika database Anda berisi data yang tidak dikompresi dengan baik, seperti data biner yang tidak dapat dikompresi atau gambar JPG, jangan gunakan perintah ini.
BUCKET Nama bucket yang dibuat di Langkah 1 agar berisi file dump.
DUMP_FILENAME File dengan nama ini dibuat di bucket Anda. File ini berisi konten database di server eksternal Anda.

Mengupdate instance representasi sumber dengan jalur file bucket Cloud Storage

Instance representasi sumber adalah instance Cloud SQL yang merepresentasikan server database sumber ke replika Cloud SQL. Instance ini terlihat di konsol Google Cloud dan tampak sama seperti instance Cloud SQL biasa, tetapi tidak berisi data, tidak memerlukan konfigurasi atau pemeliharaan, serta tidak memengaruhi penagihan.

File source.json berisi informasi tentang instance representasi sumber.

REST

{
  "name": "PRIMARY_INSTANCE_NAME",
  "region": "REGION_NAME",
  "databaseVersion": "DB_NAME_AND_VERSION",
  "onPremisesConfiguration": {
    "hostPort": "IP_ADDRESS_AND_PORT",
    "username": "USERNAME",
    "password": "PASSWORD"
  }
  "dumpFilePath" :"DUMP_FILE_PATH"
}

contoh

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  }
  "dumpFilePath" :"gs://replica-bucket/source-database.sql.gz"
}
Properti Deskripsi
PRIMARY_INSTANCE_NAME Nama instance Cloud SQL yang terkait dengan instance representasi sumber.
REGION_NAME Nama region yang ditetapkan ke instance representasi sumber.
DB_NAME_AND_VERSION Nama dan nomor versi database yang terkait dengan instance representasi sumber.
IP_ADDRESS_AND_PORT Alamat IP dan nomor port yang dicadangkan untuk instance representasi sumber.
USERNAME Nama pengguna dari instance representasi sumber.
PASSWORD Sandi instance representasi sumber.
DUMP_FILE_PATH Jalur file dump yang berisi konten database di server eksternal.

Setelah menyiapkan replika Cloud SQL, Anda perlu mengupdate instance representasi sumber dengan jalur file bucket Cloud Storage.

REST

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @JSON_PATH \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/SOURCE_REPRESENTATION_INSTANCE

contoh

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @./source.json \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
Properti Deskripsi
JSON_PATH Jalur file JSON yang disimpan di bucket Cloud Storage. File ini berisi data tentang instance representasi sumber.
PROJECT_ID ID project Anda di Google Cloud.
SOURCE_REPRESENTATION_INSTANCE Nama instance representasi sumber.

Memulai replikasi di server eksternal

Setelah memverifikasi bahwa Anda dapat melakukan replikasi dari server eksternal, Anda siap untuk melakukan replikasi.

Selama proses impor awal, jangan jalankan operasi DDL apa pun di server eksternal. Hal tersebut dapat menyebabkan inkonsistensi selama proses impor. Setelah proses impor selesai, replika menggunakan log biner di server eksternal untuk mengikuti status server eksternal saat ini.

Buka terminal, login menggunakan gcloud, lalu masukkan perintah curl untuk melakukan replikasi dari server eksternal.

REST

  gcloud auth login
  ACCESS_TOKEN="$(gcloud auth print-access-token)"
  curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
       --header 'Content-Type: application/json' \
       --data '{
           "syncMode": "SYNC_MODE",
           "skipVerification": "SKIP_VERIFICATION"
         }' \
       -X POST \
       https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/startExternalSync

contoh

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{
             "syncMode": "online",
             "skipVerification": false
           }' \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
Properti Deskripsi
SYNC_MODE Memverifikasi bahwa Anda dapat menjaga replika Cloud SQL dan server eksternal tetap sinkron setelah replikasi disiapkan.
SKIP_VERIFICATION Apakah Anda akan melewati langkah verifikasi bawaan atau tidak sebelum menyinkronkan data. Hanya direkomendasikan jika Anda sudah memverifikasi setelan replikasi.
PROJECT_ID ID project Anda di Google Cloud.
REPLICA_INSTANCE ID replika Cloud SQL Anda.

Mengosongkan ruang penyimpanan

Jika Anda melakukan replikasi file dalam bucket, Anda dapat menghapus file dan bucket ini. Lihat dokumentasi Cloud Storage untuk Menghapus Objek dan Menghapus Bucket.

Melanjutkan dengan replikasi

Setelah memulai replikasi dari server eksternal, Anda harus memantau replikasi, lalu menyelesaikan migrasi. Untuk mempelajari lebih lanjut, lihat Memantau replikasi.

Memecahkan masalah

Masalah Pemecahan masalah
Lost connection to MySQL server during query when dumping table. Sumbernya mungkin tidak tersedia, atau file dump berisi paket yang terlalu besar.

Pastikan kabel primer eksternal tersedia untuk terhubung. Anda juga dapat mengubah nilai tanda net_read_timeout dan net_write_timeout pada instance sumber untuk menghentikan error. Untuk informasi selengkapnya tentang nilai yang diizinkan untuk tanda ini, lihat Mengonfigurasi tanda database.

Untuk mempelajari lebih lanjut cara menggunakan tanda mysqldump untuk migrasi impor terkelola, lihat Tanda sinkronisasi awal yang diizinkan dan default

Migrasi data awal berhasil, tetapi tidak ada data yang direplikasi. Salah satu kemungkinan penyebabnya adalah database sumber Anda telah menentukan flag replikasi yang menyebabkan beberapa atau semua perubahan database tidak direplikasi.

Pastikan tanda replikasi seperti binlog-do-db, binlog-ignore-db, replicate-do-db, atau replicate-ignore-db tidak ditetapkan dengan cara yang bertentangan.

Jalankan perintah show master status pada instance utama untuk melihat setelan saat ini.

Migrasi data awal berhasil tetapi replikasi data berhenti berfungsi setelah beberapa saat. Hal-hal yang sebaiknya dicoba:

  • Periksa metrik replikasi untuk instance replika Anda di bagian Cloud Monitoring pada konsol Google Cloud.
  • Error dari thread IO MySQL atau thread SQL dapat ditemukan di Cloud Logging dalam file mysql.err log.
  • Error ini juga dapat ditemukan saat menghubungkan ke instance replika. Jalankan perintah SHOW SLAVE STATUS, dan periksa kolom berikut dalam output:
    • Slave_IO_Running
    • Slave_SQL_Running
    • Last_IO_Error
    • Last_SQL_Error
mysqld check failed: data disk is full. Disk data instance replika penuh.

Tingkatkan ukuran disk instance replika. Anda dapat meningkatkan ukuran disk secara manual atau mengaktifkan peningkatan penyimpanan otomatis.

Meninjau log replikasi Anda

Saat Anda memverifikasi setelan replikasi, log akan dihasilkan.

Anda dapat melihat log ini dengan mengikuti langkah-langkah berikut:

  1. Buka Logs Viewer di konsol Google Cloud.

    Buka Logs Viewer

  2. Pilih replika Cloud SQL dari dropdown Instance.
  3. Pilih file log replication-setup.log.

Jika replika Cloud SQL tidak dapat terhubung ke server eksternal, konfirmasi hal berikut:

  • Setiap firewall di server eksternal akan dikonfigurasi untuk mengizinkan koneksi dari alamat IP keluar replika Cloud SQL.
  • Konfigurasi SSL/TLS Anda sudah benar.
  • Pengguna, host, dan sandi replikasi Anda sudah benar.

Langkah selanjutnya