Migrazione a Databases for MySQL
Esistono due opzioni per migrare i dati dai database MySQL esistenti a IBM Cloud® Databases for MySQL. Consigliamo due opzioni: mysqldump
e mydumper
. Il miglior strumento per te dipende da determinate condizioni, tra
cui la connessione di rete, la dimensione del tuo dataset e le esigenze di schema intermedio.
Prima di iniziare
Prima di iniziare la migrazione dei dati, è necessario MySQL installato localmente in modo da avere gli strumenti mysql
e mysqldump
.
MySQL Workbench fornisce anche uno strumento grafico per la gestione dei server e dei database MySQL . Pur non strettamente richiesto, il Cloud Databases CLI rende anche semplice la connessione e il ripristino ad una nuova distribuzione Databases for MySQL .
mysqldump
Questa utility client MySQL nativa si installa per impostazione predefinita e può eseguire backup logici, riproducendo la struttura della tabella e i dati, senza copiare i file di dati reali. mysqldump scarica uno o più database MySQL per il backup o il trasferimento in un altro server MySQL . Per ulteriori informazioni, consultare la documentazione mysqldump.
mysqldump
è opportuno utilizzare nelle seguenti condizioni:
- Il dataset è inferiore a 10 GB.
- Il tempo di migrazione non è critico e il costo di riprovare la migrazione è basso.
- Non è necessario effettuare alcun schema intermedio o trasformazioni di dati.
Non consigliamo mysqldump se una delle seguenti condizioni sono soddisfatte:
- Il tuo dataset è più grande di 10 GB.
- La connessione di rete tra i database di origine e di destinazione è instabile o lenta.
Segui questi passi utilizzando lo strumento mysqldump
:
Eseguire mysqldump
sul proprio database di origine per creare un file SQL, utilizzabile per ricreare il database. Al minimo migrare mysql
utilizzando la CLI richiede i seguenti argomenti:
- Hostname (indicatore
-h
) - Numero di porta (indicatore
-P
) - Username (indicatore
-u
) - -- mode - mode = VERIFY_IDENTITY (i client richiedono una connessione crittografata ed eseguono verifica contro il certificato CA del server e contro il nomehost del server nel suo certificato)
- -- ssl-ca (il nome del percorso del file CA (Certificate Authority), che può essere trovato all'interno della scheda Endpoints CLI della pagina Panoramica nella UI.)
- Nome database
- file di risultato (
-r
flag)
Il tuo comando CLI sembra questo
mysqldump -h <host_name> -P <port_number> -u <user_name> --ssl-mode=VERIFY_IDENTITY --ssl-ca=mysql.crt --set-gtid-purged=OFF -p <database_name> -r dump.sql
Per generare un file di log del lavoro mysqldump che tiene traccia degli errori mentre è in esecuzione, utilizzare un comando come questo
mysqldump -h <host_name> -P <port_number> -u <user_name> --log-error=error.log --ssl-mode=VERIFY_IDENTITY --ssl-ca=mysql.crt --set-gtid-purged=OFF -p ibmclouddb -r dump.sql
Lo stesso può essere fatto mentre importava, ad esempio
mysql -h <host_name> -P <port_number> -u admin --ssl-mode=VERIFY_IDENTITY --ssl-ca=mysql.crt -p ibmclouddb < dump.sql > import_logfile.log
Per ulteriori informazioni sull'utilizzo di MySQL Replication with Global Transaction Identifiers (GTIDs), consultare il manuale Utilizzo di GTIDs per Failover e Scaleout nel manuale di riferimento MySQL .
Il comando mysql
ha molte opzioni; consultare la documentazione ufficiale e riferimento al comando per una visione più completa delle sue funzionalità.
Ripristino dell'output di mysqldump
L'output risultante di mysqldump
può quindi essere caricato in una nuova distribuzione Databases for MySQL . Poiché l'output è SQL, può essere semplicemente inviato al database tramite il comando mysql
. Consigliamo
di eseguire le importazioni con l'utente admin.
Consultare la documentazione Connesso con mysql
per i dettagli sulla connessione come admin utilizzando mysql
. Per connettersi con
il comando mysql
è necessaria la stringa di connessione dell'utente admin e il certificato TLS, che possono essere trovati entrambi nella UI. Il certificato deve essere decodificato dal base64 e memorizzato come file locale
arbitrario. Per importare il dump.sql
precedentemente creato in una distribuzione di database denominata example-mysql
, il comando mysql
può essere chiamato con -f dump.sql
come parametro.
Il parametro racconta mysql
per leggere ed eseguire le istruzioni SQL nel file.
Come notato nella documentazione Connesso con mysql
, il plug-in Cloud Databases CLI semplifica la connessione. L'importazione mysql
precedente può essere eseguita utilizzando un comando come:
mysql -h <host_name> -P <port_number> -u admin --ssl-mode=VERIFY_IDENTITY --ssl-ca=mysql.crt -p ibmclouddb < dump.sql
Se non viene specificato alcun utente, il comando utilizza automaticamente l'utente admin e le richieste interattive per la password. Il certificato TLS viene recuperato e utilizzato automaticamente.
Mentre il processo di ripristino è in esecuzione, vengono emessi diversi messaggi riguardanti le modifiche apportate alla distribuzione del database.
mydumper
mydumper, e il suo myloader di backup logico accoppiato, utilizzano funzionalità di multithreading per eseguire la migrazione dei dati analogamente a mysqldump; tuttavia, mydumper fornisce molti miglioramenti come backup paralleli, letture coerenti e più facili da gestire l'output. Il parallelismo consente prestazioni migliori durante sia il processo di importazione che di esportazione, mentre l'output può essere più facile da gestire perché le singole tabelle vengono scaricate in file separati.
mydumper è appropriato da utilizzare nelle seguenti condizioni:
- Il dataset è maggiore di 10 GB.
- La connessione di rete tra database di origine e destinazione è veloce e stabile.
- È necessario fare uno schema intermedio o le trasformazioni dei dati.
Non consigliamo di utilizzare mydumper se si incontrano una delle seguenti condizioni:
- Il tuo dataset è inferiore a 10 GB.
- La connessione di rete tra i database di origine e di destinazione è instabile o molto lenta.
Prima di iniziare a migrare i tuoi dati con mydumper, vedi per primo il progetto mydumper per i dettagli e le istruzioni dettagliate sull'installazione e l'ambiente di sviluppatore necessario,
In seguito, fare riferimento alla pagina Come utilizzare mydumper per informazioni sull'utilizzo degli strumenti mydumper e myloader per eseguire la migrazione completa dei dati.
Ottimizzazione Variabili Configurabili InnoDB
È possibile configurare le seguenti opzioni MySQL InnoDB per ottimizzare le prestazioni, in base alla capacità macchina e al carico di lavoro del database.
- innodb_buffer_pool_size_percentuale
- innodb_flush_log_at_trx_commit
- innodb_log_buffer_size
- innodb_log_file_size
- innodb_lru_scan_depth
- innodb_read_io_thread
- innodb_write_io_thread
- net_read_timeout
- timeout net_write_timeout
innodb_buffer_pool_size_percentuale
- Descrizione: Il parametro
innodb_buffer_pool_size_percentage value
definisce la quantità di memoria dedicata del tuo contenitore di database. - Impostazione predefinita: 50
- Max: 100
- Min: 10
- Richiede riavvio: True
Poiché il proprio database stesso utilizza una data quantità di memoria, se il parametro innodb_buffer_pool_size_percentage value
è configurato troppo in alto, allora i requisiti di memoria del database + innodb_buffer_pool_size_percentage
possono diventare superiori ai limiti di memoria disponibili, determinando così uno stato di memoria esaurito (OOM).
Il valore del parametro innodb_buffer_pool_size_percentage
differisce in base alla dimensione del tuo database. Il valore predefinito è 50%
, sicuro per i database di tutte le dimensioni. Configurare il valore in base
alle necessità; se si incontrano OOM allora il valore è impostato troppo in alto e si dovrebbe abbassare.
innodb_flush_log_at_trx_commit
-
Descrizione: Controlli l'equilibrio tra la rigida conformità ACID per le operazioni di impegno e le prestazioni superiori
-
Impostazione predefinita: 2
L'impostazione predefinita di 2 non è completamente ACID - compliant (impostazione predefinita di 1 è necessaria per la piena conformità ACID), ma è più performante ed è comunque sicura.
- Max: 2
- Min: 0
- Richiede riavvio: Falso
Per ulteriori informazioni, consultare la documentazione MySQL innodb_flush_log_at_trx_commit.
innodb_log_buffer_size
- Descrizione: La dimensione in byte del buffer che InnoDB utilizza per scrivere sui file di log su disco.
- Impostazione predefinita: 32 MiB
- Max: 4294967295
- Min: 1048576
- Richiede riavvio: True
Per ulteriori informazioni, consultare la documentazione MySQL innodb_log_buffer_size.
innodb_log_file_size
- Descrizione: Dimensione file di registrazione InnoDB in byte.
- Impostazione predefinita: 64 MB
- Max: 274877906900
- Min: 4194304
- Richiede riavvio: True
Per ulteriori informazioni, consultare la documentazione MySQL innodb_log_file_size.
innodb_lru_scan_depth
- Descrizione: Un parametro che influenzia gli algoritmi e l'euristica per l'operazione di svuotamento per il pool di buffer InnoDB.
- Impostazione predefinita: 1024
- Max: nessun valore max
- Min: 100
- Richiede riavvio: True
Per ulteriori informazioni, consultare la documentazione MySQL innodb_lru_scan_depth.
innodb_read_io_thread
- Descrizione: Il numero di thread I/O per le operazioni di lettura in InnoDB.
- Impostazione predefinita: 4
- Max: 64
- Min: 1
- Richiede riavvio: True
Per ulteriori informazioni, consultare la documentazione MySQL innodb_read_io_threads.
innodb_write_io_thread
- Descrizione: Il numero di thread I/O per le operazioni di lettura in InnoDB.
- Impostazione predefinita: 4
- Max: 64
- Min: 1
- Richiede riavvio: True
Per ulteriori informazioni, consultare la documentazione MySQL innodb_write_io_threads.
net_read_timeout
- Descrizione: Il numero di secondi di attesa per ulteriori dati da una connessione prima di interrompere la lettura.
- Impostazione predefinita: 30
- Max:
- Min: 1
- Richiede riavvio: True
Per ulteriori informazioni, consultare la documentazione MySQL net_read_timeout.
timeout net_write_timeout
- Descrizione: Il numero di secondi di attesa per un blocco da scrivere a una connessione prima di interrompere la scrittura.
- Impostazione predefinita: 60
- Max:
- Min: 1
- Richiede riavvio: True
Per ulteriori informazioni, consultare la documentazione net_write_timeout
.