Migrazione degli utenti Oracle a Cloud SQL per MySQL: sicurezza, operazioni, monitoraggio e logging

Questo documento fa parte di una serie che fornisce informazioni chiave e indicazioni relative alla pianificazione e all'esecuzione delle migrazioni dei database Oracle® 11g/12c in Cloud SQL per MySQL versione 5.7, istanze di seconda generazione. La serie include le seguenti parti:

Sicurezza

Questa sezione illustra le differenze nella crittografia dei dati tra Oracle Cloud SQL per MySQL e il controllo dell'accesso di Cloud SQL per MySQL.

Crittografia dei dati Oracle

Oltre all'autenticazione utente di base e alla gestione dei privilegi utente, Oracle offre il meccanismo TDE (Transparent Data Encryption) per aggiungere un ulteriore livello di crittografia per la sicurezza dei dati at-rest a livello di sistema operativo. Una volta configurato, Oracle TDE viene implementato automaticamente dal sistema e non richiede alcuna interazione manuale da parte degli utenti. Per implementare Oracle TDE, ti consigliamo di configurarlo in modo esplicito (tramite comando) sugli oggetti del database richiesti e supportati, che possono accettare questo tipo di crittografia, ad esempio tablespace, tabella o colonna. Per gestire la sicurezza dei dati in transito, ti consigliamo di implementare una soluzione di sicurezza di rete.

Crittografia dei dati di Cloud SQL per MySQL

Google Cloud offre diversi livelli di crittografia per proteggere i dati at-rest dei clienti nei prodotti Google Cloud, tra cui Cloud SQL. Cloud SQL è criptato con la crittografia AES-128 o AES-256. Per ulteriori informazioni, consulta il seguente argomento sulla crittografia at-rest. A differenza della crittografia Oracle (che deve essere implementata tramite azioni di configurazione), Google Cloud cripta i dati at-rest dei clienti, senza alcuna azione richiesta. Dal punto di vista della conversione dello schema, non sono richieste azioni e la crittografia rimane trasparente per l'utente.

Per comprendere meglio in che modo Google Cloud gestisce la crittografia dei dati in transito, consulta Come viene gestita la crittografia per i dati in transito.

Controllo

Oracle offre diversi metodi per il controllo, tra cui quello standard e granulare. Al contrario, MySQL per impostazione predefinita non fornisce soluzioni di controllo equivalenti. Per superare questo limite, puoi utilizzare le dashboard e il monitoraggio di Google Cloud, ma per acquisire le operazioni DML/DDL del database, puoi utilizzare i log delle query lente, generali ed errori come una soluzione di controllo più solida.

Per implementare questa soluzione, ti consigliamo di utilizzare l'istanza FLAGS per abilitare il log a query lenta e il log generale. Inoltre, dovresti gestire la conservazione di questi log in base alle tue esigenze aziendali.

Puoi utilizzare gli audit log di Google Cloud per raccogliere informazioni sull'audit. Questi log coprono tre livelli principali:

  • Audit log delle attività di amministrazione (attivati per impostazione predefinita)
  • Audit log degli accessi ai dati (disabilitati per impostazione predefinita)
    • Leggi ulteriori informazioni su come configurare i log di accesso ai dati.
    • Tieni presente che gli audit log di accesso ai dati non registrano le operazioni di accesso ai dati su risorse a cui è possibile accedere senza accedere a Google Cloud.
  • Audit log degli eventi di sistema (attivati per impostazione predefinita)

Visualizzazione degli audit log di Google Cloud

Ecco il percorso di accesso per la visualizzazione degli audit log: Console Google Cloud > Home > Attività

Puoi filtrare la granularità delle informazioni tra i livelli di controllo. Il seguente screenshot mostra un controllo dell'attività dell'amministratore.

Granularità dei filtri tra i livelli di controllo.

Pagina di Cloud Logging

Ecco il percorso di accesso per la pagina di logging: Console Google Cloud > Cloud Logging

