Memigrasikan pengguna Oracle ke Cloud SQL untuk MySQL: Keamanan, operasi, pemantauan, dan logging

Dokumen ini adalah bagian dari rangkaian yang menyajikan informasi dan panduan penting terkait perencanaan dan migrasi database Oracle® 11g/12c ke Cloud SQL untuk MySQL versi 5.7, instance generasi kedua. Seri ini mencakup bagian-bagian berikut:

Keamanan

Bagian ini menjelaskan perbedaan enkripsi data antara Oracle Cloud SQL untuk MySQL dan membahas audit kontrol akses Cloud SQL untuk MySQL.

Enkripsi data Oracle

Selain autentikasi pengguna dasar dan pengelolaan hak istimewa pengguna, Oracle menawarkan mekanisme TDE (Transparent Data Encryption) guna menambahkan lapisan enkripsi tambahan untuk keamanan data dalam penyimpanan di level sistem operasi. Setelah dikonfigurasi, Oracle TDE diimplementasikan oleh sistem secara otomatis dan tidak memerlukan interaksi manual apa pun dari pengguna. Untuk mengimplementasikan Oracle TDE, sebaiknya konfigurasikan secara eksplisit (dengan perintah) pada objek database yang diperlukan dan didukung, yang dapat menerima jenis enkripsi ini—misalnya, tablespace, tabel, atau kolom. Untuk menangani keamanan data dalam pengiriman, sebaiknya Anda menerapkan solusi keamanan jaringan.

Enkripsi data Cloud SQL untuk MySQL

Google Cloud menyediakan beberapa lapisan enkripsi untuk melindungi data pelanggan dalam penyimpanan di Google Cloud, termasuk Cloud SQL. Cloud SQL dienkripsi menggunakan enkripsi AES-128 atau AES-256. Untuk informasi tambahan, lihat topik berikut mengenai enkripsi dalam penyimpanan. Tidak seperti enkripsi Oracle (yang harus diimplementasikan melalui tindakan konfigurasi), Google Cloud mengenkripsi data pelanggan dalam penyimpanan, tanpa tindakan apa pun yang diperlukan. Dari perspektif konversi skema, tidak ada tindakan yang diperlukan, dan enkripsi tetap transparan bagi pengguna.

Untuk lebih memahami cara Google Cloud menangani enkripsi data dalam pengiriman, lihat Cara enkripsi dikelola untuk data dalam pengiriman.

Pengauditan

Oracle menyediakan beberapa metode untuk audit, seperti audit standar dan terperinci. Sebaliknya, MySQL secara default tidak menyediakan solusi audit yang setara. Untuk mengatasi keterbatasan ini, Anda dapat menggunakan dasbor dan pemantauan Google Cloud, tetapi untuk menangkap operasi DML/DDL database, Anda dapat menggunakan log kueri lambat, umum, dan error sebagai solusi audit yang lebih andal.

Untuk mengimplementasikan solusi ini, sebaiknya Anda menggunakan instance FLAGS untuk mengaktifkan log kueri lambat dan log umum. Selain itu, Anda harus mengelola retensi untuk log ini sesuai dengan kebutuhan bisnis Anda.

Anda dapat menggunakan log audit Google Cloud untuk mengumpulkan informasi audit. Log ini mencakup tiga level utama:

  • Log audit aktivitas admin (diaktifkan secara default)
  • Log audit akses data (dinonaktifkan secara default)
    • Baca cara mengonfigurasi log akses data.
    • Perlu diperhatikan bahwa log audit akses data tidak mencatat operasi akses data di resource yang dapat diakses tanpa login ke Google Cloud.
  • Log audit peristiwa sistem (diaktifkan secara default)

Melihat log audit Google Cloud

Berikut jalur akses untuk melihat log audit: Konsol Google Cloud > Beranda > Aktivitas

Anda dapat memfilter perincian informasi di antara tingkat audit. Screenshot berikut menampilkan audit aktivitas admin.

