当前位置:  开发笔记 > 后端 > 正文

MySQL Cross Server选择查询

如何解决《MySQLCrossServer选择查询》经验,为你挑选了2个好方法。

是否可以使用MySQL Client编写跨服务器选择查询.基本上,设置如下.

服务器IP数据库
--------- --------
1.2.3.4测试
abcd测试

我想编写一个查询,它将从1.2.3.4上的测试数据库中的表中选择行,并将结果插入到abcd上的测试数据库中.
我的服务器位于数英里之外,因此我将打开一个SSH隧道进行连接他们俩.

有什么指针吗?



1> Peter Carrer..:

如何在其中一台服务器上使用联合表?根据您将在查询中使用的远程表创建联合表,并运行您的查询,就好像您的数据库都是本地的一样.以下来自MySQL站点的示例

使用FEDERATED表的过程非常简单.通常,您有两台服务器在同一主机或不同主机上运行.(FEDERATED表可能使用由同一服务器管理的另一个表,尽管没有必要这样做.)

首先,您必须使用FEDERATED表在远程服务器上拥有一个表.假设远程表位于联邦数据库中,并且定义如下:

CREATE TABLE test_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  INT(20) NOT NULL DEFAULT '0',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=MyISAM 
CHARSET=latin1;

该示例使用MyISAM表,但该表可以使用任何存储引擎.

接下来,在本地服务器上创建一个FEDERATED表以访问远程表:

CREATE TABLE federated_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  INT(20) NOT NULL DEFAULT '0',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table';

(在MySQL 5.0.13之前,使用COMMENT而不是CONNECTION.)



2> James C..:

mysqldump可能是已经提到的解决方案,或者您可以尝试使用SELECT ... INTO OUTFILE然后LOAD DATA INFILE ...命令.

MySQL确实有联邦存储引擎,可能对您有用.这里有更多关于它的文档http://dev.mysql.com/doc/refman/5.0/en/federated-storage-engine.html我必须承认我没有取得巨大的成功,但它可能适用于您.

第三种解决方案是在您的应用程序中完成工作.SELECT逐行读入查询结果,逐行读入INSERT其他服务器.您可能会遇到一些数据类型和null处理问题.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有