如何在2个MySQL数据库之间传输数据?

时间:2010-07-14 00:15:09

标签: mysql database data-migration mysql-connector

我想使用代码而不使用像“MySQL Migration Toolkit”这样的工具来做到这一点。我知道最简单的方法是打开一个连接(使用MySQL连接器)到DB1并读取其数据。打开与DB2的连接并将数据写入其中。有更好/最简单的方法吗?

5 个答案:

答案 0 :(得分:20)

首先,我假设您无法复制数据/目录,因为如果您正在使用现有的快照/备份/恢复可能就足够了(并将备份/恢复程序测试到讨价还价)。

在这种情况下,如果两个表具有相同的结构,通常最快,而具有讽刺意味的是,最简单的方法是在一端使用SELECT ... INTO OUTFILE ...,并在上面使用LOAD DATA INFILE ...其他

有关最终详细信息,请参阅http://dev.mysql.com/doc/refman/5.1/en/load-data.html和... / select.html。

对于琐碎的表,以下内容将起作用:

SELECT * FROM mytable INTO OUTFILE '/tmp/mytable.csv' 
  FIELDS TERMINATED BY ',' 
  OPTIONALLY ENCLOSED BY '"' 
  ESCAPED BY '\\\\' 
  LINES TERMINATED BY '\\n' ;

LOAD DATA INFILE '/tmp/mytable.csv' INTO TABLE mytable 
  FIELDS TERMINATED BY ',' 
  OPTIONALLY ENCLOSED BY '"' 
  ESCAPED BY '\\\\' 
  LINES TERMINATED BY '\\n' ;

我们还使用了FIFO来避免实际写入磁盘的开销,或者出于某种原因需要写入磁盘,以便通过gzip进行管道传输。

mkfifo /tmp/myfifo
gzip -c /tmp/myfifo > /tmp/mytable.csv.gz &
... SEL

ECT... INTO OUTFILE '/tmp/myfifo' .....
wait

gunzip -c /tmp/mytable.csv.gz > /tmp/myfifo &
... LOAD DATA INFILE /tmp/myfifo .....
wait

基本上,您可以将表格数据导入FIFO,然后将其压缩,进行处理,或将其通过网络传输到您的心灵内容。

答案 1 :(得分:11)

FEDERATED存储引擎?不是最快的一个,但有一次,偶然的,或少量的数据,它会做。假设你在谈论2个服务器。在同一台服务器上有2个数据库,它只是:

INSERT INTO databasename1.tablename SELECT * FROM databasename2.tablename;

答案 2 :(得分:1)

您可以使用mysqldumpmysql(命令行客户端)。这些是命令行工具,在您编写的问题中,您不想使用它们,但仍然使用它们(即使从代码中运行它们)也是最简单的方法; mysqldump解决了很多问题。

您可以从一个数据库selectinsert到另一个数据库,这非常简单。但是如果你还需要传输数据库模式(create table等),它会变得更复杂,这就是我推荐mysqldump的原因。但是许多PHP-MySQL-admin工具也会这样做,所以你可以使用它们或查看它们的代码。

或许你可以使用MySQL复制。

答案 3 :(得分:1)

来自http://dev.mysql.com/doc/refman/5.0/en/rename-table.html

只要两个数据库位于同一文件系统上,您就可以使用RENAME TABLE将表从一个数据库移动到另一个数据库:

RENAME TABLE current_db.tbl_name TO other_db.tbl_name;

答案 4 :(得分:0)

如果您在当前服务器上启用了二进制日志记录(并且拥有所有bin日志),则可以为第二台服务器设置复制