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 l'utilizzo in un'istanza MySQL gestita, 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 durante l'importazione e l'esportazione dei dati:
- Utilizza la stessa modalità SQL per l'importazione e l'esportazione
- Non utilizzare i bucket Cloud Storage con pagamento da parte del richiedente
- Riduci al minimo l'impatto sulle prestazioni delle esportazioni
- Utilizza i flag corretti quando crei un file di dump SQL
- Comprimi i dati per ridurre i costi.
- Riduci i processi di importazione ed esportazione a lunga esecuzione
- Utilizza InnoDB
- Job di importazione e migrazione MySQL con metadati con clausola DEFINER
- Verifica il database importato
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 SQL Strict abilitato, quindi provi a importare in Cloud SQL (che abilita SQL Strict 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 sia nel database di origine sia in quello di destinazione per verificare la compatibilità. Presta particolare attenzione ai flag che abilitano la modalità SQL Strict. Se SQL Strict NON è impostato nel database, probabilmente dovrai rimuoverlo in Cloud SQL. Se rimuovi SQL Strict, 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 Cloud Storage con pagamento da parte del richiedente
Non puoi utilizzare un bucket Cloud Storage con pagamento da parte del richiedente abilitato 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 più piccoli, l'impatto è probabilmente minimo. Tuttavia, quando sono presenti database di grandi dimensioni o oggetti di grandi dimensioni, come i BLOB nel database, è possibile che l'esportazione possa peggiorare le prestazioni del database. Ciò potrebbe influire sul tempo necessario per eseguire query e operazioni di database sul database. Dopo aver avviato un'esportazione, non è possibile interromperla se il database inizia a rispondere lentamente.
Per evitare risposte lente durante un'esportazione, puoi:
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 è piccola. Per eseguire un'esportazione da una replica di lettura, utilizza le Google Cloud funzioni di esportazione della console,
gcloud, o dell'API REST sull'istanza della replica di lettura. Per ulteriori informazioni su come creare e gestire le repliche di lettura, consulta Creare repliche di lettura.Utilizza l'esportazione serverless. Con l'esportazione serverless, Cloud SQL crea un'istanza temporanea separata per trasferire l'operazione di esportazione. Il trasferimento dell'operazione di esportazione consente ai database sull'istanza principale di continuare a rispondere alle query ed eseguire operazioni alla velocità di prestazioni abituale. Al termine dell'esportazione dei dati, l'istanza temporanea viene eliminata automaticamente. Questa potrebbe essere una buona opzione se esegui un'esportazione una tantum di un database di grandi dimensioni. Utilizza le Google Cloud Console,
gcloud, o l'API REST funzioni di esportazione, con il flagoffload, per eseguire un'operazione di esportazione serverless.Durante un'operazione di esportazione serverless puoi eseguire altre operazioni, come la modifica dell'istanza, l'importazione e il failover. Tuttavia, se selezioni
Consulta la seguente tabella per scoprire le operazioni che possono essere bloccate durante l'esecuzione di un'operazione di esportazione serverless:delete, l'operazione di esportazione si interrompe dopo un po' di tempo dall'eliminazione dell'istanza e non esporta alcun dato.Operazione corrente Nuova operazione Bloccata? Qualsiasi operazione Esportazione serverless Sì Esportazione serverless Qualsiasi operazione tranne l'esportazione serverless No Qualsiasi operazione tranne l'esportazione serverless Qualsiasi operazione tranne l'esportazione serverless Sì Un'esportazione serverless richiede più tempo rispetto a un'esportazione standard, perché è necessario del tempo per creare l'istanza temporanea. Richiede almeno più di cinque minuti, ma per i database più grandi potrebbe essere più lungo. Prima di determinare il tipo di esportazione da 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 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ò consentire di risparmiare spazio di archiviazione significativo 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 l'estensione .gz per comprimere i dati. Quando importi un file con estensione .gz, viene decompresso automaticamente.
Riduci i processi di importazione ed esportazione a lunga esecuzione
L'importazione in Cloud SQL e l'esportazione da Cloud SQL possono richiedere molto tempo, a seconda delle dimensioni dei dati elaborati. Questo può avere i seguenti impatti:
- Non puoi interrompere un'operazione di istanza Cloud SQL a lunga esecuzione.
- Puoi eseguire una sola operazione di importazione o esportazione alla volta per ogni istanza e un'importazione o un'esportazione a lunga esecuzione 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 eseguire l'esportazione da una replica di lettura o utilizzare esportazione serverless per ridurre al minimo l'impatto sulle prestazioni del database e consentire l'esecuzione di altre operazioni sull'istanza durante l'esecuzione di un'esportazione.
Per altri suggerimenti, consulta Diagnostica 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 tramite il piping 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 con metadati con clausola DEFINER
Poiché un job di importazione o migrazione MySQL non esegue la migrazione dei dati utente, le origini e i file di dump che contengono metadati definiti dagli utenti con la clausola DEFINER non verranno importati o migrati perché gli utenti non esistono ancora.
Per identificare i valori DEFINER esistenti nei metadati, utilizza le seguenti query (o cerca nel file di dump) e verifica 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 eseguire una delle seguenti operazioni:
- Crea gli utenti nell'istanza Cloud SQL di destinazione prima di avviare il job di importazione o migrazione.
- Aggiorna la clausola
DEFINERaINVOKERnell'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 di 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 di importazione ed esportazione dei dati.
Automatizzare le operazioni di esportazione
Sebbene Cloud SQL non fornisca un modo integrato per automatizzare le esportazioni di database, puoi creare il tuo strumento di automazione utilizzando diversi Google Cloud componenti. Per saperne di più, consulta questo tutorial.
Risoluzione dei problemi
Le seguenti sezioni 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à in corso un'operazione in attesa per l'istanza. È consentita una sola operazione alla volta. Riprova a inviare la richiesta al termine dell'operazione corrente. |
| L'operazione di importazione richiede troppo tempo. | Un numero eccessivo di connessioni attive può interferire con le operazioni di importazione.
Chiudi le operazioni inutilizzate. Controlla l'utilizzo di CPU e memoria utilizzata dell'istanza Cloud SQL per assicurarti che siano disponibili molte risorse. Il modo migliore per garantire le risorse massime per l'importazione è riavviare l'istanza prima di avviare l'operazione. Un riavvio:
|
| 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 proprietari di oggetti o
a cui sono state concesse autorizzazioni sugli 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 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
l'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 durante l'operazione di importazione 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à in corso un'operazione in attesa per l'istanza. È consentita una sola operazione alla volta. Riprova a inviare la richiesta al termine dell'operazione corrente. |
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) abbia il
Storage Object Creator ruolo
(roles/storage.objectCreator) per consentire l'esportazione nel bucket. Consulta
Ruoli IAM per Cloud Storage. |
| L'esportazione CSV è riuscita, ma l'esportazione 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 essere completato. Il formato CSV ti consente di definire gli elementi del database da includere nell'esportazione.
Utilizza le esportazioni CSV per esportare solo ciò di cui hai bisogno. |
| L'esportazione richiede troppo tempo. | Cloud SQL non supporta le operazioni sincrone simultanee.
Utilizza trasferimento dell'esportazione. A livello generale, nel trasferimento dell'esportazione, anziché emettere un'esportazione sull'istanza di origine, Cloud SQL avvia un' istanza di trasferimento per eseguire l'esportazione. Il trasferimento dell'esportazione offre diversi vantaggi, tra cui un aumento delle prestazioni sull'istanza di origine e lo sblocco delle operazioni amministrative durante l'esecuzione dell'esportazione. Con il trasferimento dell'esportazione, la latenza totale può aumentare in base al tempo necessario per avviare l'istanza di trasferimento. In genere, per le esportazioni di dimensioni ragionevoli, la latenza non è significativa. Tuttavia, se l'esportazione è abbastanza piccola, allora potresti notare l'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 Google Cloud prodotti come Cloud Scheduler, Pub/Sub e funzioni Cloud Run, in modo simile a questo articolo sull' automatizzazione dei backup. |
Passaggi successivi
- Scopri come importare o esportare dati utilizzando i file di dump SQL.
- Scopri come importare ed esportare dati utilizzando i file CSV.
- Scopri come abilitare i backup automatici.
- Scopri come eseguire il ripristino dai backup.