FEDERATED存储引擎的功能与oracle的DBLINK基本类似,主要用来提供对远程MySQL服务器上面的数据的访问接口,默认情况下面,mysql是不启用该存储引擎的。
###开启FEDERATED存储引擎
1、查看是否开启FEDERATED存储引擎
mysql>show engines;
由此可以看出FEDERATED的状态是no,说明没有开启,如果没有的话说明没有编译进去,需要重新安装,FEDERATED是支持动态安装。
install plugin federated soname 'ha_federated.so';
要想开启的话是support为YES,可以在/etc/f/内添加federated(主要在mysqld的模块下添加,放在其他模块下无法识别变量),然后重启MySQL就可以了。
###创建远程用户并授权(本地数据库)
```
mysql> create user remote_user@'%' identified by '123';
mysql> create database test;
mysql> grant all on test.* to remote_user@'%';
mysql> flush privileges;
mysql> create user remote_user@'localhost' identified by '123';
mysql> grant all on test.* to remote_user@'localhost';
mysql> flush privileges;
mysql> select user,host from mysql.user;
```
###创建连接
本地数据库:
```
mysql> create table local_fed(
id int not null auto_increment,
name varchar(32) not null default '',
other int not null default '0',
primary key(id)
)
engine=federated
default charset=utf8mb4
connection='mysql://remote_user:123@192.168.214.129:3380/test/test_table';
```
注:
schema://user_name[:password]@host_name[:port_num]/db_name/tb1_name
解释说明:
schema:公认的连接协议,此时仅mysql作为该值;
user_name:连接的用户名,用户必须在远程服务器上创建;
password:用户名密码;
host_name:远程服务器的主机名或ip地址;
port_num:远程服务器的端口号,默认是3306
db_name:远程表的数据库名称;
tb1_name:远程表的名称,可以和本地表的名称不匹配。
远程数据库:表名可以不一致,但结构要一致。
```
CREATE TABLE test_table (
id INT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL DEFAULT '',
other INT(20) NOT NULL DEFAULT '0',
PRIMARY KEY (id),
INDEX name (name),
INDEX other_key (other)
)
ENGINE=MyISAM
DEFAULT CHARSET=utf8mb4;
```
###测试
在本地数据库内插入一条数据,远程数据库内就会实时同步数据。