概述
可将FEDERATED存储引擎的功能类比为oracle的DBLINK或SQLSERVER的linkedserver,默认情况下mysql不启用该存储引擎
启用FEDERATED存储引擎
检查是否开启FEDERATED:
show engines;
从结果中看FEDERATED的support是No,说明没有启用;
如果压根找不到FEDERATED的话说明没有编译进去,需要重新安装,FEDERATED支持动态安装
install plugin federated soname 'ha_federated.so';
如果需要启用FEDERATED,需要在/etc/my.cnf中[mysqld]模块下添加federated,然后重启mysql就生效
vim /etc/my.cnf
[mysqld]
federated
创建用户
在本地数据库上创建远程用户并将Link库的所有权限授权:
create user remote_user@'%' identified by '123';
grant all on Link.* to remote_user@'%';
flush privileges;
create user remote_user@'localhost' identified by '123';
grant all on Link.* to remote_user@'localhost';
flush privileges;
select user,host from mysql.user;
在远程数据库上创建本地用户并将Link库的所有权限授权:
create user remote_user@'%' identified by '123';
grant all on Link.* to remote_user@'%';
flush privileges;
create user remote_user@'localhost' identified by '123';
grant all on Link.* to remote_user@'localhost';
flush privileges;
select user,host from mysql.user;
创建连接
远程表:
create table sys_user (
id int not null,
username varchar(50) default NULL,
PRIMARY KEY (id)
)ENGINE = InnoDB DEFAULT CHARSET=utf8;
本地表和远程表需要表结构一致,在本地数据库执行如下建表语句
create table link_yun_sys_user (
id int not null,
username varchar(50) default NULL,
PRIMARY KEY (id)
)ENGINE = FEDERATED CONNECTION='mysql://remote_user:123@10.10.1.175:3306/Link/sys_user';
CONNECTION格式
mysql://user_name[:password]@host_name[:port_num]/db_name/tb1_name
其内容解释如下:
mysql:公认连接协议,此处只能写mysql
user_name:连接使用的用户名,必须在远程服务器的数据库上创建
password:用户的密码
host_name:远程服务器主机名或ip地址
port_num:远程服务器端口号,默认3306
db_name:远程表所在库名
tb1_name:远程表名,可以和本地表名不一致,但结构要相同,且仅支持InnoDB和MyISAM
创建之后进行测试验证即可