Puoi filtrare la granularità delle informazioni tra i tipi di log. Il seguente screenshot mostra un controllo di log generale (dati di controllo per istruzione utente, host e SQL).

Log di controllo generale.

Controllo dell'accesso di Cloud SQL per MySQL

Gli utenti possono connettersi all'istanza Cloud SQL per MySQL utilizzando un client MySQL con un indirizzo IP statico autorizzato oppure utilizzando il proxy Cloud SQL, in modo simile a qualsiasi altra connessione di database. Per altre origini di connessione come App Engine o Compute Engine, gli utenti hanno a disposizione varie opzioni, ad esempio l'utilizzo del proxy Cloud SQL. Queste opzioni sono descritte più nel dettaglio in Controllo dell'accesso alle istanze.

Suite operativa

Questa sezione illustra l'esportazione e l'importazione, il backup e il ripristino a livello di istanza, lo scheduler di eventi MySQL (per i job di database) e le istanze in standby per operazioni di sola lettura e ripristino di emergenza.

Esportazione e importazione

Il metodo principale di Oracle per eseguire operazioni di esportazione e importazione logiche è l'utilità Data Pump, che utilizza i comandi EXPDP/IMPDP (una versione precedente della funzionalità di esportazione/importazione di Oracle includeva i comandi exp e imp). I comandi equivalenti MySQL sono le utilità mysqldump e mysqlimport, che generano file di dump ed eseguono l'importazione a livello di database o di oggetto (tra cui solo l'esportazione e l'importazione dei metadati).

Non esiste una soluzione MySQL diretta equivalente all'utilità DBMS_DATAPUMP Oracle (il metodo Oracle per applicare la funzionalità EXPDP/IMPDP che interagisce direttamente con il pacchetto DBMS_DATAPUMP). Per eseguire la conversione dal codice PL/SQL Oracle DBMS_DATAPUMP, utilizza il codice alternativo (ad esempio Bash o Python) per implementare gli elementi logici e usa MySQL mysqldump e mysqlimport per eseguire operazioni di esportazione/importazione.

