Praktik terbaik untuk mengimpor dan mengekspor data

Halaman ini memberikan praktik terbaik untuk mengimpor dan mengekspor data dengan Cloud SQL. Untuk petunjuk langkah demi langkah mengimpor data ke Cloud SQL, lihat Mengimpor Data.

Untuk mengekspor data dari Cloud SQL untuk digunakan dalam instance MySQL yang Anda kelola, lihat Mengekspor dan mengimpor menggunakan file dump SQL atau Mengekspor dan mengimpor menggunakan file CSV.

Praktik terbaik untuk mengimpor dan mengekspor

Berikut ini adalah praktik terbaik yang perlu dipertimbangkan saat mengimpor dan mengekspor data:

Menggunakan Mode SQL yang sama untuk impor dan ekspor

Setelan Mode SQL memengaruhi cara Cloud SQL menafsirkan kueri SQL. Misalnya, jika Anda mengekspor dari database tanpa mengaktifkan Strict SQL, lalu mencoba mengimpor ke Cloud SQL (yang mengaktifkan Strict SQL secara default), impor tersebut mungkin gagal. Praktik terbaiknya adalah menggunakan Mode SQL yang sama untuk impor seperti yang Anda gunakan untuk mengekspor.

Tinjau Mode SQL pada database sumber dan target untuk mengetahui kompatibilitasnya. Perhatikan dengan cermat flag yang mengaktifkan mode Strict SQL. Jika Strict SQL TIDAK ditetapkan pada database Anda, Anda mungkin perlu menghapusnya di Cloud SQL. Jika menghapus Strict SQL, Anda harus menetapkan flag lain.

Untuk memverifikasi bahwa instance Cloud SQL Anda telah menetapkan mode yang diinginkan, jalankan SELECT @@GLOBAL.sql_mode;.

Jangan gunakan bucket Pemohon Membayar Cloud Storage

Anda tidak dapat menggunakan bucket Cloud Storage yang telah mengaktifkan Pemohon Membayar enabled untuk impor dan ekspor dari Cloud SQL.

Meminimalkan dampak performa dari ekspor

Untuk ekspor standar dari Cloud SQL, ekspor dijalankan saat database online. Jika data yang diekspor lebih kecil, dampaknya mungkin akan minimal. Namun, jika ada database besar, atau objek besar, seperti BLOB dalam database, ada kemungkinan bahwa ekspor dapat menurunkan performa database. Hal ini dapat memengaruhi waktu yang diperlukan untuk menjalankan kueri dan operasi database terhadap database. Setelah memulai ekspor, Anda tidak dapat menghentikannya jika database mulai merespons dengan lambat.

Untuk mencegah respons yang lambat selama ekspor, Anda dapat:

  1. melakukan ekspor dari replika baca. Ini mungkin opsi yang bagus jika Anda sering melakukan ekspor (setiap hari atau lebih sering), tetapi jumlah data yang diekspor kecil. Untuk melakukan ekspor dari replika baca, gunakan fungsi ekspor Konsol Google Cloud, gcloud, atau REST API pada instance replika baca Anda. Lihat Membuat replika baca untuk mengetahui informasi selengkapnya tentang cara membuat dan mengelola replika baca.

  2. Gunakan ekspor serverless Dengan ekspor serverless, Cloud SQL membuat instance sementara yang terpisah untuk memindahkan operasi ekspor. Dengan memindahkan operasi ekspor, database pada instance utama dapat terus menyalurkan kueri dan menjalankan operasi dengan tingkat performa yang biasa. Setelah ekspor data selesai, instance sementara akan dihapus secara otomatis. Opsi ini mungkin bagus jika Anda ingin mengekspor satu kali dari database yang besar. Gunakan fungsi ekspor konsol Google Cloud, gcloud, atau REST API, dengan flag offload untuk menjalankan operasi ekspor serverless.

    Selama operasi ekspor tanpa server, Anda dapat menjalankan beberapa operasi lain, seperti pengeditan, impor, dan failover instance. Namun, jika Anda memilih delete, operasi ekspor akan berhenti beberapa saat setelah Anda menghapus instance, dan tidak mengekspor data apa pun.

    Lihat tabel berikut untuk mempelajari operasi yang dapat diblokir saat operasi ekspor tanpa server sedang berjalan:
    Operasi saat ini Operasi baru Diblokir?
    Semua operasi Ekspor serverless Ya
    Ekspor serverless Operasi apa pun kecuali ekspor tanpa server Tidak
    Operasi apa pun kecuali ekspor tanpa server Operasi apa pun kecuali ekspor tanpa server Ya

    Ekspor tanpa server memerlukan waktu lebih lama daripada ekspor standar, karena pembuatan instance sementara memerlukan waktu. Waktu yang diperlukan setidaknya lebih dari lima menit, tetapi untuk database yang lebih besar, waktu yang diperlukan mungkin lebih lama. Pertimbangkan dampaknya terhadap waktu, performa, dan biaya sebelum menentukan jenis ekspor yang akan digunakan.

