如何在2个MySQL数据库之间传输数据?
我想使用代码而不是使用像“MySQL Migration Toolkit”这样的工具。我知道的最简单的方法是打开连接(使用MySQL连接器)到DB1并读取其数据。打开与DB2的连接并将数据写入其中。有更好/最简单的方法吗?如何在2个MySQL数据库之间传输数据?
首先我要假设你是不是在把刚才复制的位置数据/目录,因为如果你正在使用你现有的快照/备份/恢复可能就足够了(并且测试你的备份/恢复程序进行讨价还价)。
在这种情况下,如果两个表的结构通常最快,而讽刺的是,最简单的方法是在一端使用SELECT ... INTO OUTFILE ...,并且LOAD DATA INFILE ... on另一个。
有关详细信息,请参阅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可以压缩它,它Munge时间或隧道它通过网络你的心内容。
谢谢,尽管它在dev.mysql手册中,但它不能正常工作。它给我这个错误: 你的SQL语法有错误;请检查与您的MySQL服务器版本相对应的手册,以在第1行'\ n''附近使用正确的语法) 它不接受'\ n'..为什么? – Morano88 2010-07-16 22:06:06
堆栈溢出损坏了示例查询。在源代码中,ESCAPED BY子句中的斜杠被转义,但转换为html时转义丢失。对不起,我没有注意到腐败 - 我已经解决了上述问题。 – Recurse 2010-07-19 23:57:24
这正是我需要用来加快备份相当大的数据库,但我无法让你的例子工作。我可以创建FIFO,如果我使用mysqldump转储到管道,它的工作原理很好。但是,如果我尝试使用SELECT ... INTO OUTFILE转储到管道,则会出现“myfifo已存在”错误。 – 2011-10-06 09:09:36
FEDERATED存储引擎?不是这一群人中速度最快的人,而是一次,偶然或少量的数据。假设你在谈论2个服务器。随着2个数据库在同一个服务器,它会仅仅是:
INSERT INTO databasename1.tablename SELECT * FROM databasename2.tablename;
您可以使用mysqldump
和mysql
(命令行客户端)。这些是命令行工具,在你写的问题中,你不想使用它们,但仍然使用它们(即使通过在代码中运行它们)是最简单的方法; mysqldump
解决了很多问题。
您可以使select
从一个数据库和insert
到另一个,这很容易。但是,如果您还需要传输数据库模式(create table
s等),它会稍微复杂一些,这是我推荐mysqldump
的原因。但很多PHP-MySQL-admin工具也可以做到这一点,所以你可以使用它们或查看他们的代码。
也许你可以使用MySQL复制。
如果启用了当前服务器上的二进制日志(并拥有所有的bin日志),你可以在第二个服务器设置复制
从http://dev.mysql.com/doc/refman/5.0/en/rename-table.html:
只要两个数据库是相同的文件系统上,你可以用重命名表,从一个数据库移动表到另一个问题:在同一台服务器上
RENAME TABLE current_db.tbl_name TO other_db.tbl_name;
两个数据库或不同服务器上的两个数据库? – 2010-07-14 00:33:12
@Itay:我不确定天气他们是否在同一台服务器上?我知道这有所作为,但我并没有想到要问他们。我明天会做。 – Morano88 2010-07-14 00:38:17