Le utilità MySQL mysqldump e mysqlimport vengono eseguite a livello di client (nell'ambito dei programmi client MySQL), connettendosi da remoto all'istanza Cloud SQL per MySQL. I file di dump vengono creati sul lato client.

mysqldump:

Un'utilità client esegue backup logici e importazioni di dati (come sql). Ciò produce un insieme di istruzioni SQL che possono essere eseguite per riprodurre le definizioni originali degli oggetti del database e i dati delle tabelle. L'utilità mysqldump può anche generare output in formato CSV, in altro testo delimitato o in formato XML. Il vantaggio principale di questo formato di output è che consente di visualizzare o modificare l'output dell'esportazione prima del ripristino, poiché si tratta di un file di testo. Lo svantaggio principale è che non è concepito come una soluzione rapida o scalabile per il backup di quantità significative di dati.

Utilizzo di mysqldump:

-- 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:

Si tratta di un programma client che fornisce un'interfaccia a riga di comando per l'istruzione SQL LOAD DATA INFILE. mysqlimport viene spesso utilizzato per importare dati da un file di testo o CSV in una tabella MySQL con una struttura corrispondente. Oracle SQL*Loader può essere convertito in mysqlimport, in quanto entrambi condividono la stessa funzionalità di caricamento dei dati da un file esterno.

Utilizzo di mysqlimport:

-- 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    |
+------+------+

Esportazione/importazione di Cloud SQL per MySQL:

I seguenti link alla documentazione illustrano come utilizzare gsutil/gcloud per interagire con l'istanza Cloud SQL e con Cloud Storage al fine di applicare le operazioni di esportazione e importazione.

Backup e ripristino a livello di istanza

La migrazione da Oracle RMAN o Data Pump è semplice e include opzioni aggiuntive di backup e ripristino (ad esempio snapshot delle VM, backup a freddo o strumenti di terze parti) a Cloud SQL per MySQL. Non sono necessarie conoscenze aggiuntive o codice. Puoi gestire questo processo utilizzando la console Google Cloud o Google Cloud CLI. Gli esempi precedenti sono stati compilati con istanze Cloud SQL di seconda generazione.

I tipi di metodi di backup del database MySQL sono backup on demand e backup automatici.

Puoi utilizzare il ripristino dell'istanza del database Cloud SQL per MySQL per ripristinare la stessa istanza, sovrascrivendo i dati esistenti o ripristinando un'istanza diversa. Cloud SQL per MySQL ti consente inoltre di ripristinare un database MySQL in un determinato point-in-time utilizzando il logging binario con l'opzione di backup automatico abilitata.

Cloud SQL per MySQL offre la possibilità di clonare una versione indipendente del database di origine. Questa funzionalità si applica solo al database principale (master) o a un altro clone e non può essere utilizzata da un'istanza di replica di lettura. Puoi utilizzare questa funzionalità anche per ripristinare un'istanza MySQL da un momento specifico, consentendo il recupero dei dati, se necessario. Puoi applicare il ripristino dei database di Cloud SQL per MySQL utilizzando la console Google Cloud o gcloud CLI.

Scheduler di eventi MySQL (job di database)

Per avviare procedure di database predefinite, la funzionalità dello scheduler di eventi MySQL è equivalente a Oracle DBMS_JOBS o Oracle DBMS_SCHEDULER. Per impostazione predefinita, il parametro del database event_scheduler è impostato su OFF. Se necessario, deve essere passato a ON utilizzando i flag Cloud SQL.

Puoi utilizzare lo scheduler di eventi MySQL per eseguire un comando DML/DDL esplicito o per pianificare una stored procedure o una funzione in un momento specifico e con una determinata logica.

Considerazione della conversione per Oracle DBMS_JOBS o DBMS_SCHEDULER:

Tutti i job Oracle devono essere convertiti in sintassi e funzionalità MySQL manualmente o utilizzando strumenti di conversione PL/SQL disponibili in commercio.

Utilizza la seguente istruzione per verificare l'attuale valore del parametro event_scheduler da un'esecuzione client:

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

Esempi di programmi di pianificazione degli eventi:

  • DBMS_SCHEDULER di Oracle

    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;
    /
    
  • Conversione 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);
    
  • Metadati dello scheduler di eventi MySQL:

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

Istanze in standby per l'implementazione di operazioni di sola lettura e ripristino di emergenza

Oracle Active Data Guard consente a un'istanza di standby di fungere da endpoint di sola lettura mentre i nuovi dati vengono ancora applicati tramite i log di ripetizione e archiviazione. Puoi anche utilizzare Oracle GoldenGate per abilitare un'istanza aggiuntiva per scopi di lettura mentre le modifiche ai dati vengono applicate in tempo reale, fungendo da soluzione Change Data Capture (CDC).

Cloud SQL per MySQL supporta la separazione di lettura/scrittura utilizzando repliche di lettura per indirizzare qualsiasi lettura o carico di lavoro di analisi dall'origine principale a un'origine replicata alternativa quasi in tempo reale. Puoi applicare le impostazioni per le repliche di lettura di Cloud SQL per MySQL utilizzando la console Google Cloud o gcloud CLI.

Cloud SQL per MySQL supporta opzioni di replica aggiuntive: replica su un'istanza MySQL esterna e replica da un'istanza MySQL esterna.

Puoi implementare Oracle Active Data Guard e Oracle GoldenGate come soluzione di ripristino di emergenza (RE), aggiungendo un'istanza di standby già sincronizzata con l'istanza principale.

Le repliche di lettura di Cloud SQL per MySQL non sono destinate a fungere da istanze di standby per gli scenari di RE. A questo scopo, Cloud SQL offre la possibilità di configurare un'istanza MySQL per l'alta disponibilità (utilizzando la console Google Cloud o gcloud CLI).

