从一个MySQL数据库迁移数据到另一个MySQL数据库

6

是否可以将相关数据从一个数据库迁移到另一个数据库,但列名不同?我谈论的是非常大量的数据。有人有想法吗? 我已尝试将其导出到CSV并导入到另一个数据库,但我收到错误消息:

invalid column count in CSV input in line 1

如果有人有高效和有效的方法,请分享。或者如果有人可以指导我如何在Excel中进行CSV映射,我会非常感激。


我尝试将整个表导出为 .csv 文件并导入到另一个数据库中,但有时会出现错误。 - Belmark Caday
将数据导出为csv格式,然后使用LOAD DATA INFILE your_file.csv INTO your_table命令将其加载到你的表中。 - zipser
谢谢澄清。您还能具体说明一下是哪些错误和由哪个程序引起的吗? - jsalonen
我已经编辑了上面的帖子,包括错误。 - Belmark Caday
你是在说同一个MySQL进程内的不同数据库吗?那么你可以使用INSERT ... SELECT查询,这比导出到文件要简单得多。 - C. Ramseyer
显示剩余2条评论
4个回答

12

这里有两种情况:

  1. 数据库存储在同一台服务器上
  2. 数据库存储在不同的服务器上

解决方案1:数据库存储在同一台服务器上

您只需要将数据插入到目标表中即可:

insert into dbDestination.tblDestination (field1, field2, ...)
select ...
from dbSource.tblSource

注意事项

  1. select语句必须包括你需要复制到目标表的字段。
  2. select语句中的字段顺序必须与insert部分中字段列表指定的顺序相同。

方案二:不同服务器上的数据库

我会将数据导出为纯文本文件,然后再进行导入。我个人更喜欢使用 .csv 文件,但这取决于您。

您有两种可能性:使用select... into outfile或使用系统终端(命令窗口)。

a. 使用 select... into outfileload data

  1. In the server where dbSource is:

    select ...
    from dbSource.tblSource
    into outfile [your destination file]
    ...
    
  2. Copy the file to the destination server.

  3. In the server where dbDestination is:

    load data local infile [your file] ...

注意事项

  1. select语句中的字段顺序必须与insert语句中指定的字段顺序相同。
  2. 请参考MySQL参考手册,了解select... into outfileload data...的正确用法。

b. 使用终端

  1. In Linux (or other Unix systems), open a terminal window and enter the following command:

    $ mysql -h [sourceServer] -u [yourUser] -p[yourPassword] dbSource -e"select ..." | sed 's/\t/,/g' > yourDestinationFile.csv
    
  2. Copy the file to the destination server

  3. Start MySQL console, and use `load data ...``

  1. select语句中的字段顺序必须与insert语句中的字段列表中指定的顺序相同。
  2. | sed 's/\t/,/g'部分将mysql查询的输出转换为.csv文件。您可以使用其他分隔符代替,。有关sed的进一步参考,请查看http://lowfatlinux.com/linux-sed.html
  3. 目标文件将有行标题,因此在导入数据时需要忽略它们。只需在load data...句子的末尾添加ignore 1 lines即可。

从一个数据库复制数据到另一个数据库是非常简单的任务。希望这些内容能帮到您。

一点建议:下载您的MySQL版本的参考手册并随身携带。您可以在那里找到大多数解决方案。


1

一个简单的方法是使用以下语法:

INSERT INTO Database.Table(field 1, field 2,...)
SELECT * FROM Database2.Table2;

0

使用这个:

INSERT INTO dbname.tablename(fields...);
SELECT * FROM olddatabase.oldtable;

0

小心!!!

INSERT INTO dbname.tablename(fields...);
SELECT * FROM olddatabase.oldtable;

只有在 ID 遵循的情况下才能工作。

选择省略 ID 的字段,以便自动递增可以为导入的行提供新的 ID。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接