Akemi

Mysql-Federate远程链接数据库

2024/07/26

Federate介绍
Federate是一种存储引擎,默认不开启
Federate允许本地访问远程mysql数据库中表的数据
本地只存结构,不存数据
不支持异构数据库,本地的表结构必须与远程的完全一样(只支持mysql)
不支持事务,不支持表结构修改

适用于不同系统或组织之间的互联互通
不直接设计数据,更加安全

连接方式:在建表语句尾部添加
enging=federate connection='MYSQL://用户名:密码@IP:端口/数据库名/表名;

1.开启federate
在my.cnf中加入
[mysqld]
federated

systemctl restart mysqld.service
show engines;

2.使用federate
环境:
A库 192.168.10.115:3306 wsdb1
B库 192.168.10.115:3306 wsdb2
C库 192.168.10.115:3306 wsdb3

create database wsdb1;
create database wsdb2;
create database wsdb3;

grant all privileges on wsdb1.* to root@’%’;
grant all privileges on wsdb2.* to root@’%’;
grant all privileges on wsdb3.* to root@’%’;

  1. 在db2创建一张表
    use wsdb2;
    create table wst2(
    -> id int not null auto_increment primary key,
    -> name CHAR(20) not null) engine myisam;

在db3同样创建表
use wsdb3;
create table wst3(
id int not null auto_increment primary key,
name CHAR(20) not null) engine myisam;

在db1创建federated表,来连接db2和db3的表
use wsdb1;
create table wst11(
id int not null auto_increment primary key,
name CHAR(20) not null )
engine federated connection=’mysql://root:root@192.168.10.115:3306/wsdb2/wst2’;

create table wst12(
id int not null auto_increment primary key,
name CHAR(20) not null )
engine federated connection=’mysql://root:root@192.168.10.115:3306/wsdb3/wst3’;

4.验证
在表中插入信息
insert into wst11(name) values(‘wangsheng2’);
insert into wst12(name) values(‘wangsheng3’);
commit;

返回库wsdb2和wsdb3,查看表中的数据是否被修改了
use wsdb2;
select * from wst2;
+—-+————+
| id | name |
+—-+————+
| 1 | wangsheng2 |
+—-+————+

use wsdb2;
select * from wst3;
+—-+————+
| id | name |
+—-+————+
| 1 | wangsheng3 |
+—-+————+

通过文件查看数据库的结构
ls /usr/local/mysql/data/wsdb2
db.opt wst2.frm wst2.MYD wst2.MYI
ls /usr/local/mysql/data/wsdb3
db.opt wst3.frm wst3.MYD wst3.MYI

ls /usr/local/mysql/data/wsdb1
db.opt wst11.frm wst12.frm
可见wsdb1只有表结构数据而没有正儿八经的数据和索引


CATALOG