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 Cloud SQL. Per istruzioni passo passo sull'importazione dei dati in Cloud SQL, consulta Importazione dei dati.

Per esportare i dati da Cloud SQL per utilizzarli in un'istanza MySQL che gestisci, consulta Esportazione e importazione mediante file di dump SQL o Esportazione e importazione mediante file CSV.

Best practice per l'importazione e l'esportazione

Di seguito sono riportate le best practice da considerare per l'importazione e l'esportazione dei 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 senza la modalità SQL rigorosa abilitata e poi provi a importare in Cloud SQL (che abilita la modalità SQL rigorosa per impostazione predefinita), l'importazione potrebbe non riuscire. La best practice consiste nell'utilizzare per l'importazione la stessa modalità SQL utilizzata per l'esportazione.

Verifica la compatibilità della modalità SQL sia sul database di origine sia su quello di destinazione. Presta particolare attenzione ai flag che attivano la modalità SQL rigorosa. Se la modalità SQL rigida NON è impostata nel tuo database, probabilmente vorrai rimuoverla in Cloud SQL. Se rimuovi Strict SQL, devi impostare un altro flag.

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

Non utilizzare i bucket con Pagamenti del richiedente di Cloud Storage

Non puoi utilizzare un bucket Cloud Storage con l'opzione Pagamenti a carico del richiedente abilitata per le importazioni e le 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. Quando i dati esportati sono di dimensioni ridotte, l'impatto è probabilmente minimo. Tuttavia, se nel database sono presenti database di grandi dimensioni o oggetti di grandi dimensioni, come i BLOB, è possibile che l'esportazione possa peggiorare le prestazioni del database. Ciò potrebbe influire sul tempo necessario per eseguire query 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. Esegui l'esportazione da una replica di lettura. Questa potrebbe essere una buona opzione se esegui esportazioni di frequente (ogni giorno o più spesso), ma la quantità di dati esportati è ridotta. Per eseguire un'esportazione da una replica di lettura, utilizza le funzioni di esportazione della console Cloud de Confiance by S3NS , di gcloud o dell'API REST nell'istanza della replica di lettura. Per saperne di più su come creare e gestire le repliche di lettura, consulta Crea repliche di lettura.

  2. Utilizza l'esportazione serverless. Con l'esportazione serverless, Cloud SQL crea un'istanza temporanea separata per trasferire l'operazione di esportazione. L'offload dell'operazione di esportazione consente ai database nell'istanza principale di continuare a gestire le query ed eseguire le operazioni con la consueta velocità di prestazioni. 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. Utilizza la console Cloud de Confiance by S3NS , gcloud o le funzioni di esportazione dell'API REST, con il flag offload, per eseguire un'operazione di esportazione serverless.

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

    Consulta la tabella seguente per scoprire le operazioni che possono essere bloccate durante l'esecuzione di un'operazione di esportazione serverless:
    Operazione corrente Nuova operazione Bloccato?
    Qualsiasi operazione Esportazione serverless Sì
    Esportazione serverless Qualsiasi operazione, ad eccezione dell'esportazione serverless No
    Qualsiasi operazione, ad eccezione dell'esportazione serverless Qualsiasi operazione, ad eccezione dell'esportazione serverless Sì

    Un'esportazione serverless richiede più tempo rispetto a un'esportazione standard, perché la creazione dell'istanza temporanea richiede tempo. Come minimo, sono necessari più di cinque minuti, ma per i database più grandi potrebbe essere necessario più tempo. Prima di decidere quale tipo di esportazione utilizzare, valuta l'impatto su tempo, prestazioni e costi.

Utilizza i flag corretti quando crei un file di dump SQL

Se non utilizzi i flag corretti quando esporti i dati in un file di dump SQL, l'importazione potrebbe non riuscire. Per informazioni sulla creazione di un file di dump SQL da importare 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 su Cloud Storage e ridurre i costi di archiviazione, soprattutto quando esporti istanze di grandi dimensioni.

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

Riduci i processi di importazione ed esportazione a lunga esecuzione

Le importazioni in Cloud SQL e le esportazioni da Cloud SQL possono richiedere molto tempo, a seconda delle dimensioni dei dati in fase di elaborazione. Ciò può avere i seguenti impatti:

  • Non puoi interrompere un'operazione dell'istanza Cloud SQL a lunga esecuzione.
  • Puoi eseguire una sola operazione di importazione o esportazione alla volta per ogni istanza e un'importazione o esportazione di lunga durata blocca altre operazioni, come i backup automatici giornalieri. Le esportazioni serverless 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 eseguire l'esportazione da una replica di lettura o utilizzare l'esportazione serverless per ridurre al minimo l'impatto sulle prestazioni del database e consentire l'esecuzione di altre operazioni sull'istanza mentre è in corso un'esportazione.

