MySQL中针对不同的功能需求提供了不同的存储引擎。所谓的存储引擎也就是MySQL下特定接口的具体实现。federated是其中一个专门针对远程数据库的实现。一般情况下在本地数据库中建表会在数据库目录中生成相应的表定义文件,并同时生成相应的数据文件。但通过federated引擎创建的表只是在本地有表定义文件,数据文件则存在于远程数据库中。通过这个引擎可以实现类似Oracle 下DBLINK的远程数据访问功能。
问题实现:
source(A)端
用户名:root
密码:root
端口:3306
ip=10.25.8.211
target(B)端
用户名:root
密码:root
在B端操作A端的数据库。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1. source(A) 端创建测试表
create table person(id int(11) not null,
name varchar(11) default null,
primary key(‘id’)
);
insert into person(1,‘jsfdf’);
insert into person(2,‘eeeeg’);
insert into person(3,‘hhhhg’);
insert into person(4,‘dddfg’);
insert into person(5,‘ggggg’);
2. source 端查看测试表的建表语句
show create table s ;
//create table person(id int(11) not null,
name varchar(11) default null,
primary key(‘id’)
);engine=innodb default charset=latin1;
3. source端创建用户并且授权
grant all privileges on source database.source table to target username ideentified by ‘target password’;
grant all privileges on source database.source table to source ip ideentified by ‘target password’;
show grants for target username;
//实例
GRANT ALL PRIVILEGES ON db1.person TO root IDENTIFIED BY ‘root’;
GRANT ALL PRIVILEGES ON db1.person TO root@10.25.8.211 IDENTIFIED BY ‘root’;
SHOW GRANTS FOR root;
4. 查看target(B)端是否安装了FEDERATED存储引擎
a. 查询是否安装federated引擎:show engines;
MySQL没有DB Link,所以只能通过federated引擎实现远程数据库连接。(本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来实现)首先查询是否安装了federated引擎:
b. 开启federated引擎:在my.int文件里的[mysqld]下面加一行federated,保存,重启mysql服务(重启计算机),再用命令show engines查询,即可。
查得federated引擎处于no状态,首先要开启federated引擎。
开启federated引擎的方法:
在windows下,找到MYSQL的安装目录里的my.int文件,如果没有,就把my-default.ini文件复制一个改名为my.int,然后在my.int文件里的[mysqld]下面加一行federated,保存,重启mysql服务(重启计算机),再用命令show engines查询,就可以看到federated的状态是yes。
5. 在target端定义基于federated存储引擎的表。
create table person1(id int(11) not null,
name varchar(11) default null,
primary key(id)
)engine=federated connection=‘mysql://root:root@10.25.8.211:3306/db1/person’;
connection=‘mysql://(target端)username:(target端)password@(source端)ip:(source端)端口/(source端)数据库/(source端)表’;
6. 检查远程数据表链接:
select * from person1;//操作成功
delete from person1 where id=1;
alter table person1 add grade int(11);
————————————————
版权声明:本文为CSDN博主「iancharming」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/iancharming/article/details/50151265