Halaman ini menjelaskan cara mengimpor data dari Cloud SQL untuk MySQL ke Spanner.
Proses ini menggunakan Cloud Shell on Google Cloud console untuk menjalankan perintah yang mengonfigurasi dan menjalankan tugas Dataflow untuk mengimpor database dari Cloud SQL ke Spanner.
Ringkasan proses
Proses impor melibatkan hal berikut:
- Anda menyelesaikan alur kerja Google Cloud console tempat Anda memberikan informasi tentang
database sumber dan target Anda:
- Detail database sumber: Nama instance Cloud SQL, nama database, dan kredensial Anda.
- Detail Spanner: Nama instance Spanner Anda, dan nama database. Perintah ini akan membuat database jika belum ada.
- Penyimpanan output: Nama bucket Cloud Storage untuk menyimpan file output.
- Spanner membuka Cloud Shell dan mengisi perintah. Perintah ini melakukan tindakan berikut:
- Memigrasikan skema: Perintah ini memigrasikan skema menggunakan alat migrasi Spanner. Migrasi ini berjalan di Cloud Shell dan menggunakan alamat IP publik untuk terhubung ke instance Cloud SQL Anda. Karena Cloud Shell berada di jaringannya sendiri, Cloud Shell memerlukan akses ke Cloud SQL menggunakan alamat IP publik; namun, Anda tidak perlu memberikan izin daftar ke subnet mana pun terhadap alamat IP publik.
- Memulai migrasi data: Setelah alat memigrasikan skema, perintah akan memulai tugas Dataflow untuk migrasi data. Tugas ini membaca dari database sumber secara langsung melalui alamat IP pribadinya dan menulis ke Spanner. Tugas ini berjalan menggunakan akun layanan Compute Engine default. Terakhir, perintah ini akan mencetak URL tugas Dataflow.
Batasan
Batasan berikut berlaku:
- Impor data ini hanya mendukung satu instance Cloud SQL untuk MySQL.
- Konversi skema otomatis; Anda tidak dapat melakukan penyesuaian pada skema selama impor ini.
- Impor data ini adalah pemuatan massal satu kali; impor ini tidak mendukung replikasi berkelanjutan.
Sebelum memulai
Sebelum mengimpor database, selesaikan prasyarat berikut:
Pastikan instance Cloud SQL Anda memiliki alamat IP publik dan alamat IP pribadi yang diaktifkan. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi konektivitas IP publik dan Mengonfigurasi IP pribadi.
Buat nama pengguna dan sandi untuk instance Cloud SQL Anda yang dapat digunakan untuk mengkueri database.
Simpan sandi di Secret Manager. Anda memerlukan
version IDversi secret. Untuk mengetahui informasi selengkapnya, lihat Membuat secret.Pastikan Anda memiliki bucket Cloud Storage. Dataflow menggunakan bucket ini untuk menyimpan file konfigurasi dan output tugas Dataflow.
Pastikan Spanner dan Cloud SQL berada dalam Google Cloud project yang sama.
Aktifkan Dataflow, Cloud Storage, Spanner, Cloud SQL, dan Secret Manager API.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.
Peran yang diperlukan
Untuk memastikan akun layanan Compute Engine default memiliki izin yang diperlukan untuk menjalankan tugas Dataflow, minta administrator Anda untuk memberikan peran IAM berikut ke akun layanan Compute Engine default di project Anda:
-
Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor) -
Cloud SQL Client (
roles/cloudsql.client) -
Cloud Spanner Database Admin (
roles/spanner.databaseAdmin) -
Storage Object Admin (
roles/storage.objectAdmin) -
Dataflow Worker (
roles/dataflow.worker)
Untuk mendapatkan izin yang Anda perlukan untuk mengonfigurasi impor, minta administrator Anda untuk memberikan peran IAM berikut di project Anda:
-
Cloud SQL Client (
roles/cloudsql.client) -
Cloud Spanner Database Admin (
roles/spanner.databaseAdmin) -
Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor) -
Storage Admin (
roles/storage.admin) -
Dataflow Developer (
roles/dataflow.developer) -
Service Account User (
roles/iam.serviceAccountUser)
Peran bawaan ini berisi izin yang diperlukan untuk mengonfigurasi impor. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:
Izin yang diperlukan
Izin berikut diperlukan untuk mengonfigurasi impor:
-
cloudsql.instances.connect -
cloudsql.instances.get -
cloudsql.instances.login -
spanner.instances.list -
spanner.instances.get -
spanner.databases.create -
spanner.databases.list -
spanner.databases.get -
spanner.databases.getDdl -
spanner.databases.updateDdl -
spanner.databases.read -
spanner.databases.write -
spanner.databases.select -
secretmanager.versions.access -
storage.objects.create -
storage.objects.get -
storage.buckets.get -
dataflow.jobs.create -
dataflow.jobs.get -
dataflow.jobs.list -
iam.serviceAccounts.actAs
Persyaratan kuota
Persyaratan kuota adalah sebagai berikut:
- Spanner: Anda harus memiliki kapasitas komputasi yang cukup untuk mendukung jumlah data yang Anda impor. Sebaiknya mulai dengan minimal satu node Spanner. Anda mungkin perlu menambahkan lebih banyak kapasitas komputasi agar tugas Anda selesai dalam waktu yang wajar. Tidak diperlukan kapasitas komputasi tambahan untuk mengimpor skema database. Untuk mengetahui informasi selengkapnya, lihat Ringkasan penskalaan otomatis
- Dataflow: Tugas impor tunduk pada kuota Compute Engine yang sama untuk CPU, penggunaan disk, dan alamat IP seperti tugas Dataflow lainnya.
Compute Engine: Sebelum menjalankan tugas impor, Anda harus menyiapkan kuota awal untuk Compute Engine, yang digunakan Dataflow. Kuota ini mewakili jumlah maksimum resource yang Anda izinkan untuk digunakan Dataflow bagi tugas Anda. Nilai awal yang direkomendasikan adalah:
- CPU: 200
- Alamat IP yang digunakan: 200
- Persistent disk standar: 50 TB
Umumnya, Anda tidak perlu melakukan penyesuaian lainnya. Dataflow menyediakan penskalaan otomatis sehingga Anda hanya membayar resource aktual yang digunakan selama impor. Jika tugas Anda dapat menggunakan lebih banyak resource, UI Dataflow akan menampilkan ikon peringatan. Tugas dapat selesai meskipun ada ikon peringatan.
Mengimpor dari Cloud SQL ke Spanner
Untuk mengimpor database Cloud SQL untuk MySQL ke Spanner, lakukan hal berikut di Google Cloud console:
Buka halaman Instances Spanner.
Klik nama instance tempat database perlu diimpor.
Klik tombol Import from Cloud SQL.
Setelah Spanner memverifikasi bahwa semua API yang diperlukan diaktifkan, klik tombol Next.
Pilih instance Cloud SQL untuk MySQL yang akan diimpor, lalu klik tombol Next.
Pilih database yang akan diimpor, lalu klik tombol Next. Spanner memverifikasi apakah IP publik untuk instance Cloud SQL Anda diaktifkan.
Masukkan nama pengguna dan secret, lalu klik tombol Next.
Telusuri dan pilih bucket Cloud Storage, lalu klik tombol Next.
Masukkan nama database Spanner, lalu klik tombol Import. Spanner membuka Cloud Shell dan mengisi perintah.
Jalankan perintah yang otomatis terisi untuk memulai impor:
export SOURCE_PROJECT_NUMBER=$(gcloud projects describe \ "SOURCE_PROJECT_ID" \ --format="value(projectNumber)") && \ export GSA_EMAIL="${SOURCE_PROJECT_NUMBER}-compute@developer.gserviceaccount.com" && \ echo "Verifying permissions for ${GSA_EMAIL}..." && \ export CURRENT_ROLES=$(gcloud projects get-iam-policy \ "SOURCE_PROJECT_ID" \ --flatten="bindings[].members" \ --filter="bindings.members:serviceAccount:${GSA_EMAIL}" \ --format="value(bindings.role)") && \ ERR=0 && \ for ROLE in roles/secretmanager.secretAccessor \ roles/cloudsql.client roles/spanner.databaseAdmin \ roles/storage.objectAdmin roles/dataflow.worker; do \ if echo "${CURRENT_ROLES}" | awk -v r="$ROLE" '$1 == r {found=1} END {exit 1-found}'; then \ echo "[OK] $ROLE"; \ else \ echo "[MISSING] $ROLE. Run: gcloud projects add-iam-policy-binding SOURCE_PROJECT_ID --member='serviceAccount:${GSA_EMAIL}' --role='${ROLE}'"; \ ERR=1; \ fi; \ done && \ [[ "$ERR" -eq 0 ]] && \ export JOB_NAME="csql-to-spanner-$(date +%Y%m%d-%H%M%S)" && \ export OUTPUT_DIR="gs://BUCKET_NAME/output/${JOB_NAME}" && \ export SHARD_CONFIG_PATH="gs://BUCKET_NAME/config/${JOB_NAME}_shard_config.json" && \ export WORKER_MACHINE_TYPE="n2-highmem-8" && \ export TEMPLATE_PATH="gs://dataflow-templates/latest/flex/Sourcedb_to_Spanner_Flex" && \ export SHARD_CONFIG_JSON='{ "shardConfigurationBulk": { "dataShards": [ { "host": "SOURCE_PRIVATE_IP", "port": "3306", "user": "SOURCE_DATABASE_USER", "secretManagerUri": "projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION", "databases": [ { "dbName": "SOURCE_DATABASE_NAME", "databaseId": "SOURCE_DATABASE_NAME" } ] } ] } }' && \ echo "${SHARD_CONFIG_JSON}" | gcloud storage cp - "${SHARD_CONFIG_PATH}" && \ sudo apt-get update && \ sudo apt-get install google-cloud-cli-spanner-migration-tool -y && \ gcloud alpha spanner migrate schema \ --source=mysql \ --source-profile="project=SOURCE_PROJECT_ID,instance=SOURCE_INSTANCE_NAME,secretManagerUri=projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION,dbName=SOURCE_DATABASE_NAME,region=SOURCE_REGION,user=SOURCE_DATABASE_USER" \ --target-profile="instance=SPANNER_INSTANCE_ID,project=SPANNER_PROJECT_ID,dbName=SPANNER_DATABASE_ID" && \ JOB_OUTPUT=$(gcloud dataflow flex-template run "${JOB_NAME}" \ --project="SOURCE_PROJECT_ID" \ --region="SOURCE_REGION" \ --template-file-gcs-location="${TEMPLATE_PATH}" \ --network="NETWORK_NAME" \ --subnetwork="https://www.googleapis.com/compute/v1/projects/SOURCE_PROJECT_ID/regions/SOURCE_REGION/subnetworks/SUBNETWORK_NAME" \ --worker-machine-type="${WORKER_MACHINE_TYPE}" \ --parameters "instanceId=SPANNER_INSTANCE_ID" \ --parameters "databaseId=SPANNER_DATABASE_ID" \ --parameters "projectId=SPANNER_PROJECT_ID" \ --parameters "sourceConfigURL=${SHARD_CONFIG_PATH}" \ --parameters "sourceDbDialect=MYSQL" \ --parameters "jdbcDriverClassName=com.mysql.jdbc.Driver" \ --parameters "outputDirectory=${OUTPUT_DIR}" \ --format="get(job.id)") && \ echo "--------------------------------------------------------" && \ echo "Dataflow Job Submitted." && \ echo "Monitor: https://console.cloud.google.com/dataflow/jobs/SOURCE_REGION/${JOB_OUTPUT}?project=SOURCE_PROJECT_ID" && \ echo "--------------------------------------------------------"Parameter berikut disediakan dari Google Cloud console ke perintah:
SOURCE_DATABASE_NAME: nama database Cloud SQL sumberSOURCE_DATABASE_USER: nama pengguna untuk database Cloud SQL sumberPROJECT_ID: ID proyek Google Cloud AndaSECRET_ID: ID secret yang berisi sandiVERSION: versi secretSOURCE_PROJECT_ID: project ID yang berisi instance Cloud SQL sumberSOURCE_REGION: region instance Cloud SQL sumberSOURCE_INSTANCE_NAME: nama instance Cloud SQL sumberSOURCE_PRIVATE_IP: alamat IP pribadi instance Cloud SQLNETWORK_NAME: nama jaringan instance Cloud SQL sumberSUBNETWORK_NAME: nama subnetwork instance Cloud SQL sumberSPANNER_PROJECT_ID: project ID yang berisi instance Spanner targetSPANNER_INSTANCE_ID: ID instance Spanner targetSPANNER_DATABASE_ID: ID database Spanner target, yang dibuat Spanner jika tidak adaBUCKET_NAME: nama bucket Cloud Storage untuk menyimpan file output Dataflow dan file konfigurasi
Perintah ini memverifikasi bahwa akun layanan komputasi default memiliki izin yang diperlukan, menginstal alat migrasi Spanner, memigrasikan skema, dan memulai tugas Dataflow.
Setelah perintah selesai, ikuti link yang diberikan untuk memantau tugas Dataflow di console Google Cloud .
Langkah Berikutnya
- Pelajari cara melakukan pembaruan skema.