【MySQL】存储引擎 - FEDERATED详解

发布于:2025-05-10 ⋅ 阅读:(13) ⋅ 点赞:(0)

📢博客主页:https://blog.csdn.net/2301_779549673
📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 JohnKi 原创,首发于 CSDN🙉
📢未来很长,值得我们全力奔赴更美好的生活✨

在这里插入图片描述

在这里插入图片描述


🏳️‍🌈一、FEDERATED 存储引擎

允许访问远程 MySQL 数据库中的数据,

在不使用复制或集群技术的情况下,FEDERATED 存储引擎可以实现对 远程MySOL数据库中数据的访问,以多个物理服务器为基础创建一个逻辑数据库

当查询 FEDERATED 表时,将会从远程数据库获取数据,非常适合分布式或数据集市环境。

如图所示:
在这里插入图片描述

默认不支持,可以在启动时通过命令行选项 --federated选项文件的配置 来启用

在这里插入图片描述

🏳️‍🌈二、创建 FEDERATED 表

本地配置文件中的[mysqld]节点下加入 federated=1 来启用 FEDERATED 引擎,之后重启 MySQL 服务

# 配置⽂件路径 /etc/mysql/mysql.cnf
[mysqld]
federated=1 #加⼊配置

root@VM-20-5-ubuntu:/var/lib/mysql/test_db# systemctl restart mysql
root@VM-20-5-ubuntu:/var/lib/mysql/test_db# systemctl status mysql
● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2025-05-09 15:38:23 CST; 30s ago
       Docs: man:mysqld(8)
             http://dev.mysql.com/doc/refman/en/using-systemd.html
    Process: 75856 ExecStartPre=/usr/share/mysql-8.0/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
   Main PID: 75895 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 2219)
     Memory: 364.2M
        CPU: 808ms
     CGroup: /system.slice/mysql.service
             └─75895 /usr/sbin/mysqld

May 09 15:38:22 VM-20-5-ubuntu systemd[1]: Stopped MySQL Community Server.
May 09 15:38:22 VM-20-5-ubuntu systemd[1]: mysql.service: Consumed 1.546s CPU time.
May 09 15:38:22 VM-20-5-ubuntu systemd[1]: Starting MySQL Community Server...
May 09 15:38:23 VM-20-5-ubuntu systemd[1]: Started MySQL Community Server.

在这里插入图片描述

  • 在远程服务器上为用户加入远程访问权限,安全性与权限管理专题详细介绍
  • 在MySQL8.0中 InnoDB 是默认引擎,所以在创建表时需要指定 ENGINE=FEDERATED;
  • 创建 FEDERATED 表时,本地的表定义远程服务器的表定义相同,但数据存储在远程服务!
  • 本地表定义中使用 CONNECTION 连接字符串指向远程表的连接字符串;
  1. 创建运程表
# 远程服务器上的建表语句
CREATE TABLE t_federated (
id INT(20) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(32) NOT NULL DEFAULT '',
INDEX name (name)
)
ENGINE=MyISAM
DEFAULT CHARSET=utf8mb4;

在这里插入图片描述
2. 建立远程连接用户

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 创建本地逻辑表
    注意,这里得需要用到内网穿透技术,让云服务器访问到本地。
# 本地服务器上的建表语句
CREATE TABLE t_federated (
id INT(20) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(32) NOT NULL DEFAULT '',
INDEX name (name)
)
ENGINE=FEDERATED
DEFAULT CHARSET=utf8mb4
CONNECTION='mysql://federated:Fed123!!!@192.168.100.242:3306/test_db/t_federated'; # 指定远程服务器的连接

--CONNECTION='mysql://fed_user@remote_host:3306/test_database/test_table';

连接字符串的格式:

  • scheme://user_name[:password@host_name[:port num]/db nameltbl namescheme: 连接协议,目前只支持mysql;
  • user_name: 用于连接远程服务器的用户名,注意:这个用户在远程服务器已创建,并授予了相应的操作权限;
  • password: 用户的密码:
  • host_name: 远程服务器的IP地址;
  • port_num: 远程服务器MySQL服务的端口号;
  • db_name: 远程表所在的数据库名;
  • tbl_name: 远程表名,本地表名与远程表名可以不同,但建议保持一致。

不会生成数据文件,表定义在数据字典中,生成.sdi为后缀的表信息描述文件(JSON格式)
建表成功后,对本地表的增删改查和操作远程表一样

🏳️‍🌈三、 FEDERATED 注意事项

  • 远程服务器必须是MySQL服务器;
  • 使用 CONNECTION 字符串时,密码中不能使用"@"字符
  • DROP TABLE 只删除本地表,不删除远程表;
  • 不支持事务

👥总结

本篇博文对 【MySQL】存储引擎 - FEDERATED详解 做了一个较为详细的介绍,不知道对你有没有帮助呢

觉得博主写得还不错的三连支持下吧!会继续努力的~


网站公告

今日签到

点亮在社区的每一天
去签到