将MySQL迁移到具有不同结构的表

时间:2009-09-10 03:35:50

标签: sql mysql database migration mysqldump

我的公司目前正在移动我们的数据库,将一组表从旧的MySQL实例转移到新的MySQL实例中。我们在迁移之前已经完成了一些开发,并且一些表的结构已经从原始表中进行了更改(例如,删除了列)。

所以目前我已经从旧数据库中转储数据,现在正尝试将它们重新插入到新表中。当然,导入borks时,它试图插入的字段比表中的字段多。

最好的方式是什么(最好是可编写脚本的,因为我预见自己要多做几次)才能将我需要的字段导入到新表中?

4 个答案:

答案 0 :(得分:3)

更新以下内容以适应:

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

您需要一个包含列列表的新数据库上的表的INSERT语句。然后根据旧表中的值相应地填充值部分。在旧环境中运行,您将获得包含新环境数据的插入内容 - 只需将'n'paste复制到脚本中。

请注意,必须相应地处理数据类型 - 日期(包括时间),并且必须处理字符串,因为您正在处理文本。

答案 1 :(得分:3)

使用最快的方式,加载数据infile:

- 转储数据

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

- 加载数据

LOAD DATA LOCAL INFILE 'mybigtable.csv' 
  INTO TABLE mynewbigtable
  FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'  
  (@col1,@col2,@col3,@col4) set name=@col4,id=@col2;

参考:

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

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

答案 2 :(得分:2)

首先,使用旧结构或当前数据库中的临时表创建新数据库。然后使用每行的insert语句运行脚本,但是值必须只是那些新结构的字段。

insert into newTable select row1,row2 from tempTable

答案 3 :(得分:0)

如果你正在使用MySQL 5.1,一个强大的,虽然可能在这种情况下过度杀戮,解决方案是做一个xml mysqldump并使用XSLT来转换它。不幸的是,5.0中不支持重新导入该xml文件,您需要5.1,5.4或6.0