每日一听

开启 FEDERATED 引擎

SHOW ENGINES;

SHOW ENGINES 是查看 MySQL 引擎的命令,我们通过此命令可以查看 FEDERATED 引擎是否开启:

SHOW ENGINES 命令

可以看到,FEDERATED 引擎默认是关闭的,我们需要将其打开。

修改配置文件

修改 MySQL 的配置文件,新增一行,内容为:federated

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
 
[mysqld]
# 设置3306端口
port = 3306
......
# 开启 Federated 引擎
federated

修改完成后重启 MySQL,再次执行 SHOW ENGINES 命令,可以看到 FEDERATED 引擎已被打开:

SHOW ENGINES 命令

新建测试库/表

在第一个实例中创建 test_db.sys_user

sys_user

插入一些测试数据

sys_user

在第二个实例中创建 test_db.wx_user

wx_user

同样,也插入一些测试数据

wx_user

建立远程表

在第一个实例中的数据库建立远程表连接第二个实例中的数据库 wx_user

CREATE TABLE `wx_user`  (
  `id` bigint NOT NULL COMMENT '主键',
  `user_id` bigint NULL DEFAULT NULL COMMENT '用户ID',
  `openid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'openid',
  `area` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '地区',
  PRIMARY KEY (`id`) USING BTREE
) 
ENGINE = FEDERATED # 引擎
CHARACTER SET = utf8mb4    # 字符集
COLLATE = utf8mb4_general_ci # 排序规则
CONNECTION = 'mysql://root:root@localhost:3306/test_db/wx_user'; # 连接

执行命令后,第一个实例中的数据库新增了 wx_user 表:

wx_user

可以看到,新创建的 wx_user 表中的数据和第二个实例中的 wx_user 表中的数据是同步的:

wx_user

连接地址中 mysql://root:root@localhost:3306/test_db/wx_user 的各含义分别是:

  • mysql:// 远程数据库的类型
  • root:root 远程数据库的用户名和密码
  • test_db 远程数据库的名称
  • wx_user 远程数据库的表名称

以下有几点需要注意:

  1. 连接表的字段必须和真实表一致,允许是子集
  2. 真实表数据更新连接表自动会更新,反之亦然
  3. 真实表结构改动,连接表不会跟着改动
  4. 删除连接表,是真实表不会被跟着删除
  5. 连接表无法用 ALTER 语句改结构,所以如果想同步需求可以删除重新建

执行 Join 查询

运行下面的 join 查询语句:

select su.id, `name`, age, wu.id as wx_id, openid, area
from sys_user su left join wx_user wu on su.id = wu.user_id

可以看到,成功查询到第二个实例中的数据

运行结果

本笔记参考于博主 白菜说技术 整理
如有侵权,请联系作者 马铃薯头 删除
最后修改:2023 年 11 月 02 日
温柔的好天气总是和我一样,帅的鸭皮!