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

Mor*_*o88 22 mysql database data-migration mysql-connector

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

Rec*_*rse 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' ;
Run Code Online (Sandbox Code Playgroud)

我们还使用了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
Run Code Online (Sandbox Code Playgroud)

基本上,您可以将表数据定向到FIFO,您可以将其压缩,进行压缩,或将其通过网络传输到您的心灵内容.


Wri*_*ken 11

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

INSERT INTO databasename1.tablename SELECT * FROM databasename2.tablename;
Run Code Online (Sandbox Code Playgroud)