Memfilter perincian di antara tingkat audit.

Halaman Cloud Logging

Berikut jalur akses untuk halaman logging: Konsol Google Cloud > Cloud Logging

Anda dapat memfilter perincian informasi di antara jenis log. Screenshot berikut menunjukkan audit log umum (data audit untuk pengguna, host, dan pernyataan SQL).

Log audit umum.

Kontrol akses Cloud SQL untuk MySQL

Pengguna dapat terhubung ke instance Cloud SQL untuk MySQL menggunakan klien MySQL dengan alamat IP statis yang telah diotorisasi atau dengan menggunakan Proxy Cloud SQL, dengan cara yang mirip dengan koneksi database lainnya. Untuk sumber koneksi lainnya seperti App Engine atau Compute Engine, pengguna memiliki beberapa opsi seperti menggunakan Proxy Cloud SQL. Opsi ini dijelaskan secara lebih mendetail dalam Kontrol akses instance.

Operations

Bagian ini membahas ekspor dan impor, pencadangan dan pemulihan tingkat instance, penjadwal peristiwa MySQL (untuk tugas database), serta instance standby untuk operasi hanya baca dan pemulihan dari bencana.

Mengekspor dan mengimpor

Metode utama Oracle untuk melakukan operasi ekspor dan impor logis adalah utilitas Data Pump, dengan menggunakan perintah EXPDP/IMPDP (versi lama fungsi ekspor/impor Oracle mencakup perintah exp dan imp). Perintah yang setara dengan MySQL adalah utilitas mysqldump dan mysqlimport, yang menghasilkan file dump lalu mengimpornya pada tingkat database atau objek (termasuk mengekspor dan mengimpor metadata saja).

Tidak ada solusi mySQL langsung yang setara untuk utilitas DBMS_DATAPUMP Oracle (metode Oracle untuk menerapkan fungsi EXPDP/IMPDP yang berinteraksi langsung dengan paket DBMS_DATAPUMP). Untuk melakukan konversi dari kode PL/SQL DBMS_DATAPUMP Oracle, gunakan kode alternatif (misalnya, Bash atau Python) untuk menerapkan elemen logika, serta gunakan mysqldump dan mysqlimport MySQL untuk menjalankan operasi ekspor/impor.

Utilitas mysqldump dan mysqlimport MySQL berjalan di tingkat klien (sebagai bagian dari program klien MySQL), yang terhubung dari jarak jauh ke instance Cloud SQL untuk MySQL. File dump dibuat di sisi klien.

mysqldump:

Utilitas klien melakukan pencadangan logis dan impor data (sebagai sql). Tindakan ini menghasilkan sekumpulan pernyataan SQL yang dapat dieksekusi untuk mereproduksi definisi objek database dan data tabel asli. Utilitas mysqldump juga dapat menghasilkan output dalam format CSV, dalam teks delimited lainnya, atau dalam format XML. Keuntungan utama dari format output ini adalah Anda dapat melihat atau mengedit output ekspor sebelum memulihkannya, karena ini adalah file teks. Kekurangan utamanya adalah tidak dimaksudkan sebagai solusi yang cepat atau skalabel untuk mencadangkan data dalam jumlah besar.

mysqldump penggunaan:

-- Single database backup & specific tables backup
# mysqldump database_name > outpitfile.sql
# mysqldump database_name tbl1 tbl2 > outpitfile.sql

-- Back up all databases
# mysqldump --all-databases > all_databases.sql

-- Ignore a given table
# mysqldump --databases db1 --ignore-table db1.tbl > outpitfile.sql

-- Back up metadata only - Schema only
# mysqldump --no-data db1 > bck.sql

-- Include stored procedures and functions (routines)
# mysqldump db1 --routines > db1.sql

-- Back up only rows by a given WHERE condition
# mysqldump db1 tbl1 --where="col1=1" > bck.sql

