2009-09-10 6 views
5

La società sta attualmente spostando i nostri database in giro, spostando una serie di tabelle dalla vecchia istanza MySQL alla nuova. Abbiamo fatto qualche sviluppo prima di questa migrazione, e la struttura di alcune tabelle è stata modificata rispetto all'originale (ad esempio le colonne sono state eliminate).Migrazione di MySQL a una tabella con diversa struttura

Così attualmente ho scaricato i dati dal vecchio database e ora sto tentando di reinserirli nella nuova tabella. Ovviamente, i borks di importazione quando tenta di inserire righe con più campi di quelli della tabella.

Qual è il modo migliore (preferibilmente con script, perché mi aspetto di doverlo fare ancora poche volte) per importare solo i campi che mi servono nella nuova tabella?

risposta

2

aggiornare le seguenti per soddisfare:

SELECT 'INSERT INTO NEW_TABLE ... ('+ to.column +');' 
    FROM OLD_TABLE ot 

È necessario un'istruzione INSERT per la tabella sul nuovo database, con elenco di colonne. Quindi popolare la porzione di valore in base ai valori nella vecchia tabella. Esegui nel vecchio ambiente e avrai i tuoi inserimenti con i dati per il nuovo ambiente - copia semplicemente pasta in una sceneggiatura.

Ricorda però che i tipi di dati devono essere gestiti di conseguenza - le date (tempo compreso) e le stringhe devono essere gestite perché hai a che fare con il testo.

0

Se si utilizza MySQL 5.1, una soluzione potente, anche se forse in questo caso eccessiva, è eseguire un mysqldump xml e utilizzare un XSLT per trasformarlo. Purtroppo la reimportazione del file xml non è supportata in 5.0, è necessario 5.1, 5.4 o 6.0

2

Prima di tutto, creare un nuovo database con struttura vecchia o tabelle temporanee nel database corrente. Quindi eseguire lo script con istruzioni di inserimento per ogni riga, ma nei valori devono essere solo i campi che si trovano nella nuova struttura.

insert into newTable select row1,row2 from tempTable 
1

Utilizzare il più veloce modo, carico DATA INFILE:

- Dump dati

SELECT * INTO OUTFILE 'mybigtable.csv' 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY '\n' 
    FROM mybigtable 

- dati di carico

LOAD DATA LOCAL INFILE 'mybigtable.csv' 
    INTO TABLE mynewbigtable 
    FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' 
    (@col1,@col2,@col3,@col4) set [email protected],[email protected]; 

Rif:

http://dev.mysql.com/doc/refman/5.6/en/insert-speed.html

http://dev.mysql.com/doc/refman/5.6/en/load-data.html