Best practice per l'importazione e l'esportazione dei dati

Questa pagina fornisce le best practice per l'importazione e l'esportazione dei dati con in Cloud SQL. Per istruzioni dettagliate sull'importazione dei dati in Cloud SQL, consulta Importazione dei dati.

Per esportare i dati da Cloud SQL per utilizzarli in un'istanza MySQL gestita da te, consulta Esportazione e importazione mediante file di dump SQL o Esporta e importa utilizzando file CSV.

Best practice per l'importazione e l'esportazione

Di seguito sono riportate le best practice da tenere presenti durante l'importazione e per esportare i dati:

Utilizza la stessa modalità SQL per l'importazione e l'esportazione

L'impostazione della modalità SQL influisce sul modo in cui Cloud SQL interpreta le query SQL. Ad esempio: se esporti da un database in cui non è abilitato il linguaggio SQL rigoroso, prova a eseguire l'importazione Cloud SQL (che abilita il livello SQL restrittivo per impostazione predefinita), l'importazione potrebbe non riuscire. La best practice consiste nell'utilizzare la stessa modalità SQL per l'importazione utilizzata per l'esportazione.

Esamina la modalità SQL sul database di origine e di destinazione per verificarne la compatibilità. Presta particolare attenzione ai flag che abilitano la modalità SQL restrittiva. Se il codice SQL rigoroso NON è impostato nel tuo database, ti consigliamo dirimuoverlo in Cloud SQL. Se rimuovi il codice SQL più rigoroso, devi impostare un altro flag.

Per verificare che per l'istanza Cloud SQL sia impostata la modalità desiderata, esegui SELECT @@GLOBAL.sql_mode;.

Non utilizzare i bucket Cloud Storage per i pagamenti a carico del richiedente

Non puoi utilizzare un bucket Cloud Storage con L'opzione Pagamenti a carico del richiedente è stata attivata per importazioni ed esportazioni da Cloud SQL.

Riduci al minimo l'impatto sulle prestazioni delle esportazioni

Per un'esportazione standard da Cloud SQL, l'esportazione viene eseguita mentre il database è online. Se i dati da esportare sono di dimensioni ridotte, l'impatto sarà probabilmente minimo. Tuttavia, in presenza di database di grandi dimensioni o oggetti di grandi dimensioni, come i BLOB nella esiste la possibilità che l'esportazione riduca il database le prestazioni dei dispositivi. Ciò potrebbe influire sul tempo necessario per eseguire le query sul database e operazioni sul database. Una volta avviata un'esportazione, non è possibile interromperla se il database inizia a rispondere lentamente.

Per evitare risposte lente durante un'esportazione, puoi:

  1. Acquisisci l'esportazione da una replica di lettura. Potrebbe essere una buona opzione effettua le esportazioni di frequente (ogni giorno o più spesso), ma la quantità di dati esportate è di dimensioni ridotte. Per eseguire un'esportazione da una replica di lettura, utilizza Funzioni di esportazione Google Cloud Console, gcloud o dell'API REST nella replica di lettura in esecuzione in un'istanza Compute Engine. Vedi Crea repliche di lettura per saperne di più su come creare e gestire di repliche di lettura.

  2. Utilizza l'esportazione serverless. Con l'esportazione serverless, Cloud SQL crea un'istanza temporanea separata per non sovraccaricare l'operazione di esportazione. Il trasferimento dell'operazione di esportazione consente ai database dell'istanza principale di continuare a elaborare query ed eseguire operazioni con la normale velocità. Al termine dell'esportazione dei dati, l'istanza temporanea viene eliminata automaticamente. Questa potrebbe essere una buona opzione se stai eseguendo un'esportazione una tantum di un database di grandi dimensioni. Usa la Google Cloud Console, gcloud o REST API funzioni di esportazione, con il flag offload, per eseguire una di esportazione serverless.

    Durante un'operazione di esportazione serverless puoi eseguire altre operazioni, come la modifica, l'importazione e il failover dell'istanza. Tuttavia, se selezioni delete, l'operazione di esportazione si interrompe poco dopo l'eliminazione dell'istanza e non viene esportato alcun dato.

    Consulta la seguente tabella per informazioni sulle operazioni che possono essere bloccate durante l'esecuzione di un'operazione di esportazione serverless:
    Operazione attuale Nuova operazione Bloccato?
    Qualsiasi operazione Esportazione serverless
    Esportazione serverless Qualsiasi operazione tranne l'esportazione serverless No
    Qualsiasi operazione tranne l'esportazione serverless Qualsiasi operazione tranne l'esportazione serverless

    Un'esportazione serverless richiede più tempo rispetto a un'esportazione standard, per creare l'istanza temporanea. La procedura richiede almeno cinque minuti, ma per i database più grandi potrebbe essere più lunga. Considera l'impatto su in termini di tempo, prestazioni e costi prima di determinare il tipo di esportazione da utilizzare.