Alcune operazioni potrebbero richiedere il riavvio dell'istanza (ad esempio, l'aggiunta ad alta disponibilità a un'istanza principale esistente). Dal punto di vista dello SLA (accordo sul livello del servizio) ad alta disponibilità, se l'istanza principale non risponde per circa 60 secondi, l'istanza in standby ad alta disponibilità sarà disponibile al momento della riconnessione. Per abilitare l'alta disponibilità per Cloud SQL per MySQL, consulta le seguenti instructions.

Logging e monitoraggio

Il file di log degli avvisi di Oracle è l'origine principale per identificare gli eventi generali di sistema e gli eventi di errore al fine di comprendere il ciclo di vita di qualsiasi istanza del database Oracle (principalmente per la risoluzione degli eventi di errore e degli eventi di errore).

Il log degli avvisi Oracle mostra informazioni su quanto segue:

  • Avvisi e errori dell'istanza del database Oracle (ORA- + numero di errore).
  • Eventi di avvio e arresto dell'istanza del database Oracle.
  • Problemi relativi alla rete e alla connessione.
  • Eventi di passaggio dei log di ripristino del database.
  • I file di traccia Oracle potrebbero essere menzionati con un link per ulteriori dettagli su un evento di database specifico.

Inoltre, Oracle fornisce file di log dedicati per diversi servizi come LISTENER, ASM ed Enterprise Manager (OEM), che non hanno componenti equivalenti in Cloud SQL per MySQL.

Tipi di log di Cloud SQL per MySQL:

Tipo di log MySQL Descrizione Note
Log delle attività Contiene dati sulle chiamate API o altre azioni amministrative che modificano la configurazione o i metadati di un'istanza Cloud SQL per MySQL. Questo log è uno dei tre log nel gruppo Cloud Audit Logs.
Log degli accessi ai dati Contiene dati sulle chiamate API che leggono la configurazione o i metadati delle risorse, nonché le chiamate API gestite dall'utente che creano, modificano o leggono i dati delle risorse forniti dall'utente. Questo log è uno dei tre log nel gruppo Cloud Audit Logs. Tieni presente che questo log registra solo le operazioni di accesso ai dati sulle istanze MySQL per gli eventi a cui è possibile accedere senza accedere a Google Cloud.

mysql.err
Questo è il file di log principale di MySQL, che può essere confrontato con il log degli avvisi di Oracle. Entrambi i log contengono il logging degli eventi delle istanze di database, come eventi di avvio e arresto ed eventi di errore e avviso. Guida ai messaggi di errore MySQL 5.7.

mysql-slow.log
Il log delle query lente di MySQL raccoglie dati sulle query che superano la configurazione predefinita, ad esempio ogni query con un tempo di esecuzione superiore a 2 secondi (il valore predefinito è 10 secondi). Opzione disabilitata per impostazione predefinita. Per abilitare questo log, imposta le seguenti variabili (parametri del database):

  • slow_query_log
  • long_query_time

mysql-general.log
Questo log raccoglie dati sulle connessioni e sulle disconnessioni dei client e su qualsiasi istruzione SQL eseguita sull'istanza di database MySQL. Questo log è utile per la risoluzione dei problemi e di solito viene impostato su OFF al termine dell'operazione. Disabilitate per impostazione predefinita, per attivare le variabili general_log deve essere impostata su ON.
Log binario Il server MySQL utilizza il logging binario per registrare tutte le istruzioni che hanno modificato i dati. L'utilizzo principale di questo log è per backup e replica. Per impostazione predefinita, il parametro di logging binario è abilitato in Cloud SQL per MySQL per abilitare il deployment del ripristino e delle repliche di lettura. Per abilitare il logging binario, imposta il parametro di configurazione log_bin su ON.
Log di inoltro Contiene le istruzioni ricevute dai log binari principali per implementare tutte le modifiche ai dati nell'istanza subordinata (replica di lettura). Si applica solo alle istanze secondarie (slave) e alle repliche di lettura.

Visualizzazione dei log delle operazioni di Cloud SQL per MySQL