-- Include triggers for each dumped table (default)
# mysqldump db1 tbl1 —triggers > bck.sql

mysqlimport:

Ini adalah program klien yang menyediakan antarmuka command line ke pernyataan SQL LOAD DATA INFILE. mysqlimport sering digunakan untuk mengimpor data dari file teks atau CSV ke tabel MySQL dengan struktur yang sesuai. Oracle SQL*Loader dapat dikonversi menjadi mysqlimport karena keduanya memiliki fungsi yang sama untuk memuat data dari file eksternal.

mysqlimport penggunaan:

-- Example of loading data from a CSV file into a table:
-- Create a table named csv_file
mysql> create table file(col1 int, col2 varchar(10));

-- Create a CSV file (delimited by tab)
# echo 1    A > file.csv
# echo 2    B >> file.csv
# echo 3    C >> file.csv

-- Import the CSV file into the csv_file table
-- Note that the file and table name must be named identically
# mysqlimport -u USER -p -h HOSTNAME/IP DB_NAME --local file.csv
csv_file: Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

-- Verify
# mysql -u USER -p -h HOSTNAME/IP DB_NAME -e "SELECT * FROM file"
+------+------+
| col1 | col2 |
+------+------+
|    1 | A    |
|    2 | B    |
|    3 | C    |
+------+------+

-- Example of using LOAD DATA INFILE to load a CSV file (using the same
   table from the previous example, with the CSV delimiter defined by
   comma)
mysql> LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE file
       FIELDS TERMINATED BY ','
       LINES TERMINATED BY '\n' (col1, col2);

mysql> SELECT * FROM file;
+------+------+
| col1 | col2 |
+------+------+
|    1 | A    |
|    2 | B    |
|    3 | C    |
+------+------+

Ekspor/impor Cloud SQL untuk MySQL:

Link dokumentasi berikut menggambarkan cara menggunakan gsutil/gcloud untuk berinteraksi dengan instance Cloud SQL dan Cloud Storage untuk menerapkan operasi Ekspor dan Impor.

Pencadangan dan pemulihan tingkat instance

Ini adalah operasi yang sederhana untuk bermigrasi dari Oracle RMAN atau Data Pump dan menyertakan opsi pencadangan dan pemulihan tambahan (misalnya, snapshot VM, pencadangan cold, atau alat pihak ketiga) ke Cloud SQL untuk MySQL. Tidak diperlukan kode atau pengetahuan tambahan. Anda dapat mengelola proses ini dengan menggunakan Konsol Google Cloud atau Google Cloud CLI. (Contoh sebelumnya dikompilasi dengan instance Cloud SQL generasi kedua.)

Jenis metode pencadangan database MySQL adalah pencadangan on demand dan pencadangan otomatis.

Anda dapat menggunakan pemulihan instance database Cloud SQL untuk MySQL jika ingin memulihkan instance yang sama, menimpa data yang ada, atau memulihkan ke instance lain. Dengan Cloud SQL untuk MySQL, Anda juga dapat memulihkan database MySQL ke point-in-time tertentu menggunakan logging biner dengan mengaktifkan opsi pencadangan otomatis.

Cloud SQL untuk MySQL memberikan kemampuan untuk meng-clone versi database sumber yang independen. Fitur ini hanya berlaku untuk database utama (master) atau clone lain dan tidak dapat diambil dari instance replika baca. Anda juga dapat menggunakan fitur ini untuk memulihkan instance MySQL dari waktu tertentu, sehingga memungkinkan pemulihan data jika diperlukan. Anda dapat menerapkan pemulihan database Cloud SQL untuk MySQL dengan menggunakan Konsol Google Cloud atau gcloud CLI.

Scheduler peristiwa MySQL (tugas database)

Untuk memulai prosedur database yang telah ditetapkan, fungsi scheduler peristiwa MySQL setara dengan Oracle DBMS_JOBS atau Oracle DBMS_SCHEDULER. Secara default, parameter database event_scheduler ditetapkan ke OFF. Jika diperlukan, parameter harus dialihkan ke ON menggunakan flag Cloud SQL.

