【MySQL】Federated引擎与Federated Server访问远程数据

时间:2022-12-01 07:21:56

文中使用的MySQL版本为5.6。

之前我们有讲过在Oracle数据库中关于远程数据库的访问可以使用DBLinked来实现,那在MySQL中是否也存在类似的方式呢?

答案是肯定的,在MySQL中若想访问远程数据库可以通过开启Federated引擎+映射表实现。

1. 开启Federated引擎

首先了解一下如何开启Federated引擎。由于默认情况下Federated引擎是关闭的状态,那我们先看看当前数据库是否支持Federated引擎。

show engines;

如上图所示,当前数据库是支持Federated引擎的,但是没有开启。那么接下来通过修改配置文件来开启Federated引擎,如下图:

【MySQL】Federated引擎与Federated Server访问远程数据

至于mysql.cnf文件的存储位置各个不同版本(指的是Docker镜像)的MySQL可能存放路径不一样,本机采用的是linux版的MySQL并且已经挂载到宿主机的指定目录,因此只需要修改宿主机指定位置上的mysql.cnf即可。
在添加完成后重启一下mysql服务,如下图:

【MySQL】Federated引擎与Federated Server访问远程数据

重新登录一下然后看看是否已经启用,如下图:

【MySQL】Federated引擎与Federated Server访问远程数据

2. 创建Federated Server连接

其实一般来说直接通过Federated的Connection就可以连接到远程的服务器对应的数据库和表,如下图:

【MySQL】Federated引擎与Federated Server访问远程数据

(账号、密码和连接地址属于敏感信息都需要打码),这里最大的难点是远程数据库的密码中带有“@”关键字,因此创建的时候就会抛出下面错误:

Error Code: 1432. Can't create federated table. The data source connection string 'mysql://xxxhe:xxxhe!@#@192.168.xxx.xxx:xxxxxx/spot_paohe/spot_trad' is not in the correct format

为了解决这个问题,需要另建一个Federated Server来解决这种特殊字符的问题,以本例子为例需要使用下面的方式创建Federated Server,如下所示:

CREATE SERVER `spot_paohe_client`
FOREIGN DATA WRAPPER mysql
OPTIONS (
HOST '192.168.xxx.xxx',
PORT xxxxxx,
USER 'xxxhe',
PASSWORD 'xxxhe!@#',
DATABASE 'spot_paohe'
);

创建完成后可以通过以下命令进行连接,如下图:

【MySQL】Federated引擎与Federated Server访问远程数据

这样就创建出来了对应的表了,如下图:

【MySQL】Federated引擎与Federated Server访问远程数据

之后就可以在本地做完所有的数据清洗了。