MySQL中实现跨数据库服务器查询数据

MySQL中实现跨数据库服务器查询数据

技术教程gslnedu2025-01-13 10:34:1014A+A-

在MySQL中,同一个数据库服务器中,不同数据库中的表,可以通过库名调用表名的方式进行调用,实现查询与修改。对查询不同数据库服务器下的表,MySQL提供了FEDERATED引擎,实现表的映射。

(1)查看MySQL的FEDERATED引擎是否开启;默认情况下,未开启。

show engines;

(2)启用MySQL的FEDERATED引擎

对于windows系统,找到my.ini文件,添加:federated,重启mysql。

(3)利用create server 创建federated引擎连接

CREATE SERVER fedlinkname
FOREIGN DATA WRAPPER mysql
OPTIONS (USER 'username', PASSWORD 'password' ,HOST 'remote_host', PORT port_num, DATABASE 'dbname');

其中USER、PASSWORD、HOST、PORT、DATABASE均为数据源的数据库连接参数,即有数据的数据库的相关参数。

注意:CREATE SERVER语句在mysql数据库的serverstable 中创建新行。此语句需要SUPER特权。

(4)利用新建的federated引擎连接,在目标数据库中创建与源数据库中一样表结构的数据表。

CREATE TABLE test_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT ''
)
ENGINE=FEDERATED
CONNECTION='fedlinkname/test';

到此,就可以实现在目标数据库中查询test_table表,从而得到的是源数据库dbname中test表中的数据。

注意:之所以创建了federated引擎连接,是为了避免目标数据库的连接参数中有特殊字符,而不能识别的问题。

即可以直接使用如下语法创建federated引擎表,但是在connection中,如果password中也有@,那么造成语法混乱,出现报错信息,[Err] 1432 - Can't create federated table. The data source connection string。因为多了一个@,mysql会认为第一个@后就是hostname。所以建议先创建federated引擎连接,然后在创建federated引擎表

CREATE TABLE  test_table (
  ID  varchar(64) NOT NULL COMMENT 'ID',
  NAME  varchar(64)  DEFAULT NULL COMMENT 'NAME'
) ENGINE=federated CONNECTION='mysql://username:password@remote_host:port/dbname/test';

(5)查询在mysql数据库服务器中有多少个federated引擎连接

SELECT * FROM mysql.servers

(6)查询在mysql数据库服务器中有多少个federated引擎表

SELECT * from information_schema.TABLES  where TABLE_SCHEMA = 'dbname' 
ORDER BY ENGINE
点击这里复制本文地址 以上内容由朽木教程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

朽木教程网 © All Rights Reserved.  蜀ICP备2024111239号-8