Mysql-经典实战案例(13):如何通过Federated实现跨实例访问表

实现原理:使用Federated引擎本创建一个链接表实现,但是Federated 引擎只是一个按列的顺序和类型解析远程返回的数据流

在这里插入图片描述

准备工作:
1. 本地库启用 Federated 引擎
  1. 查看是否已启用:

    SHOW ENGINES;
    

    如果Federated 引擎的 SupportYES 就可以直接用;
    如果是 NO

    • 编辑 MySQL 配置文件 my.cnf(Linux 一般在 /etc/my.cnf,Windows 在 MySQL 安装目录下)

    • [mysqld] 段加:

      federated
      
    • 重启 MySQL。

2. 确保远程库允许连接
  • 远程 MySQL 要创建一个能被本地 MySQL 访问的账号,比如:

    CREATE USER 'federated_user'@'本地IP' IDENTIFIED BY '密码';
    GRANT SELECT ON remote_db.* TO 'federated_user'@'本地IP';
    FLUSH PRIVILEGES;
    
  • 测试是否能直接用 mysql -h远程IP -u federated_user -p 登录。


3. 在本地建 Federated 表

假设远程有:

-- 远程 MySQL (192.168.1.200)
CREATE DATABASE remote_db;
USE remote_db;
CREATE TABLE user_info (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT
);
INSERT INTO user_info VALUES (1, 'Alice', 25), (2, 'Bob', 30);
本地建一个 Federated 表

需要先从远程表获取对应的表结构创建sql


SHOW CREATE TABLE remote_user_info\G

本地创建(把 InnoDB 改成 FEDERATED

CREATE TABLE remote_user_info (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT
) ENGINE=FEDERATED
CONNECTION='mysql://federated_user:密码@192.168.1.200:3306/remote_db/user_info';
参数说明
  • mysql://
    协议标识,固定写 mysql:// 表示 Federated 连接到 MySQL 数据源。
  • federated_user
    远程 MySQL 用户名(必须有访问远程表的权限)。
  • 密码
    对应的远程 MySQL 用户密码。
  • 192.168.1.200
    远程 MySQL 主机的 IP 地址(也可以写域名)。
  • 3306
    远程 MySQL 端口(默认是 3306)。
  • remote_db
    远程 MySQL 数据库名(schema 名)。
  • user_info
    远程 MySQL 表名。

4. 跨库查询示例

假设本地有个 local_db.local_orders 表:

SELECT o.order_id, u.name, u.age
FROM local_orders o
JOIN remote_user_info u ON o.user_id = u.id;

这时 remote_user_info 实际就是访问远程 MySQL 的数据了。


5. 注意事项
  • 性能:每次访问 Federated 表都会发 SQL 到远程库 → 网络延迟会影响速度
  • DDL 限制ALTER TABLE 对 Federated 表有限制,无法修改表结构。而且本地表结构必须与远程表完全一样,如果远程表结构变了,本地 Federated 表也要手动同步修改
  • 事务支持:Federated 不支持跨库事务(和 Oracle DBLINK 一样的问题)
  • 安全:连接串的密码是明文存储的,生产环境注意账号权限最小化
  • 删除: 删除本地表,远程表不会删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值