2009-09-10 11 views
5

Actualmente, mi empresa está moviendo nuestras bases de datos, cambiando un conjunto de tablas de la antigua instancia de MySQL a la nueva. Hemos realizado algunos desarrollos antes de esta migración, y la estructura de algunas tablas se ha modificado con respecto a la original (por ejemplo, se han eliminado columnas).Migración de MySQL a una tabla con estructura diferente

Actualmente, he descargado los datos de la base de datos anterior y ahora intento reinsertarlos en la nueva tabla. Por supuesto, la importación se borra cuando intenta insertar filas con más campos que la tabla.

¿Cuál es la mejor manera (preferiblemente de secuencias de comandos, porque me preveo tener que hacer esto unas cuantas veces más) para importar solo los campos que necesito en la nueva tabla?

Respuesta

2

la siguiente actualización para adaptarse:

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

Hace falta un programa instrucción INSERT para la tabla en la nueva base de datos, la lista de columnas. A continuación, rellene la porción de valor de acuerdo con los valores de la tabla anterior. Ejecutar en el entorno anterior, y tendrá sus insertos con datos para el nuevo entorno - simplemente copie y pegue en una secuencia de comandos.

Sin embargo, tenga en cuenta que los tipos de datos deben manejarse en consecuencia: las fechas (incluido el tiempo) y las cadenas se deben manejar porque se trata de texto.

0

Si está utilizando MySQL 5.1, una solución potente, aunque quizás en este caso exagerada, es hacer un mysqldump xml y usar un XSLT para transformarlo. Desafortunadamente la reimportación de ese archivo xml no es compatible con 5.0, necesitará 5.1, 5.4 o 6.0

2

Primero, cree una nueva base de datos con una estructura antigua o tablas temporales en la base de datos actual. A continuación, ejecute el script con instrucciones de inserción para cada fila, pero en los valores solo deben estar los campos que están en una estructura nueva.

insert into newTable select row1,row2 from tempTable 
1

Use el más rápido manera, la carga de datos INFILE:

- Dump datas más

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

- datas más carga

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]; 

Ref:

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

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

Cuestiones relacionadas