Anda dapat menggunakan scheduler peristiwa MySQL untuk menjalankan perintah DML/DDL eksplisit atau untuk menjadwalkan prosedur atau fungsi yang tersimpan pada waktu tertentu dan dengan logika tertentu.

Pertimbangan konversi untuk Oracle DBMS_JOBS atau DBMS_SCHEDULER:

Semua tugas Oracle harus dikonversi menjadi sintaksis dan fungsi MySQL secara manual atau dengan menggunakan alat konversi PL/SQL yang tersedia secara komersial.

Gunakan pernyataan berikut untuk memverifikasi parameter value event_scheduler saat ini dari eksekusi klien:

mysql> SHOW VARIABLES LIKE '%event_s%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+

Contoh scheduler peristiwa:

  • Oracle DBMS_ScheduleR

    SQL> BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
       job_name             => 'job_sessions_1d_del',
       job_type             => 'PLSQL_BLOCK',
       job_action           => 'BEGIN DELETE FROM sessions WHERE
                                      session_date < SYSDATE - 1;
                                END;',
       start_date           => SYSTIMESTAMP,
       repeat_interval      => 'FREQ=DAILY',
       end_date             => NULL,
       enabled              =>  TRUE,
       comments             => 'Deletes last day data from the sessions table');
    END;
    /
    
  • Konversi EVENT MySQL:

    mysql> CREATE EVENT job_sessions_1d_del
           ON SCHEDULE EVERY 1 DAY
           COMMENT 'Deletes last day data from the sessions table'
           DO
           DELETE FROM sessions
              WHERE session_date < DATE_SUB(SYSDATE(), INTERVAL 1 DAY);
    
  • Metadata scheduler peristiwa MySQL:

    mysql> SELECT * FROM INFORMATION_SCHEMA.EVENTS \G;
    
    -- OR
    
    mysql> SHOW EVENTS FROM HR;
    

Instance standby untuk implementasi operasi hanya baca dan pemulihan dari bencana

Oracle Active Data Guard memungkinkan instance standby berfungsi sebagai endpoint hanya baca, sementara data baru masih diterapkan melalui log arsip dan pengulangan. Anda juga dapat menggunakan Oracle GoldenGate guna mengaktifkan instance tambahan untuk tujuan pembacaan sementara modifikasi data diterapkan secara real time, yang berfungsi sebagai solusi Change Data Capture (CDC).

Cloud SQL untuk MySQL mendukung pemisahan baca/tulis dengan menggunakan replika baca untuk mengarahkan workload baca atau analisis apa pun dari sumber replika utama ke sumber replika alternatif dalam waktu yang mendekati real-time. Anda dapat menerapkan setelan untuk replika baca Cloud SQL untuk MySQL dengan menggunakan Konsol Google Cloud atau gcloud CLI.

Cloud SQL untuk MySQL mendukung opsi replikasi tambahan: mereplikasi ke instance MySQL eksternal dan mereplikasi dari instance MySQL eksternal.

Anda dapat menerapkan Oracle Active Data Guard dan Oracle GoldenGate sebagai solusi pemulihan dari bencana (disaster recovery/DR), yang menambahkan instance standby yang sudah disinkronkan dengan instance utama.

Replika baca Cloud SQL untuk MySQL tidak dimaksudkan sebagai instance standby untuk skenario DR. Untuk itu, Cloud SQL memberikan kemampuan untuk mengonfigurasi instance MySQL untuk ketersediaan tinggi (menggunakan Konsol Google Cloud atau gcloud CLI).

Beberapa operasi mungkin memerlukan reboot instance (misalnya, menambahkan HA ke instance utama yang ada). Dari perspektif SLA ketersediaan tinggi (HA), jika elemen utama tidak responsif selama sekitar 60 detik, instance standby HA akan tersedia setelah terhubung kembali. Jika ingin mengaktifkan HA untuk Cloud SQL untuk MySQL, lihat instructions berikut.