Gunakan flag yang benar saat Anda membuat file dump SQL

Jika Anda tidak menggunakan flag yang tepat saat mengekspor data ke file dump SQL, impor Anda mungkin gagal. Untuk informasi tentang cara membuat file dump SQL untuk diimpor ke Cloud SQL, lihat Membuat file dump SQL.

Kompresi data untuk mengurangi biaya

Cloud SQL mendukung pengimporan dan pengeksporan file terkompresi dan yang tidak dikompresi. Kompresi dapat menghemat ruang penyimpanan yang signifikan di Cloud Storage dan mengurangi biaya penyimpanan, terutama saat Anda mengekspor instance berukuran besar.

Saat Anda mengekspor file dump SQL atau CSV, gunakan ekstensi file .gz untuk mengompresi data. Saat Anda mengimpor file dengan ekstensi .gz, file tersebut akan didekompresi secara otomatis.

Mengurangi proses impor dan ekspor yang berjalan lama

Proses impor ke Cloud SQL dan ekspor dari Cloud SQL dapat memerlukan waktu lama, bergantung pada ukuran data yang diproses. Hal ini dapat menimbulkan dampak berikut:

  • Operasi instance Cloud SQL yang sudah berjalan lama tidak dapat dihentikan.
  • Satu operasi impor atau ekspor hanya dapat dijalankan dalam satu waktu untuk setiap instance, dan impor atau ekspor yang berjalan lama akan memblokir operasi lain seperti pencadangan otomatis harian. Ekspor serverless memungkinkan untuk menjalankan operasi lain, termasuk mengedit instance, mengimpor, failover, dan berhenti memblokir cadangan otomatis harian.

Durasi waktu yang diperlukan untuk menyelesaikan setiap operasi dapat dikurangi menggunakan fungsi impor atau ekspor Cloud SQL dengan batch data lebih kecil.

Ekspor dapat dilakukan dari replika baca atau menggunakan ekspor serverless untuk meminimalisir dampak terhadap performa database dan memungkinkan operasi lain berjalan pada instance saat ekspor berlangsung.

Untuk tips lainnya, lihat Mendiagnosis Masalah dengan Instance Cloud SQL.

Menggunakan InnoDB

InnoDB adalah satu-satunya mesin penyimpanan yang didukung untuk instance MySQL.

Anda dapat mengonversi tabel dari MyISAM ke InnoDB dengan memasukkan output mysqldump melalui skrip sed seperti berikut:

mysqldump --databases [DATABASE_NAME] \
-h [INSTANCE_IP] -u [USERNAME] -p [PASSWORD] \
--hex-blob --default-character-set=utf8mb4 | sed 's/ENGINE=MyISAM/ENGINE=InnoDB/g' > [DATABASE_FILE].sql

Tugas impor dan migrasi MySQL yang berisi metadata dengan klausa DEFINER

Karena tugas impor atau migrasi MySQL tidak memigrasikan data pengguna, file sumber dan dump yang berisi metadata yang ditentukan oleh pengguna dengan klausa DEFINER akan gagal diimpor atau dimigrasikan karena pengguna belum ada di sana.

Untuk mengidentifikasi nilai DEFINER mana yang ada dalam metadata, gunakan kueri berikut (atau telusuri di file dump Anda) dan periksa apakah ada entri untuk root%localhost atau pengguna yang tidak ada dalam instance target.

SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.EVENTS;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.ROUTINES;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.TRIGGERS;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.VIEWS;

Untuk menjalankan tugas impor atau migrasi dari sumber yang menyertakan metadata tersebut, Anda dapat melakukan salah satu hal berikut:

  • Buat pengguna pada instance Cloud SQL target Anda sebelum memulai tugas impor atau migrasi.
  • Perbarui klausa DEFINER menjadi INVOKER pada instance MySQL sumber atau file dump sebelum memulai tugas impor atau migrasi Anda.

Memverifikasi database yang diimpor

Setelah operasi impor selesai, hubungkan ke database Anda dan jalankan perintah database yang sesuai untuk memastikan kontennya sudah benar. Misalnya, hubungkan dan buat daftar database, tabel, dan entri tertentu.

Batasan umum

Untuk daftar batasan umum, lihat Masalah saat mengimpor dan mengekspor data.

Mengotomatiskan operasi ekspor