Utilizza i flag corretti quando crei un file di dump SQL

Se non utilizzi i flag giusti quando esporti i dati in un dump SQL l'importazione potrebbe non riuscire. Per informazioni sulla creazione di un File di dump SQL per l'importazione in Cloud SQL, consulta Creazione di un file di dump SQL.

Comprimi i dati per ridurre i costi

Cloud SQL supporta l'importazione e l'esportazione di file compressi e non compressi. La compressione può far risparmiare molto spazio di archiviazione Cloud Storage e di ridurre i costi di archiviazione, soprattutto e l'esportazione di istanze di grandi dimensioni.

Quando esporti un file di dump SQL o CSV, utilizza un'estensione file .gz per comprimere i dati. Quando importi un file con un'estensione .gz, viene decompresso automaticamente.

Riduci le procedure di importazione ed esportazione che richiedono molto tempo

Il completamento delle importazioni in Cloud SQL e delle esportazioni da Cloud SQL può richiedere molto tempo, a seconda delle dimensioni dei dati da elaborare. Ciò può avere le seguenti conseguenze:

  • Non puoi arrestare un'operazione di un'istanza Cloud SQL a lunga esecuzione.
  • Puoi eseguire una sola operazione di importazione o esportazione alla volta per ogni istanza e un'operazione L'importazione o l'esportazione blocca altre operazioni, come i backup automatici giornalieri. Le esportazioni serverless ti consentono di eseguire altre operazioni, tra cui la modifica delle istanze, l'importazione, il failover e lo sblocco dei backup automatici giornalieri.

Puoi ridurre il tempo necessario per completare ogni operazione utilizzando la funzionalità di importazione o esportazione di Cloud SQL con batch di dati più piccoli.

Per le esportazioni, puoi eseguirle da una replica di lettura o utilizzare l'esportazione serverless per minimizzare l'impatto sulle prestazioni del database e consentire l'esecuzione di altre operazioni sull'istanza durante l'esecuzione di un'esportazione.

Per altri suggerimenti, vedi Diagnosi in corso Problemi con le istanze Cloud SQL.

Utilizzare InnoDB

InnoDB è l'unico motore di archiviazione supportato per le istanze MySQL.

Puoi convertire le tabelle da MyISAM a InnoDB eseguendo la pipeline dell'output di mysqldump tramite uno script sed come segue:

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

Job di importazione e migrazione MySQL contenenti metadati con clausola DEFINER

Poiché un job di importazione o migrazione MySQL non esegue la migrazione dei dati utente, le origini e i file dump che contengono metadati definiti dagli utenti con la clausola DEFINER non verranno importati o sottoposti a migrazione perché gli utenti non esistono ancora lì.

Per identificare i valori DEFINER presenti nei metadati, usa le seguenti query (o cerca nel file di dump) e controlla se sono presenti voci per root%localhost o utenti che non esistono nell'istanza di destinazione.

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;

Per eseguire un job di importazione o migrazione da un'origine che include questi metadati, puoi procedere nel seguente modo:

  • Crea gli utenti nell'istanza Cloud SQL di destinazione prima di avviare il job di importazione o migrazione.
  • Aggiorna la clausola DEFINER in INVOKER sull'istanza MySQL o sul file dump di origine prima di avviare il job di importazione o migrazione.

Verifica il database importato

Al termine di un'operazione di importazione, connettiti al database ed esegui i comandi appropriati per assicurarti che i contenuti siano corretti. Per ad esempio connect e per elencare database, tabelle e voci specifiche.

Limitazioni note

Per un elenco delle limitazioni note, vedi Problemi con l'importazione e l'esportazione dei dati.

Automatizzare le operazioni di esportazione

Sebbene Cloud SQL non fornisca un modo integrato per automatizzare le esportazione del database, puoi creare il tuo strumento di automazione utilizzando diversi componenti di Google Cloud. Per saperne di più, consulta questo tutorial.

Risoluzione dei problemi