Logging dan pemantauan

File log pemberitahuan Oracle adalah sumber utama untuk mengidentifikasi peristiwa sistem umum dan peristiwa error agar dapat memahami siklus proses instance database Oracle apa pun (terutama memecahkan masalah peristiwa kegagalan dan peristiwa error).

Log pemberitahuan Oracle menampilkan informasi mengenai hal berikut:

  • Peringatan dan error instance database Oracle (ORA- + angka error).
  • Peristiwa startup dan penonaktifan instance database Oracle.
  • Masalah terkait jaringan dan koneksi.
  • Database mengulang peristiwa pengalihan log.
  • File rekaman aktivitas Oracle mungkin disebutkan dengan link untuk detail tambahan terkait peristiwa database tertentu.

Selain itu, Oracle menyediakan file log khusus untuk berbagai layanan seperti LISTENER, ASM, dan Enterprise Manager (OEM), yang tidak memiliki komponen yang setara di Cloud SQL untuk MySQL.

Jenis log Cloud SQL untuk MySQL:

Jenis log MySQL Deskripsi Notes
Log aktivitas Berisi data tentang panggilan API atau tindakan administratif lainnya yang mengubah konfigurasi atau metadata instance Cloud SQL untuk MySQL. Log ini adalah salah satu dari tiga log dalam grup Cloud Audit Logs.
Log akses data Berisi data tentang panggilan API yang membaca konfigurasi atau metadata resource, serta panggilan API berbasis pengguna yang membuat, memodifikasi, atau membaca data resource yang disediakan pengguna. Log ini adalah salah satu dari tiga log dalam grup Cloud Audit Logs. Perlu diperhatikan bahwa log ini hanya mencatat operasi akses data di instance MySQL untuk peristiwa yang dapat diakses tanpa login ke Google Cloud.

mysql.err
Ini adalah file log utama MySQL, yang dapat dibandingkan dengan log pemberitahuan Oracle. Kedua log tersebut menyimpan logging peristiwa instance database, seperti peristiwa startup dan shutdown, serta peristiwa error dan peringatan. Panduan pesan error MySQL 5.7.

mysql-slow.log
Log kueri lambat MySQL mengumpulkan data pada kueri yang melebihi konfigurasi yang telah ditetapkan seperti setiap kueri yang memiliki waktu proses lebih dari 2 detik (defaultnya adalah 10 detik). Dinonaktifkan secara default. Untuk mengaktifkan log ini, tetapkan variabel berikut (parameter database):

  • slow_query_log
  • long_query_time

mysql-general.log
Log ini mengumpulkan data tentang koneksi dan pemutusan koneksi klien serta pernyataan SQL apa pun yang dijalankan berdasarkan instance database MySQL. Log ini berguna untuk pemecahan masalah dan biasanya diubah menjadi OFF saat operasi selesai. Dinonaktifkan secara default, untuk mengaktifkan variabel general_log harus disetel ke ON.
Log biner Server MySQL menggunakan logging biner untuk mencatat semua pernyataan yang memodifikasi data. Penggunaan utama log ini adalah untuk pencadangan dan replikasi. Secara default, parameter logging biner diaktifkan di Cloud SQL untuk MySQL untuk mengaktifkan deployment pemulihan dan replika baca. Untuk mengaktifkan logging biner, tetapkan parameter konfigurasi log_bin ke ON.
Log Relay Menyimpan pernyataan yang diterima dari log biner utama untuk menerapkan semua modifikasi data dalam instance subordinat (replika baca). Hanya berlaku untuk instance sekunder (slave) dan replika baca.

Melihat log operasi Cloud SQL untuk MySQL

Cloud Logging adalah platform utama untuk melihat semua detail log. Anda dapat memilih log yang berbeda dan memfilter berdasarkan level peristiwa log (misalnya, Critical, Error, atau Warning). Jangka waktu peristiwa dan pemfilteran teks bebas juga tersedia.

