案例
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:[email protected]: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 |
+----+-------+