Risolvere i problemi relativi alle operazioni di importazione

Problema Risoluzione dei problemi
HTTP Error 409: Operation failed because another operation was already in progress. Esiste già un'operazione in attesa per l'istanza. È consentita una sola operazione alla volta. Prova a eseguire la richiesta al termine dell'operazione in corso.
L'operazione di importazione sta richiedendo troppo tempo. Troppe connessioni attive possono interferire con le operazioni di importazione.

Chiudi le operazioni inutilizzate. Controlla l'utilizzo di CPU e memoria del tuo Cloud SQL per verificare che sono disponibili numerose risorse. Il modo migliore per garantire le risorse massime per l'importazione è riavviare l'istanza prima di iniziare l'operazione.

Un riavvio:

  • Chiude tutte le connessioni.
  • Termina tutte le attività che potrebbero consumare risorse.
Un'operazione di importazione può non riuscire quando uno o più utenti a cui viene fatto riferimento nel il file di dump non esiste. Prima di importare un file di dump, tutti gli utenti del database che possiedono gli oggetti a cui sono state concesse le autorizzazioni per gli oggetti nel database di cui è stato eseguito il dump, database di destinazione. In caso contrario, l'operazione di importazione non riesce a ricreare gli oggetti con la proprietà o le autorizzazioni originali.

Crea gli utenti del database prima dell'importazione.

Un'operazione di importazione non riesce con un errore che indica che una tabella non esiste. Le tabelle possono avere dipendenze di chiave esterna su altre tabelle e, a seconda del tipo in ordine delle operazioni, una o più di queste tabelle potrebbero non esistere durante l'operazione di importazione.

Tentativi da effettuare

Aggiungi la seguente riga all'inizio del file dump:

SET FOREIGN_KEY_CHECKS=0;
  

Inoltre, aggiungi questa riga alla fine del file di dump:

SET FOREIGN_KEY_CHECKS=1;
  

Queste impostazioni disattivano i controlli di integrità dei dati durante l'operazione di importazione e li riattivano dopo il caricamento dei dati. Ciò non influisce sull'integrità dei dati nel database, poiché i dati sono stati già convalidati durante la creazione del file dump.

Risoluzione dei problemi relativi alle operazioni di esportazione

Problema Risoluzione dei problemi
HTTP Error 409: Operation failed because another operation was already in progress. Esiste già un'operazione in attesa per la tua istanza. È consentita una sola operazione alla volta. Prova a eseguire la richiesta al termine dell'operazione in corso.
HTTP Error 403: The service account does not have the required permissions for the bucket. Assicurati che il bucket esista e l'account di servizio per Cloud SQL istanza (che sta eseguendo l'esportazione) ha Ruolo Storage Object Creator (roles/storage.objectCreator) per consentire l'esportazione nel bucket. Consulta: Ruoli IAM per Cloud Storage.
L'esportazione in formato CSV ha funzionato, ma l'esportazione in SQL non è riuscita. I formati CSV e SQL vengono esportati in modo diverso. Il formato SQL esporta l'intero database e probabilmente richiede più tempo per il completamento. Il formato CSV consente di definire gli elementi del database da includere nell'esportazione.

Utilizzare le esportazioni CSV ed esportare solo ciò che serve.

L'esportazione sta richiedendo troppo tempo. Cloud SQL non supporta le operazioni sincrone simultanee.

Utilizza il caricamento di esportazione. A livello generale, in fase di offloading delle esportazioni, anziché eseguendo un'esportazione sull'istanza di origine, Cloud SQL avvia per eseguire l'esportazione. La distribuzione dell'esportazione ha diverse vantaggi, tra cui l'aumento delle prestazioni sull'istanza di origine e sblocco di operazioni amministrative durante l'esecuzione dell'esportazione. Con dell'esportazione, la latenza totale può aumentare in base alla quantità di tempo richiesta per visualizzare l'istanza di offload. In genere, per esportazioni di dimensioni ragionevoli, la latenza non è significativa. Tuttavia, se l'esportazione è abbastanza piccola, potresti notare un aumento della latenza.

Vuoi che le esportazioni siano automatiche. Cloud SQL non fornisce un modo per automatizzare le esportazioni.

Puoi creare il tuo sistema di esportazione automatica utilizzando i prodotti Google Cloud come Cloud Scheduler, Pub/Sub e le funzioni Cloud Run, come spiegato in questo articolo sull' automazione dei backup.

Passaggi successivi