Cloud Logging è la piattaforma principale per visualizzare tutti i dettagli dei log. Puoi selezionare diversi log e filtrare in base al livello di evento dei log, ad esempio Critico, Errore o Avviso. Sono inoltre disponibili il periodo di tempo degli eventi e il filtro di testo gratuito.

Visualizzazione dei log in Cloud Logging.

Esempio

Il seguente screenshot mostra l'individuazione di una query specifica nel file mysql-slow.log utilizzando un intervallo di tempo personalizzato come criterio di filtro.

Ricerca di una query in mysql-slow.log.

Monitoraggio delle istanze del database MySQL

Le dashboard di monitoraggio dell'interfaccia utente principali di Oracle fanno parte dei prodotti OEM e Grid/Cloud Control (ad esempio, Top Activity Graphs) e sono utili per il monitoraggio in tempo reale delle istanze di database a livello di sessione o di istruzione SQL. Cloud SQL per MySQL offre funzionalità di monitoraggio simili utilizzando la console Google Cloud. Puoi visualizzare un riepilogo delle istanze di database Cloud SQL per MySQL con più metriche di monitoraggio come utilizzo della CPU, utilizzo dello spazio di archiviazione, utilizzo della memoria, operazioni di lettura/scrittura, byte in entrata/in uscita, connessioni attive e altro ancora.

Cloud Logging supporta metriche di monitoraggio aggiuntive per Cloud SQL per MySQL. Il seguente screenshot mostra il grafico delle query MySQL delle ultime 12 ore.

MySQL esegue query sui grafici delle ultime 12 ore.

Monitoraggio della replica di lettura MySQL

Puoi monitorare le repliche di lettura in modo simile a un'istanza principale, utilizzando le metriche di monitoraggio della console Google Cloud (come descritto in precedenza). Inoltre, è disponibile una metrica di monitoraggio dedicata per monitorare il ritardo di replica, che determina il ritardo tra l'istanza principale e l'istanza della replica di lettura in secondi (può essere monitorata dalla scheda della panoramica dell'istanza della replica di lettura nella console Google Cloud).

Puoi utilizzare gcloud CLI per recuperare lo stato di replica:

gcloud sql instances describe REPLICA_NAME

Puoi anche eseguire il monitoraggio della replica utilizzando i comandi di un client MySQL, che fornisce uno stato per i database principali e subordinati e per il log binario e il log di inoltro.

Puoi utilizzare la seguente istruzione SQL per verificare lo stato della replica di lettura:

mysql> SHOW SLAVE STATUS;

Monitoraggio MySQL

Questa sezione descrive i metodi di monitoraggio di base di MySQL che sono considerati attività di routine eseguite da un responsabile del database (Oracle o MySQL).

Monitoraggio delle sessioni

Il monitoraggio delle sessioni Oracle viene eseguito eseguendo una query sulle viste dinamiche delle prestazioni note come viste "V$". Le viste V$SESSION e V$PROCESS vengono comunemente utilizzate per ottenere insight in tempo reale sull'attività attuale del database utilizzando istruzioni SQL. Puoi monitorare l'attività delle sessioni in MySQL utilizzando comandi ed istruzioni SQL. Ad esempio, il comando MySQL SHOW PROCESSLIST fornisce i seguenti dettagli sull'attività delle sessioni:

mysql> SHOW PROCESSLIST;

Puoi anche eseguire query e filtrare i risultati di SHOW PROCESSLIST utilizzando un'istruzione SELECT:

mysql>  SELECT * FROM information_schema.processlist;

Monitoraggio delle transazioni lunghe

Per identificare in tempo reale le transazioni a lunga esecuzione che potrebbero causare problemi di prestazioni, puoi eseguire query sulla vista dinamica information_schema.innodb_trx. Questa visualizzazione mostra solo i record per le transazioni aperte in esecuzione nell'istanza del database MySQL.

Monitoraggio blocchi

Puoi monitorare i blocchi del database utilizzando la visualizzazione dinamica information_schema.innodb_locks, che fornisce informazioni in tempo reale sulle occorrenze dei blocchi che potrebbero causare problemi di prestazioni.