Questa pagina fornisce best practice per l'importazione e l'esportazione dei dati con 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 Esportazione e importazione mediante file CSV.
Best practice per l'importazione e l'esportazione
Di seguito sono riportate le best practice da tenere presenti 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 a carico dell'utente che effettua la richiesta
- Ridurre al minimo l'impatto delle esportazioni sul rendimento
- Utilizzare gli indicatori corretti quando si crea un file di dump SQL
- Comprimi i dati per ridurre i costi.
- Riduci le procedure di importazione ed esportazione che richiedono molto tempo
- Utilizzare InnoDB
- Job di importazione e migrazione MySQL con metadati con clausola DEFINER
- Verificare 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 che sia attivato SQL rigoroso e provi a eseguire l'importazione in Cloud SQL (che attiva SQL rigoroso 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.
Controlla la modalità SQL sia nei database di origine che di destinazione per verificare la compatibilità. Presta particolare attenzione ai flag che attivano la modalità SQL rigorosa. Se il codice SQL rigoroso NON è impostato nel tuo database, ti consigliamo dirimuoverlo in Cloud SQL. Se rimuovi SQL rigoroso, devi impostare un altro flag.
Per verificare che nell'istanza Cloud SQL sia impostata la modalità desiderata,
esegui SELECT @@GLOBAL.sql_mode;
.
Non utilizzare i bucket Cloud Storage con pagamento a carico dell'utente che effettua la richiesta
Non puoi utilizzare un bucket Cloud Storage per il quale è attivato Chiedi al richiedente di pagare per le importazioni e le esportazioni da Cloud SQL.
Riduci al minimo l'impatto delle esportazioni sulle prestazioni
Per un'esportazione standard da Cloud SQL, l'esportazione viene eseguita mentre il database è online. Se i dati esportati sono di dimensioni ridotte, l'impatto sarà probabilmente minimo. Tuttavia, se nel database sono presenti database di grandi dimensioni o oggetti di grandi dimensioni, come i BLOB, è possibile che l'esportazione peggiori 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:
Esegui l'esportazione da una replica di lettura. Questa potrebbe essere una buona opzione se effettui spesso esportazioni (quotidianamente 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 Google Cloud Console, di
gcloud
o dell'API REST nell'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 il trasferimento dell'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. Utilizza la Google Cloud Console,
gcloud
o le funzioni di esportazione dell'API REST con il flagoffload
per eseguire un'operazione 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
Consulta la seguente tabella per informazioni sulle operazioni che possono essere bloccate durante l'esecuzione di un'operazione di esportazione serverless:delete
, l'operazione di esportazione si interrompe poco dopo l'eliminazione dell'istanza e non viene esportato alcun dato.Operazione in corso Nuova operazione Bloccato? 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 di un'esportazione standard, perché la creazione dell'istanza temporanea richiede tempo. La procedura richiede almeno cinque minuti, ma per i database più grandi potrebbe essere più lunga. Valuta l'impatto su tempo, prestazioni e costi prima di determinare quale tipo di esportazione utilizzare.
Utilizza gli indicatori corretti quando crei un file di dump SQL
Se non utilizzi gli indicatori 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 Creare un file di dump SQL.Comprimi i dati per ridurre i costi
Cloud SQL supporta l'importazione e l'esportazione di file sia compressi che non compressi. La compressione può farti 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 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
Le importazioni in Cloud SQL e le esportazioni da Cloud SQL possono richiedere molto tempo, a seconda delle dimensioni dei dati elaborati. Ciò può avere i seguenti effetti:
- Non puoi interrompere un'operazione dell'istanza Cloud SQL di lunga durata.
- Puoi eseguire una sola operazione di importazione o esportazione alla volta per ogni istanza e un'esportazione o un'importazione di lunga durata 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 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, consulta Diagnostica dei problemi relativi alle istanze Cloud SQL.Utilizzare 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 a 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
esistenti nei metadati, utilizza le seguenti query
(o cerca nel file dump) e controlla se sono presenti voci per
DEFINER
o utenti che non esistono nell'istanza di destinazione.root%localhost
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
inINVOKER
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. Ad esempio, connetti e 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 esportazione del database, puoi creare il tuo strumento di automazione utilizzando diversi componenti di Google Cloud. Per scoprire 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 non utilizzate. Controlla l'utilizzo di CPU e memoria della tua istanza Cloud SQL per assicurarti che siano disponibili moltissime risorse. Il modo migliore per garantire le risorse massime per l'importazione è riavviare l'istanza prima di iniziare l'operazione. Un riavvio:
|
Un'operazione di importazione può non andare a buon fine se 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 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 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 dump: SET FOREIGN_KEY_CHECKS=0; Inoltre, aggiungi questa riga alla fine del file 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. |
Risolvere i 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 l'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 che l'account di servizio dell'istanza Cloud SQL (che esegue l'esportazione) abbia il ruolo Storage Object Creator (roles/storage.objectCreator ) per consentire l'esportazione nel bucket. Vedi
Ruoli IAM per Cloud Storage. |
L'esportazione in formato CSV ha funzionato, ma l'esportazione in formato 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.
Utilizza le esportazioni in formato CSV per esportare solo ciò che ti serve. |
L'esportazione sta richiedendo troppo tempo. | Cloud SQL non supporta le operazioni sincrone simultanee.
Utilizza il caricamento di esportazione. A un livello generale, durante il trasferimento delle esportazioni, anziché eseguire un'esportazione sull'istanza di origine, Cloud SQL avvia un'istanza di offload per eseguire l'esportazione. Lo sgravio dell'esportazione offre diversi vantaggi, tra cui un aumento delle prestazioni dell'istanza di origine e lo sblocco delle operazioni amministrative durante l'esecuzione dell'esportazione. Con il ribaltamento dell'esportazione, la latenza totale può aumentare in base al tempo necessario per avviare l'istanza di ribaltamento. In genere, per le 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 descritto in questo articolo sull' automazione dei backup. |
Passaggi successivi
- Scopri come importare o esportare dati utilizzando file di dump SQL.
- Scopri come importare ed esportare i dati utilizzando i file CSV.
- Scopri come attivare i backup automatici.
- Scopri come eseguire il ripristino dai backup.