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

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

Sicurezza

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

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. Dopo la configurazione, Oracle TDE sia implementata dal sistema in modo automatico e non richiede interazione da parte degli utenti. Per implementare Oracle TDE, ti consigliamo configurazione in modo esplicito (tramite comando) sul database richiesto e supportato in grado di accettare questo tipo di crittografia, ad esempio tablespace, in una tabella o in una 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 fornisce diversi livelli di crittografia per proteggere i dati inattivi dei clienti nei prodotti Google Cloud, tra cui Cloud SQL. Cloud SQL è criptato utilizzando 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 l'azione richiesta. Dal punto di vista della conversione dello schema, nessuna azione viene e la crittografia rimane trasparente per l'utente.

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

Controllo

Oracle offre diversi metodi per l'auditing, ad esempio quelli standard e granulari e l'auditing. Al contrario, MySQL per impostazione predefinita non fornisce soluzioni di controllo equivalenti. Per superare questa limitazione, puoi utilizzare le dashboard e il monitoraggio di Google Cloud, ma per acquisire le operazioni DML/DDL del database, puoi utilizzare i log di 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 delle query lente e il log generale. Inoltre, deve gestire la conservazione di questi log in base alle esigenze della tua attività.

Puoi utilizzare gli audit log di Google Cloud per raccogliere le informazioni sugli audit. Questi i log coprono tre livelli principali:

  • Log di controllo delle attività di amministrazione (attivati per impostazione predefinita)
  • Audit log dell'accesso ai dati (disattivati per impostazione predefinita)
    • Leggi 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 sulle risorse a cui è possibile accedere senza accedere a Google Cloud.
  • Audit log degli eventi di sistema (abilitati 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 page > Attività

Puoi filtrare la granularità delle informazioni tra i livelli di controllo. Le seguenti uno screenshot mostra un controllo dell'attività di amministrazione.

Livello di granularità dei filtri tra i livelli di controllo.

Pagina 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. Lo screenshot seguente mostra un controllo dei log generici (dati di controllo per utente, host e statement 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 database MySQL con un indirizzo IP statico autorizzato o utilizzando Proxy Cloud SQL, in modo simile a qualsiasi altra connessione al database. Per altre connessioni come App Engine o Compute Engine, gli utenti hanno varie opzioni come l'utilizzo del proxy Cloud SQL. Queste opzioni sono descritte in maggiore dettaglio nel dettaglio Controllo dell'accesso all'istanza.

Operazioni

Questa sezione illustra l'esportazione e l'importazione, il backup e il ripristino a livello di istanza, il pianificatore degli eventi MySQL (per i job del database) e le istanze di standby per le operazioni di sola lettura e il 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). La I comandi MySQL equivalenti sono le utilità mysqldump e mysqlimport. che generano file di dump ed eseguono l'importazione su un database o un oggetto (inclusa l'esportazione e l'importazione solo dei metadati).

Non esiste una soluzione diretta MySQL equivalente per Oracle DBMS_DATAPUMP (il metodo Oracle per applicare la funzionalità EXPDP/IMPDP interagendo direttamente con il pacchetto DBMS_DATAPUMP). Per convertire dal codice PL/SQL Oracle DBMS_DATAPUMP, usa codice alternativo (ad esempio Bash o Python) per implementare e utilizza MySQL mysqldump e mysqlimport per eseguire l'esportazione/l'importazione operazioni aziendali.

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

mysqldump:

Un'utilità client esegue backup logici e importazioni di dati (come sql). Questo produce un insieme di istruzioni SQL che possono essere eseguite per riprodurre le definizioni degli oggetti di database e i dati delle tabelle originali. L'utilità mysqldump può anche generare un output in formato CSV, in altro testo delimitato o in formato XML. Il principale vantaggio di questo formato di output è che ti consente di visualizzare o modificare l'output dell'esportazione prima del ripristino, in quanto si tratta di un file di testo. Lo svantaggio principale è che non è intesa come una soluzione rapida o scalabile per il backup di quantità sostanziali 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 file di testo o CSV in una tabella MySQL con una struttura corrispondente. Oracle SQL*Loader può essere convertito in mysqlimport poiché entrambi condividono lo stesso la 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 il gcloud CLI per interagire con l'istanza Cloud SQL e con Cloud Storage per applicare Esporta e Importa operazioni aziendali.

Backup e ripristino a livello di istanza

È una semplice operazione per migrare da Oracle RMAN o Data Pump e includere opzioni aggiuntive di backup e ripristino (ad esempio snapshot delle VM, backup freddo, di terze parti) a Cloud SQL per MySQL. Non è richiesto codice o conoscenza aggiuntiva. Puoi gestire questa procedura utilizzando il console Google Cloud o Google Cloud CLI. Gli esempi precedenti sono stati compilati con istanze Cloud SQL di seconda generazione.

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

Puoi utilizzare il ripristino dell'istanza di database Cloud SQL per MySQL per eseguire il ripristino nella stessa istanza, sovrascrivendo i dati esistenti o in un'altra istanza. Cloud SQL per MySQL ti consente anche di ripristinare un database MySQL a un momento specifico 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'altra copia e non può essere estratta 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 recupero del database Cloud SQL per MySQL utilizzando la console Google Cloud o l'interfaccia a riga di comando gcloud.

Programma degli eventi MySQL (job di database)

Per avviare procedure di database predefinite, la funzionalità MySQL pianificatore di eventi e equivale a Oracle DBMS_JOBS o Oracle DBMS_SCHEDULER. Per impostazione predefinita, Il parametro di database event_scheduler è impostato su OFF. Se necessario, passaggio a ON con Cloud SQL flag.

Puoi utilizzare lo scheduler di eventi MySQL per eseguire un comando DML/DDL esplicito o pianificare una stored procedure o una funzione a un'ora specifica e con un logica.

Considerazione della conversione per Oracle DBMS_JOBS o DBMS_SCHEDULER:

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

Utilizza la seguente istruzione per verificare l'attuale parametro event_scheduler dall'esecuzione di un client:

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

Esempi di pianificatori di eventi:

  • 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;
    /
    
  • Conversione EVENT di 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 di standby per operazioni di sola lettura e implementazione del 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 reintegrazione e di archivio. Puoi anche utilizzare Oracolo GoldenGate per abilitare un'istanza aggiuntiva a scopo di lettura, mentre le modifiche dei dati applicati in tempo reale, fungendo da soluzione Change Data Capture (CDC).

Cloud SQL per MySQL supporta la separazione in lettura/scrittura utilizzando repliche di lettura per indirizzare eventuali letture o carichi di lavoro di analisi dall'istanza principale a un'origine alternativa replicata quasi in tempo reale. Puoi applicare le impostazioni per Eseguire le repliche di lettura di Cloud SQL per MySQL utilizzando la console Google Cloud oppure con 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 disastro di ripristino (RE), aggiungendo un'istanza in standby già sincronizzata con dell'istanza principale.

Le repliche di lettura di Cloud SQL per MySQL non sono destinate a fungere da istanze di standby per gli scenari di RP, 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 alta disponibilità a un'istanza principale esistente). Da uno SLA (accordo sul livello del servizio) ad alta disponibilità punto di vista, se l'annuncio principale non risponde per circa 60 secondi, il Istanza in standby ad alta disponibilità sarà disponibile al momento della riconnessione. Per attivare l'HA per Cloud SQL per MySQL, consulta le seguenti istruzioni.

Logging e monitoraggio

Il file di log degli avvisi di Oracle è la fonte principale per identificare il sistema generale ed eventi di errore al fine di comprendere le istanze del database Oracle del ciclo di vita (principalmente la risoluzione dei problemi relativi a eventi di errore ed eventi di errore).

Nel log degli avvisi Oracle vengono visualizzate informazioni su quanto segue:

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

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 su 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 in Cloud Audit Logs .
Log di accesso ai dati Contiene i dati sulle chiamate API che leggono la configurazione o i metadati dei risorse, nonché chiamate API basate sull'utente che creano, modificano o leggono forniti dall'utente. Questo log è uno dei tre log del gruppo Cloud Audit Logs. Tieni presente che questo log registra solo le operazioni di accesso ai dati attive Istanze MySQL per eventi a cui è possibile accedere senza accedere a in Google Cloud.
mysql.err
Si tratta del file log principale di MySQL, che può essere confrontato con il log degli avvisi di Oracle. Entrambi i log contengono logging degli eventi delle istanze di database, ad esempio eventi di avvio e arresto e eventi di errore e avviso. Guida ai messaggi di errore di MySQL 5.7.
mysql-slow.log
Il log delle query lente di MySQL raccoglie i 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). Disattivata per impostazione predefinita. Per abilitare questo log, imposta le variabili seguenti (parametri del database):

  • slow_query_log
  • long_query_time