Per altri suggerimenti, consulta Diagnosi dei problemi con le istanze Cloud SQL.

Utilizza InnoDB

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

Puoi convertire le tabelle da MyISAM a InnoDB inviando l'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 con metadati con clausola DEFINER

Poiché un job di importazione o migrazione MySQL non esegue la migrazione dei dati utente, l'importazione o la migrazione delle origini e dei file di dump che contengono metadati definiti dagli utenti con la clausola DEFINER non andrà a buon fine perché gli utenti non esistono ancora.

Per identificare i valori DEFINER presenti nei metadati, utilizza 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 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;

Per eseguire un job di importazione o migrazione da un'origine che include questi metadati, puoi procedere in uno dei seguenti modi:

  • Crea gli utenti nell'istanza Cloud SQL di destinazione prima di avviare il job di importazione o migrazione.
  • Aggiorna la clausola DEFINER in INVOKER nell'istanza MySQL di origine o nel file di dump 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 del database appropriati per assicurarti che i contenuti siano corretti. Ad esempio, connettiti ed elenca i database, le tabelle e le voci specifiche.

Limitazioni note

Per un elenco delle limitazioni note, consulta Problemi relativi all'importazione e all'esportazione dei dati.

Automazione delle operazioni di esportazione

Sebbene Cloud SQL non fornisca un modo integrato per automatizzare le esportazioni dei database, puoi creare il tuo strumento di automazione utilizzando diversi componenti di Cloud de Confiance by S3NS. Per saperne di più, consulta questo tutorial.

Risoluzione dei problemi

Le sezioni seguenti riguardano la risoluzione dei problemi relativi alle operazioni di importazione ed esportazione.

Risoluzione dei problemi relativi alle operazioni di importazione

Problema Risoluzione dei problemi
HTTP Error 409: Operation failed because another operation was already in progress. È già presente un'operazione in attesa per la tua istanza. È consentita una sola operazione alla volta. Prova a eseguire la richiesta dopo il completamento dell'operazione attuale.
L'operazione di importazione sta richiedendo troppo tempo. Un numero eccessivo di connessioni attive può interferire con le operazioni di importazione.

Chiudi le operazioni non utilizzate. Controlla l'utilizzo di CPU e memoria utilizzata della tua istanza Cloud SQL per assicurarti che siano disponibili risorse sufficienti. Il modo migliore per garantire le risorse massime per l'importazione è riavviare l'istanza prima di avviare 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 file di dump non esistono. Prima di importare un file di dump, tutti gli utenti del database che sono proprietari di oggetti o a cui sono state concesse autorizzazioni per gli oggetti nel database di cui è stato eseguito il dump devono esistere nel 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 di eseguire l'importazione.

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

Tentativi da effettuare

Aggiungi la seguente riga all'inizio del file di 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 mentre l'operazione di importazione è in corso e li riattivano dopo il caricamento dei dati. Ciò non influisce sull'integrità dei dati nel database, perché i dati sono già stati convalidati durante la creazione del file di 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. È già presente un'operazione in attesa per la tua istanza. È consentita una sola operazione alla volta. Prova a eseguire la richiesta dopo il completamento dell'operazione attuale.
HTTP Error 403: The service account does not have the required permissions for the bucket. Assicurati che il bucket esista e che il account di servizio dell'istanza Cloud SQL (che esegue l'esportazione) disponga del ruolo Storage Object Creator (roles/storage.objectCreator) per consentire l'esportazione nel bucket. Consulta Ruoli IAM per Cloud Storage.
L'esportazione in formato CSV è riuscita, ma l'esportazione in formato SQL non è andata a buon fine. 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 ti consente di definire quali elementi del database includere nell'esportazione.

Utilizza le esportazioni CSV per esportare solo ciò di cui hai bisogno.

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

Utilizza l' offload dell'esportazione. In generale, nell'offload dell'esportazione, invece di eseguire un'esportazione nell'istanza di origine, Cloud SQL avvia un'istanza di offload per eseguire l'esportazione. L'offload dell'esportazione offre diversi vantaggi, tra cui un aumento delle prestazioni nell'istanza di origine e lo sblocco delle operazioni amministrative durante l'esecuzione dell'esportazione. Con l'offload dell'esportazione, la latenza totale può aumentare del tempo necessario per attivare l'istanza di offload. In genere, per esportazioni di dimensioni ragionevoli, la latenza non è significativa. Tuttavia, se l'esportazione è di dimensioni ridotte, potresti notare un aumento della latenza.

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

Puoi creare il tuo sistema di esportazione automatizzato utilizzando i prodotti Cloud de Confiance by S3NS come Cloud Scheduler, Pub/Sub e Cloud Run Functions, analogamente a questo articolo sui backup automatici.

Passaggi successivi