同服务器下跨数据库进行查询在表前加上数据库名就可以查询到数据。
mysql跨服务器进行查询提供了FEDERATED引擎进行映射表,然后进行查询。mysql数据库federated引擎是默认关闭的,需要先启用该引擎。
mysql执行show engines
命令查看引擎状态。
show engines
FEDERATE的Support为NO,我们需要把这个引擎启用
修改mysql的my.ini文件,windows系统的在Mysql安装路径下的data文件夹里,可以使用Everything工具
检索这个文件
打开服务表,重启MySQL服务
federated引擎是否开启
跨服务器查询,我们可以把其中一个服务器的库最为源,以另外一个库为目标库,在源库上建立目标库的表。
例如:我要在本地库查询线上服务器的库表my_config
在本地库开启SQL连接,执行SQL:
CREATE TABLE `my_config_ref` (
`id` BIGINT(20) NOT NULL,
`config_key` varchar(150) DEFAULT NULL,
`config_value` varchar(255) DEFAULT NULL,
`role_id` varchar(40) DEFAULT NULL,
`remark` bigint(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=FEDERATED CONNECTION='mysql://账号:密码@另外一个服务器的ip地址:端口号/数据库名/表名';
执行完该SQL后,就在本地库建立了一张名为my_config_ref
的映射表,对该表的CRUD
操作都会直接影响到另外一台服务器的my_config
表
当远程服务器的数据库的密码包含符号或者其他特殊符号时,可能会报下面的错误:
CREATE TABLE
my_config_ref
(
id
BIGINT(20) NOT NULL,
config_key
varchar(150) DEFAULT NULL,
config_value
varchar(255) DEFAULT NULL,
role_id
varchar(40) DEFAULT NULL,
remark
bigint(255) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=FEDERATED CONNECTION=‘mysql://123:“123rrr@.”@10.22.32.33:3306/gdcwpt/my_config’
1432 - Can’t create federated table. The data source connection string ‘mysql://123:“123rrr@.”@10.22.32.33:3306/gdcwpt/my_config’ is not in the correct format
时间: 0.008s
解决方式有两种:
CREATE SERVER fedlink
FOREIGN DATA WRAPPER mysql
OPTIONS (USER '123', PASSWORD '123rrr@.',HOST '10.22.32.33', PORT 3306, DATABASE 'gdcwpt');
CREATE TABLE `my_config_ref` (
`id` BIGINT(20) NOT NULL,
`config_key` varchar(150) DEFAULT NULL,
`config_value` varchar(255) DEFAULT NULL,
`role_id` varchar(40) DEFAULT NULL,
`remark` bigint(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=FEDERATED CONNECTION='fedlink/my_config';
通过 SERVER fedlink
做一个中转
在mysql中创建远程服务器数据库中的需要映射的表,映射表名称可以随意命名,但是数据结构必要一样
这种方式效率低下,只能临时用来应急,不能长久
通过这种方式对远程服务器的库表执行DML语句都是不走事务的
如果需要使用多张远程服务器数据库的表,就需要建立对应数量的映射表