我想使用代码而不使用像“MySQL Migration Toolkit”这样的工具来做到这一点。我知道最简单的方法是打开一个连接(使用MySQL连接器)到DB1并读取其数据。打开与DB2的连接并将数据写入其中。有更好/最简单的方法吗?
答案 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)
您可以使用mysqldump
和mysql
(命令行客户端)。这些是命令行工具,在您编写的问题中,您不想使用它们,但仍然使用它们(即使从代码中运行它们)也是最简单的方法; mysqldump
解决了很多问题。
您可以从一个数据库select
和insert
到另一个数据库,这非常简单。但是如果你还需要传输数据库模式(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日志),则可以为第二台服务器设置复制