Melihat log di Cloud Logging.

Contoh

Screenshot berikut menunjukkan penemuan kueri tertentu dalam file mysql-slow.log menggunakan jangka waktu kustom sebagai kriteria filter.

Menemukan kueri di mysql-slow.log.

Pemantauan instance database MySQL

Dasbor pemantauan UI utama Oracle merupakan bagian dari produk OEM dan Grid/Cloud Control (misalnya, Grafik Aktivitas Teratas) dan berguna untuk pemantauan instance database secara real-time di tingkat sesi atau pernyataan SQL. Cloud SQL untuk MySQL memberikan kemampuan pemantauan serupa menggunakan Konsol Google Cloud. Anda dapat melihat informasi ringkas mengenai instance database Cloud SQL untuk MySQL dengan beberapa metrik pemantauan seperti penggunaan CPU, penggunaan penyimpanan, penggunaan memori, operasi baca/tulis, byte masuk/keluar, koneksi aktif, dan banyak lagi.

Cloud Logging mendukung metrik pemantauan tambahan untuk Cloud SQL untuk MySQL. Screenshot berikut menampilkan grafik kueri MySQL selama 12 jam terakhir.

Grafik kueri MySQL selama 12 jam terakhir.

Pemantauan replika baca MySQL

Anda dapat memantau replika baca dengan cara yang sama seperti instance utama, dengan menggunakan metrik pemantauan Konsol Google Cloud (seperti yang dijelaskan sebelumnya). Selain itu, ada metrik pemantauan khusus untuk memantau penundaan replikasi—yang menentukan jeda antara instance utama ke instance replika baca dalam hitungan detik (dapat dipantau dari tab ringkasan instance replika baca) di Konsol Google Cloud).

Anda dapat menggunakan gcloud CLI untuk mengambil status replikasi:

gcloud sql instances describe REPLICA_NAME

Anda juga dapat melakukan pemantauan replikasi dengan menggunakan perintah dari klien MySQL, yang memberikan status untuk database utama dan subordinate, serta untuk log biner dan log relai.

Anda dapat menggunakan pernyataan SQL berikut untuk memverifikasi status replika baca:

mysql> SHOW SLAVE STATUS;

Pemantauan MySQL

Bagian ini menjelaskan metode pemantauan MySQL dasar yang dianggap sebagai tugas rutin yang dilakukan oleh DBA (Oracle atau MySQL).

Pemantauan sesi

Pemantauan sesi Oracle dilakukan dengan membuat kueri tampilan performa dinamis yang dikenal sebagai tampilan "V$". Tampilan V$SESSION dan V$PROCESS biasanya digunakan untuk mendapatkan insight real-time tentang aktivitas database saat ini dengan menggunakan pernyataan SQL. Anda dapat memantau aktivitas sesi di MySQL dengan menggunakan perintah dan pernyataan SQL. Misalnya, perintah SHOW PROCESSLIST MySQL memberikan detail berikut tentang aktivitas sesi:

mysql> SHOW PROCESSLIST;

Anda juga dapat membuat kueri dan memfilter hasil SHOW PROCESSLIST dengan menggunakan pernyataan SELECT:

mysql>  SELECT * FROM information_schema.processlist;

Pemantauan transaksi yang panjang

Untuk mengidentifikasi transaksi yang berjalan lama secara real-time yang dapat menyebabkan masalah performa, Anda dapat membuat kueri tampilan dinamis information_schema.innodb_trx. Tampilan ini hanya menampilkan kumpulan data untuk transaksi terbuka yang berjalan di instance database MySQL.

Pemantauan kunci

Anda dapat memantau penguncian database dengan menggunakan tampilan dinamis information_schema.innodb_locks, yang memberikan informasi real-time tentang kemunculan kunci yang dapat menyebabkan masalah performa.