Halaman ini menjelaskan cara menyiapkan dan menggunakan impor terkelola untuk data saat mereplikasi dari server eksternal ke Cloud SQL.
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 Anda memulai, selesaikan langkah-langkah berikut:
Memperbarui hak istimewa untuk pengguna replikasi
Pengguna replikasi di server eksternal dikonfigurasi untuk
menerima koneksi dari host mana pun (%
). Update akun pengguna ini
agar hanya dapat digunakan dengan replika Cloud SQL.
Hak istimewa yang diperlukan
Ada empat jenis kombinasi migrasi dan dump.
- Jenis 1: Migrasi berkelanjutan dan dump terkelola
- Jenis 2: Migrasi berkelanjutan dan dump manual
- Jenis 3: Migrasi satu kali dan dump terkelola
- Jenis 4: Migrasi satu kali dan dump manual
Hak istimewa untuk setiap jenis kombinasi migrasi dan dumb tercantum di bawah ini.
Jenis 1
Akun pengguna harus memiliki hak istimewa berikut:
- SLAVE REPLIKASI
- JALANKAN
- SELECT
- TAMPILKAN TAMPILAN
- KLIEN REPLIKASI
- MUAT ULANG
- PEMICU
- (Khusus untuk migrasi dari Amazon RDS dan Amazon Aurora) KUNCI TABEL
Untuk MySQL versi 8.0 dan yang lebih baru, sebaiknya lewati hak istimewa BACKUP ADMIN
untuk performa yang optimal.
Jenis 2
Akun pengguna harus memiliki hak istimewa berikut:
Jenis 3
Akun pengguna harus memiliki hak istimewa berikut:
- SELECT
- TAMPILKAN TAMPILAN
- PEMICU
- (Dari bermigrasi dari sumber dengan setelan
GTID_MODE = ON
saja) MUAT ULANG
Untuk MySQL versi 8.0 dan yang lebih baru, sebaiknya lewati hak istimewa BACKUP ADMIN
untuk performa yang optimal.
Jenis 4
Tidak ada hak istimewa yang diperlukan.
Perbarui hak istimewa
Untuk memperbarui hak istimewa, buka terminal di server eksternal dan masukkan perintah berikut.
Klien mysql
Untuk GTID:
UPDATE mysql.user SET Host='NEW_HOST' WHERE Host='OLD_HOST' AND User='USERNAME'; GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW, REPLICATION_CLIENT, RELOAD ON . TO 'USERNAME'@'HOST'; FLUSH PRIVILEGES;
Untuk binlog:
UPDATE mysql.user SET Host='NEW_HOST' WHERE Host='OLD_HOST' AND User='USERNAME'; GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW, REPLICATION CLIENT, RELOAD 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, SELECT, SHOW VIEW, REPLICATION CLIENT,
RELOAD ON *.* TO 'username'@'host.com';
FLUSH PRIVILEGES;
Properti | Deskripsi |
---|---|
NEW_HOST | Tentukan 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. |
HOST | Nama host untuk akun pengguna. |
Memverifikasi setelan replikasi Anda
Setelah penyiapan selesai, pastikan replika Cloud SQL dapat direplikasi dari server eksternal.
Setelan sinkronisasi eksternal berikut harus benar.
- Konektivitas antara replika Cloud SQL dan server eksternal
- Hak istimewa pengguna replikasi
- Kompatibilitas versi
- Replika Cloud SQL belum direplikasi
- Binlog diaktifkan di server eksternal
- GTID diaktifkan jika Anda mencoba melakukan sinkronisasi eksternal dari server eksternal RDS dan menggunakan bucket Google Cloud
Untuk memverifikasi setelan ini, buka terminal Cloud Shell dan masukkan perintah berikut:
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",
"syncParallelLevel": "SYNC_PARALLEL_LEVEL",
"mysqlSyncConfig": {
"initialSyncFlags": "SYNC_FLAGS"
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/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",
"syncParallelLevel": "optimal"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings
contoh dengan tanda sinkronisasi
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
"syncParallelLevel": "optimal"
"mysqlSyncConfig": {
"initialSyncFlags": [{"name": "max-allowed-packet", "value": "1073741824"}, {"name": "hex-blob"}, {"name": "compress"}]
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/verifyExternalSyncSettings
Panggilan ini menampilkan daftar jenis sql#externalSyncSettingErrorList
.
Jika daftar kosong, tidak ada error. Respons tanpa error akan muncul seperti ini:
{ "kind": "sql#externalSyncSettingErrorList" }
Properti | Deskripsi |
---|---|
SYNC_MODE | Memastikan Anda dapat terus menyinkronkan replika Cloud SQL dan server eksternal
setelah replikasi disiapkan. Mode sinkronisasi mencakup EXTERNAL_SYNC_MODE_UNSPECIFIED , ONLINE , dan OFFLINE . |
SYNC_PARALLEL_LEVEL | Verifikasi setelan yang mengontrol kecepatan transfer data dari tabel database. Nilai berikut ini tersedia:
Catatan: Nilai default untuk parameter ini adalah |
SYNC_FLAGS | Daftar tanda sinkronisasi awal untuk diverifikasi. Hanya direkomendasikan jika Anda berencana menggunakan tanda sinkronisasi kustom saat melakukan replikasi dari sumber. Untuk mengetahui daftar tanda yang diizinkan, lihat Flag sinkronisasi awal. |
PROJECT_ID | ID project Google Cloud Anda. |
REPLICA_INSTANCE_ID | ID replika Cloud SQL Anda. |
Izin kunci baca global
Jika Anda tidak memiliki izin untuk mengakses kunci baca global di server eksternal, seperti yang mungkin terjadi pada Amazon RDS dan Amazon Aurora, jeda penulisan ke server Anda seperti yang dijelaskan dalam langkah-langkah berikut:
- Buka Logs Explorer, lalu pilih replika Cloud SQL Anda dari daftar resource. Anda akan melihat daftar log terbaru untuk replika Cloud SQL Anda. Abaikan untuk saat ini.
- Buka terminal dan masukkan perintah di Mulai replikasi pada server eksternal untuk mereplikasi dari server eksternal.
Kembali ke Logs Explorer. Ketika Anda melihat log sebagai berikut, hentikan penulisan ke database di server eksternal Anda. Dalam kebanyakan kasus, ini hanya diperlukan selama beberapa detik.
DUMP_IMPORT(START): Start importing data, please pause any write to the external primary database.
Ketika Anda melihat entri log berikut di Logs Explorer, aktifkan kembali penulisan ke database pada server eksternal Anda.
DUMP_IMPORT(SYNC): Consistent state on primary and replica. Writes to the external primary may resume.
Memulai replikasi pada server eksternal
Setelah memverifikasi bahwa Anda dapat mereplikasi dari server eksternal, mulai replikasi. Kecepatan untuk melakukan replikasi untuk proses impor awal adalah hingga 500 GB per jam. Namun, kecepatan ini dapat bervariasi berdasarkan tingkat mesin, ukuran disk data, throughput jaringan, dan sifat database Anda.
Selama proses impor awal, jangan lakukan operasi DDL pada server eksternal. Hal tersebut dapat menyebabkan inkonsistensi selama proses impor. Setelah proses impor selesai, replika menggunakan log biner pada server eksternal untuk mengikuti status server eksternal saat ini.
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",
"syncParallelLevel": "SYNC_PARALLEL_LEVEL",
"mysqlSyncConfig": {
"initialSyncFlags": "SYNC_FLAGS"
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/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",
"syncParallelLevel": "optimal"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
contoh dengan tanda sinkronisasi
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
"syncParallelLevel": "optimal"
"skipVerification": false,
"mysqlSyncConfig": {
"initialSyncFlags": [{"name": "max-allowed-packet", "value": "1073741824"}, {"name": "hex-blob"}, {"name": "compress"}]
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
Properti | Deskripsi |
---|---|
SYNC_MODE | Verifikasi bahwa Anda dapat terus menyinkronkan replika Cloud SQL dan server eksternal setelah replikasi disiapkan. |
SKIP_VERIFICATION | Apakah Anda akan melewati langkah verifikasi bawaan sebelum menyinkronkan data. Parameter ini hanya direkomendasikan jika Anda telah memverifikasi setelan replikasi. |
SYNC_PARALLEL_LEVEL | Berikan setelan yang mengontrol kecepatan transfer data dari tabel database. Nilai berikut ini tersedia:
Catatan: Nilai default untuk parameter ini adalah |
SYNC_FLAGS | Daftar tanda sinkronisasi awal untuk diverifikasi. Hanya direkomendasikan jika Anda berencana menggunakan tanda sinkronisasi kustom saat melakukan replikasi dari sumber. Untuk mengetahui daftar tanda yang diizinkan, lihat Flag sinkronisasi awal. |
PROJECT_ID | ID project Google Cloud Anda. |
REPLICA_INSTANCE_ID | ID replika Cloud SQL Anda. |
Tanda sinkronisasi awal
Untuk bermigrasi dengan tanda database kustom, Anda dapat menggunakan tanda yang diizinkan berikut:
- --add-drop-database
- --add-drop-table
- --add-drop-trigger
- --add-locks
- --allow-keywords
- --all-tablespaces
- --apply-slave-statements
- --column-statistics
- --comments
- --compact
- --compatible
- --complete-insert
- --compress
- --compression-algorithms
- --create-options
- --default-character-set
- --delayed-insert
- --disable-keys
- --dump-date
- --events
- --extended-insert
- --fields-enclosed-by
- --fields-escaped-by
- --fields-optionally-enclosed-by
- --fields-terminated-by
- --flush-logs
- --flush-privileges
- --force
- --get-server-public-key
- --hex-blob
- --ignore-error
- --ignore-read-lock-error
- --ignore-table
- --insert-ignore
- --lines-terminated-by
- --lock-all-tables
- --lock-tables
- --max-allowed-packet
- --net-buffer-length
- --network-timeout
- --no-autocommit
- --no-create-db
- --no-create-info
- --no-data
- --no-defaults
- --no-set-names
- --no-tablespaces
- --opt
- --order-by-primary
- --pipe
- --quote-names
- --quick
- --replace
- --routines
- --secure-auth
- --set-charset
- --shared-memory-base-name
- --show-create-skip-secondary-engine
- --skip-opt
- --ssl-cipher
- --ssl-fips-mode
- --ssl-verify-server-cert
- --tls-ciphersuites
- --tls-version
- --triggers
- --tz-utc
- --verbose
- --xml
- --zstd-compression-level
Untuk mengetahui nilai yang diizinkan, lihat Dokumen publik MySQL.
Memonitor migrasi
Setelah memulai replikasi dari server eksternal, Anda perlu memantau replikasi. Untuk mempelajari lebih lanjut, lihat Memantau replikasi. Setelah itu, Anda dapat menyelesaikan migrasi.
Memecahkan masalah
Pertimbangkan opsi pemecahan masalah berikut:
Masalah | Pemecahan masalah |
---|---|
Replika baca tidak mulai direplikasi pada saat pembuatan. | Mungkin ada error yang lebih spesifik di file log. Periksa log di Cloud Logging untuk menemukan error yang sebenarnya. |
Tidak dapat membuat replika baca - error invalidFlagValue. | Salah satu tanda dalam permintaan tidak valid. Ini bisa berupa tanda yang Anda
berikan secara eksplisit atau tanda yang ditetapkan ke nilai default.
Pertama, pastikan nilai tanda Jika flag |
Tidak dapat membuat replika baca - error tidak diketahui. | Mungkin ada error yang lebih spesifik di file log.
Periksa log di
Cloud Logging untuk menemukan error yang sebenarnya.
Jika error-nya adalah: |
Disk penuh. | Ukuran disk instance utama dapat penuh selama pembuatan replika. Edit instance utama untuk mengupgradenya ke ukuran disk yang lebih besar. |
Instance replika menggunakan terlalu banyak memori. | Replika menggunakan memori sementara untuk meng-cache operasi baca yang
sering diminta, yang dapat menyebabkannya menggunakan lebih banyak memori daripada instance utama.
Mulai ulang instance replika untuk mengklaim kembali ruang memori sementara. |
Replikasi dihentikan. | Batas penyimpanan maksimum tercapai dan peningkatan penyimpanan otomatis
tidak diaktifkan.
Edit instance untuk mengaktifkan |
Jeda replikasi selalu tinggi. | Beban tulis terlalu tinggi untuk ditangani replika. Kelambatan replikasi
terjadi saat thread SQL pada replika tidak dapat mengikuti
thread IO. Beberapa jenis kueri atau beban kerja dapat menyebabkan kelambatan replikasi tinggi yang bersifat sementara atau
permanen untuk skema tertentu. Beberapa penyebab
umum kelambatan replikasi adalah:
Beberapa kemungkinan solusinya mencakup:
|
Kelambatan replikasi tiba-tiba melonjak. | Hal ini disebabkan oleh transaksi yang berjalan lama. Saat sebuah transaksi
(satu pernyataan atau beberapa pernyataan) di-commit pada instance sumber, waktu mulai transaksi dicatat dalam log biner. Saat replika menerima peristiwa binlog ini, replika akan membandingkan stempel waktu tersebut dengan stempel waktu saat ini untuk menghitung kelambatan replikasi. Oleh karena itu, transaksi yang berjalan lama
pada sumber akan langsung mengakibatkan kelambatan replikasi yang besar pada
replika. Jika jumlah perubahan baris dalam transaksi besar,
replika juga akan menghabiskan waktu lama untuk menjalankannya. Selama waktu tersebut,
kelambatan replikasi meningkat. Setelah replika menyelesaikan transaksi
ini, periode untuk mengejar ketertinggalan akan bergantung pada beban kerja tulis pada
sumber dan kecepatan pemrosesan replika.
Untuk menghindari transaksi yang panjang, beberapa solusi yang memungkinkan mencakup:
|
Mengubah tanda replikasi paralel akan menghasilkan error. | Nilai yang salah ditetapkan untuk salah satu atau beberapa tanda ini.
Pada instance utama yang menampilkan pesan error, tetapkan tanda replikasi paralel:
|
Pembuatan replika gagal dengan waktu tunggu. | Transaksi tanpa komitmen yang berjalan lama pada instance utama dapat menyebabkan
pembuatan replika baca gagal.
Buat ulang replika setelah menghentikan semua kueri yang berjalan. |
Selain itu, untuk MySQL, pertimbangkan juga opsi berikut:
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 |
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 Jalankan perintah |
Migrasi data awal berhasil tetapi replikasi data berhenti berfungsi setelah beberapa saat. | Hal-hal yang sebaiknya dicoba:
|
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:
Buka Logs Viewer di konsol Google Cloud.
- Pilih replika Cloud SQL dari dropdown Instance.
- 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 berikutnya
- Pelajari cara mengupdate instance.
- Pelajari cara mengelola replika.
- Pelajari cara memantau instance.
- Pelajari cara mempromosikan replika Cloud SQL.