mysql-general.log
Questo log raccoglie dati sulle connessioni e disconnessioni dei client e su qualsiasi eseguita sull'istanza del database MySQL. Questo log è utile per la risoluzione dei problemi e di solito viene impostato su OFF al termine dell'operazione. Disabilitata per impostazione predefinita per abilitare le variabili general_log deve essere impostato 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 il backup e la replica. Per impostazione predefinita, il parametro di logging binario è abilitato in Cloud SQL per MySQL per abilitare il recupero e il deployment delle repliche di lettura. Per attivare il logging binario, imposta il parametro di configurazione log_bin su ON.
Log di inoltro Contiene gli statement ricevuti dai log binari principali per implementare tutte le modifiche ai dati nell'istanza secondaria (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 dell'evento di log (ad esempio Critico, Errore o Avviso). Sono inoltre disponibili il periodo di tempo dell'evento e il filtro di testo libero.

Visualizzazione dei log in Cloud Logging.

Esempio

Lo screenshot seguente mostra la ricerca di una query specifica nel mysql-slow.log file utilizzando un periodo di tempo personalizzato come criterio di filtro.

Individuazione di una query in mysql-slow.log.

Monitoraggio delle istanze di database MySQL

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

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

Grafici delle query MySQL per le 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, esiste una metrica di monitoraggio dedicata per il monitoraggio del ritardo della replica, che determina il ritardo tra l'istanza principale e l'istanza di replica di lettura in secondi (può essere monitorata dalla scheda Panoramica dell'istanza di replica di lettura nella console Google Cloud).

Puoi utilizzare gcloud CLI per recuperare stato della 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 secondari e per il log binario e il log di inoltro.

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

mysql> SHOW SLAVE STATUS;

Monitoraggio di MySQL

Questa sezione descrive i metodi di monitoraggio MySQL di base considerati Attività di routine eseguite da un DBA (Oracle o MySQL).

Monitoraggio delle sessioni

Il monitoraggio della sessione Oracle viene eseguito mediante una query sulle viste del rendimento dinamico noto come "V$" visualizzazioni. Le visualizzazioni V$SESSION e V$PROCESS sono comunemente utilizzato per ottenere insight in tempo reale sull'attività corrente del database, utilizzando SQL istruzioni. Puoi monitorare l'attività della sessione in MySQL utilizzando comandi e comandi SQL. Ad esempio, il comando MySQL SHOW PROCESSLIST fornisce i seguenti dettagli sull'attività della sessione:

mysql> SHOW PROCESSLIST;

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

mysql>  SELECT * FROM information_schema.processlist;

Monitoraggio delle transazioni lunghe

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

Monitoraggio della serratura

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