Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将MySQL迁移到具有不同结构的表_Sql_Mysql_Database_Migration_Mysqldump - Fatal编程技术网

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

将MySQL迁移到具有不同结构的表,sql,mysql,database,migration,mysqldump,Sql,Mysql,Database,Migration,Mysqldump,我的公司目前正在移动我们的数据库,将一组表从旧的MySQL实例转移到新的MySQL实例中。在这次迁移之前,我们已经做了一些开发,一些表的结构已经从原来的表更改了(例如,删除了列) 所以目前我已经从旧数据库中转储了数据,现在正试图将它们重新插入到新表中。当然,当导入尝试插入比表包含更多字段的行时,导入会停止 最好的方法是什么(最好是可编写脚本的,因为我预见自己必须再这样做几次)只将我需要的字段导入到新表中?如果您使用的是MySQL 5.1,一个强大的解决方案(尽管在这种情况下可能有些过分),就是使

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

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


最好的方法是什么(最好是可编写脚本的,因为我预见自己必须再这样做几次)只将我需要的字段导入到新表中?

如果您使用的是MySQL 5.1,一个强大的解决方案(尽管在这种情况下可能有些过分),就是使用xml mysqldump并使用XSLT进行转换。不幸的是,重新导入xml文件在5.0中不受支持,您需要5.1、5.4或6.0。首先,使用旧结构创建新数据库,或在当前数据库中创建临时表。然后为每行运行带有insert语句的脚本,但in值只能是新结构中的字段

insert into newTable select row1,row2 from tempTable

更新以下内容以适应:

SELECT 'INSERT INTO NEW_TABLE ... ('+ to.column +');'
  FROM OLD_TABLE ot
对于新数据库中的表,您需要一个INSERT语句和列列表。然后根据旧表中的值相应地填充值部分。在旧环境中运行,您将有新环境的数据插入-只需将“n”粘贴复制到脚本中即可


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

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

--转储数据

--加载数据

Ref:

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;