Secondo la Guida allo studio sulla certificazione MySQL 5.0 , capitolo 32, sezione 32.3.4, pagine 456.457 descrivono le condizioni per la portabilità binaria che mettono in evidenza quanto segue:
La portabilità binaria è importante se si desidera eseguire un backup binario creato su un computer e utilizzarlo su un altro computer con un'architettura diversa. Ad esempio, l'utilizzo di un backup binario è un modo per copiare database da un server MySQL a un altro.
Per MyISAM, la portabilità binaria significa che è possibile copiare direttamente i file per una tabella MyISAM da un server MySQL a un altro su un altro computer e il secondo server sarà in grado di accedere alla tabella.
Per InnoDB, la portabilità binaria significa che è possibile copiare direttamente i file del tablespace da un server MySQL su un computer su un altro server su un altro computer e il secondo server sarà in grado di accedere al tablespace. Per impostazione predefinita, tutte le tabelle InnoDB gestite da un server sono memorizzate insieme nel tablespace, pertanto la portabilità del tablespace dipende dal fatto che tutte le singole tabelle InnoDB siano portatili. Se anche una tabella non è portatile, non lo è nemmeno il tablespace.
Le tabelle MyISAM e i tablespace InnoDB sono portatili binari da un host all'altro se sono soddisfatte due condizioni:
- Entrambe le macchine devono usare l'aritmetica di interi a complemento a due
- Entrambe le macchine devono utilizzare il formato IEEE in virgola mobile, altrimenti le tabelle non devono contenere colonne in virgola mobile (FLOAT o DOUBLE)
In pratica, queste due condizioni pongono poche restrizioni. L'aritmetica dei numeri interi a due complementi e il formato a virgola mobile IEEE sono la norma sull'hardware moderno. Una terza condizione per la portabilità binaria di InnoDB è che è necessario utilizzare nomi minuscoli per tabelle e database. Questo perché InnoDB memorizza questi nomi internamente (nel suo dizionario dei dati) in minuscolo su Windows. L'uso di nomi in minuscolo consente la portabilità binaria tra Windows e Unix, per forzare l'uso di nomi in minuscolo, è possibile inserire le seguenti righe in un file di opzioni:
[mysqld]
lower_case_table_names=1
Se si configura InnoDB per l'utilizzo di tablespace per tabella, le condizioni per la portabilità binaria vengono estese per includere anche i file .ibd per le tabelle InnoDB. (Le condizioni per i tablespace condivisi sono ancora applicabili perché contiene il dizionario dei dati che memorizza le informazioni su tutte le tabelle InnoDB.)
Se le condizioni per la portabilità binaria non sono soddisfatte, è possibile copiare le tabelle MyISAM o InnoDB da un server a un altro scaricandole utilizzando un formato di testo (ad esempio, con mysqldump) e ricaricandole nel server di destinazione.
Esistono due modi principali basati sul motore di archiviazione per spostare singole tabelle.
Per l'esempio dato supponiamo che:
- il datadir è / var / lib / mysql
- database chiamato mydb
- tabella nel database mydb denominata mytable .
Tabelle MyISAM
Se mydb.mytable utilizza il motore di archiviazione MyISAM, la tabella verrà fisicamente manifestata come tre file separati
- /var/lib/mysql/mydb/mytable.frm (file .frm)
- /var/lib/mysql/mydb/mytable.MYD (file .MYD)
- /var/lib/mysql/mydb/mytable.MYI (file .MYI)
.Frm contiene la struttura della tabella
.MYD contiene i dati della tabella
.MYI contiene la pagina dell'indice della tabella
Questi file vengono utilizzati in modo interdipendente per rappresentare la tabella da un punto di vista logico in mysql. Poiché a questi file non è associata alcuna ulteriore associazione logica, la migrazione di una tabella da un server DB a un altro. Puoi persino farlo da un server Windows a un server Linux o MacOS. Ovviamente, potresti spegnere mysql e copiare i 3 file della tabella. È possibile eseguire quanto segue:
LOCK TABLES mydb.mytable READ;
SELECT SLEEP(86400);
UNLOCK TABLES;
in una sessione ssh per tenere la tabella in sola lettura e tenere il blocco per 24 ore. Un secondo dopo, esegui la copia in un'altra sessione ssh. Quindi uccidi la sessione mysql con il blocco di 24 ore. Non è necessario attendere 24 ore.
Tabelle InnoDB
Sulla base della citazione di cui sopra dal libro di certificazione, ci sono molti fattori che regolano il backup di una tabella InnoDB specifica. Per semplicità, chiarezza e brevità, è sufficiente eseguire un mysqldump della tabella desiderata utilizzando i parametri --single-transazione per ottenere un perfetto dump temporaneo della tabella. Non c'è bisogno di cncernarsi con la semantica InnoDB se si desidera solo una tabella. Puoi ricaricare quel file di dump su qualsiasi server MySQL di tua scelta.
Poiché qui sono state unite due domande (jcolebrand): EDIT
Se sei più che disposto a vivere con alcune prestazioni DB lente, puoi eseguire una serie di rsync dal vecchio server (ServerA) al nuovo server (ServerB) anche mentre mysql è ancora in esecuzione su ServerA.
Step 01) installa la stessa versione di mysql su ServerB di ServerA
Passaggio 02) Su ServerA, eseguire SET GLOBAL innodb_max_dirty_pages_pct = 0;
da mysql e circa 10 minuti (Questo elimina le pagine sporche dal pool di buffer InnoDB. Inoltre, consente di eseguire più rapidamente l'arresto di mysql) Se il database è tutto MyISAM, è possibile saltare questo passaggio.
Step 03) rsync --archive --verbose --stats --partial --progress --human-readable ServerA:/var/lib/mysql ServerB:/var/lib/mysql
Passaggio 04) Ripetere il passaggio 03 fino a quando un rsync impiega meno di 1 minuto
Passaggio 05) service mysql stop
su ServerA
Passaggio 06) Eseguire un altro rsync
Step 07) scp ServerA:/etc/my.cnf ServerB:/etc/
Passaggio 08) service mysql start
su ServerB
Passaggio 08) service mysql start
su ServerA (opzionale)
Provaci !!!
AVVERTIMENTO
È possibile creare uno slave di replica come questo. Ricorda solo di avere ID server esplicitamente impostato nel master /etc/my.cnf e un numero diverso per id server nello slave /etc/my.cnf