📢博客主页: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
连接字符串指向远程表的连接字符串;
- 创建运程表
# 远程服务器上的建表语句
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. 建立远程连接用户
- 创建本地逻辑表
注意,这里得需要用到内网穿透技术,让云服务器访问到本地。
# 本地服务器上的建表语句
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详解 做了一个较为详细的介绍,不知道对你有没有帮助呢
觉得博主写得还不错的三连支持下吧!会继续努力的~