MySQL实现跨服务器查询

来源:互联网 发布:java面向对象增删改查 编辑:程序博客网 时间:2024/06/07 09:09

案例

B服务器数据库进行查询时需要用到A服务器数据库表数据,需要对数据进行夸服务器查询,办法有很多,这里简单介绍下通过存储引擎层实现跨服务器查询

A服务器(192.168.1.76)

B服务器(192.168.1.77)


1) MySQL实例A建立测试表

mysql> create database lianxi;

mysql> use lianxi

mysql> CREATE TABLE tab_test (

id     int(20) NOT NULL auto_increment,

name   varchar(32) NOT NULL default '',

PRIMARY KEY (id)

) ENGINE=innodb;

mysql> insert into tab_test values(null,'test1');

2) MySQL实例B建立FEDERATED引擎表
--确认FEDERATED引擎已启用:
mysql> show engines;
..

| FEDERATED  | YES     | Federated MySQL storage engine  

--如果未启用, 先确保configure MySQL时加了--with-federated-storage-engine选项, 另外还确保启动mysqld时加了--federated参数, 

或者在my.cnf里[mysqld]段后面加了federated参数, 如下, 然后重启mysqld:
--------------------------------
[mysqld]

federated
--------------------------------

mysql> create database lianxi;

mysql> use lianxi

mysql> CREATE TABLE tab_test_fed (

    id     int(20) NOT NULL auto_increment,

    name   varchar(32) NOT NULL default '',

    PRIMARY KEY (id)

) ENGINE=FEDERATED connection = 'mysql://root:123@192.168.41.197:3306/db_fed/tab_test';

除了ENGINE选项应该是FEDERATED, 并且CONNECTION表选项是给FEDERATED指明如何连接到远程服务器上的连接字符串之外, 

这个表的结构必须完全与远程表的结构相同.  

远程主机信息指明本地服务器要连接到的远程服务器, 数据库和表信息指明哪一个远程表要被作为数据文件来用. 在这个例子中. 

远程服务器被指定来作为远程主机在3306端口上运行, 所以要启动服务器, 让它监听3306端口. 

在CONNECTION选项中的连接字符串的一般形式如下(密码和端口号是可选的): 

mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name

--测试是否可以访问:


mysql> select * from tab_test_fed;

+----+-------+
| id | name  |
+----+-------+
|  1 | test1 |
+----+-------+


原创粉丝点击