我想使用代码来实现,而不是使用"MySQL迁移工具包"这样的工具.我所知道的最简单的方法是打开一个到DB1的连接(使用MySQL连接器)并读取它的数据.打开到DB2的连接并将数据写入其中.有没有更好/最简单的方法?
我想使用代码来实现,而不是使用"MySQL迁移工具包"这样的工具.我所知道的最简单的方法是打开一个到DB1的连接(使用MySQL连接器)并读取它的数据.打开到DB2的连接并将数据写入其中.有没有更好/最简单的方法?
首先,我将假设您不能只复制数据/目录,因为如果您正在使用现有的快照,/backup/restore可能就足够了(并测试您的备份/还原过程).
在这种情况下,如果两个表具有相同的 struct ,通常是最快的,具有讽刺意味的是,最简单的方法将是使用SELECT.INTO OUTFILE.在一端,将数据加载到文件中.在另一端.
见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,就可以对其进行压缩、咀嚼或通过网络将其传输到您的内容中.