Meskipun Cloud SQL tidak menyediakan cara bawaan untuk mengotomatiskan ekspor database, Anda dapat membuat alat otomatisasi sendiri menggunakan beberapa komponen Google Cloud. Untuk mempelajari lebih lanjut, lihat tutorial ini.

Pemecahan masalah

Memecahkan masalah operasi impor

Masalah Pemecahan masalah
HTTP Error 409: Operation failed because another operation was already in progress. Sudah ada operasi yang tertunda untuk instance Anda. Hanya satu operasi yang diizinkan pada satu waktu. Coba permintaan Anda setelah operasi saat ini selesai.
Operasi impor memakan waktu terlalu lama. Terlalu banyak koneksi aktif dapat mengganggu operasi impor.

Tutup operasi yang tidak digunakan. Periksa penggunaan CPU dan memori instance Cloud SQL untuk memastikan ada banyak resource yang tersedia. Cara terbaik untuk memastikan resource maksimum untuk impor adalah dengan memulai ulang instance sebelum memulai operasi.

Mulai ulang:

  • Menutup semua koneksi.
  • Mengakhiri tugas yang mungkin menghabiskan resource.
Operasi impor bisa gagal ketika satu atau beberapa pengguna yang dirujuk dalam file dump tidak ada. Sebelum mengimpor file dump, semua pengguna database yang memiliki objek atau diberi izin pada objek dalam database yang diekspor harus ada di database target. Jika tidak, operasi impor akan gagal membuat ulang objek dengan kepemilikan atau izin asli.

Buat pengguna database sebelum mengimpor.

Operasi impor gagal dengan error bahwa tabel tidak ada. Tabel dapat memiliki dependensi kunci asing di tabel lain, dan bergantung pada urutan operasi, satu atau beberapa tabel tersebut mungkin belum ada selama operasi impor.

Hal-hal yang sebaiknya dicoba:

Tambahkan baris berikut di awal file dump:


SET FOREIGN_KEY_CHECKS=0;
  

Selain itu, tambahkan baris berikut di akhir file dump:


SET FOREIGN_KEY_CHECKS=1;
  

Setelan ini menonaktifkan pemeriksaan integritas data saat operasi impor sedang berlangsung, dan mengaktifkannya kembali setelah data dimuat. Hal ini tidak mempengaruhi integritas data di database, karena data sudah divalidasi selama pembuatan file dump.

Memecahkan masalah operasi ekspor

Masalah Pemecahan masalah
HTTP Error 409: Operation failed because another operation was already in progress. Sudah ada operasi yang tertunda untuk instance Anda. Hanya satu operasi yang diizinkan pada satu waktu. Coba permintaan Anda setelah operasi saat ini selesai.
HTTP Error 403: The service account does not have the required permissions for the bucket. Pastikan bucket ada dan akun layanan untuk instance Cloud SQL (yang melakukan ekspor) memiliki peran Storage Object Creator (roles/storage.objectCreator) untuk memungkinkan ekspor ke bucket. Lihat Peran IAM untuk Cloud Storage.
Ekspor CSV berhasil, tetapi ekspor SQL gagal. Format CSV dan SQL melakukan ekspor secara berbeda. Format SQL mengekspor seluruh database, dan mungkin memerlukan waktu lebih lama untuk diselesaikan. Format CSV memungkinkan Anda menentukan elemen database yang akan disertakan dalam ekspor.

Gunakan ekspor CSV untuk mengekspor hal yang Anda butuhkan saja.

Ekspor memerlukan waktu terlalu lama. Cloud SQL tidak mendukung operasi sinkron serentak.

Gunakan pengurangan beban ekspor. Pada level yang tinggi, dalam pengurangan beban ekspor, bukannya mengeluarkan ekspor pada instance sumber, melainkan Cloud SQL menjalankan instance pengurangan beban untuk melakukan ekspor. Pengurangan beban ekspor memiliki beberapa keunggulan, termasuk peningkatan performa pada instance sumber dan pemblokiran operasi administratif saat ekspor sedang berjalan. Dengan pengurangan beban ekspor, total latensi dapat meningkat sebesar jumlah waktu yang diperlukan untuk memunculkan instance pengurangan beban. Umumnya, untuk ekspor yang berukuran wajar, latensi tidak signifikan. Namun, jika ekspor cukup kecil, Anda mungkin akan melihat peningkatan latensi.

Anda ingin ekspor dilakukan secara otomatis. Cloud SQL tidak menyediakan cara untuk mengotomatiskan ekspor.

Anda dapat mem-build sistem ekspor otomatis Anda sendiri menggunakan produk Google Cloud seperti Cloud Scheduler, Pub/Sub, dan Cloud Functions, mirip dengan artikel ini tentang mengotomatiskan cadangan.

Langkah selanjutnya