1.背景
- 本地MySQL数据库要访问远程MySQL数据库的表中的数据, 可以通过FEDERATED存储引擎来实现.
- 有点类似Oracle中的数据库链接(DBLINK). 要允许这个存储引擎, 当构建MySQL时使用–with-federated-storage-engine来configure.
- 当创建一个FEDERATED表的时候, 服务器在数据库目录创建一个表定义文件. 文件由表的名字开始, 并有一个.frm扩展名.
- 无其它文件被创建, 因为实际的数据在一个远程数据库上.
2.相关特性
- 允许本地访问远程 MySQL 数据库中表的数据
- 本地不存储任何数据文件
- 仅支持 MySQL 对 MySQL 的访问
- 不支持异构数据库的访问
- MySQL默认不开启Federated存储引擎
3.使用
1. mysql命令行 show engines查看状态是否已经开启;
1.如图所示 support为YES 为说明已经开启
2.如果为 ON 说明为未开启,找到my.ini文件,在标签mysqld下添加federated保存重启Mysql即可;
4.my.ini找不到
默认可能生成在C:\ProgramData\MySQL\MySQL Server 5.7。 我的是5.7版本,自己选择对应的目录。
5.federated远程连接地址密码包含特殊符号@…等,连接会出现问题。
同步A库a表到B库,那么在B库创建server连接地址配置(server表-也不是表 我也灭看懂)创建就完了,代码如下:
图片解析:
1.server名字不固定,自定义即可,OPTIONS (USER ‘用户名’, PASSWORD ‘密码’,HOST ‘mysql地址’, PORT 端口号, DATABASE ‘对应A库名字’);
2.创建完server,建表语句,后边跟上FEDERATED CONNECTION=‘server名字/要同步表的名字’;(其中表字段要一致,多一个少一个不知道,自己实验吧。)
3.有些服务器地址可能出现连接问题,如果是在同一个服务器同步数据,可以尝试把连接地址改成localhost;
4.注:此图片使用来自-----叶强的博客,也可以参考其文章【Mysql】federated引擎远程连接带有@符号的数据库名/密码的服务器报错
http://blog.sina.com.cn/u/2543456441
为了方便你们复制和查看,贴一段代码!结合上边第五条,进行带入,应该很容易理解了!
CREATE SERVER zjglink
FOREIGN DATA WRAPPER mysql
OPTIONS (USER '用户名', PASSWORD '密码',HOST 'mysql地址', PORT 端口号, DATABASE '对应A库名字');
CREATE TABLE `title` (
`id` varchar(32) NOT NULL,
`name` varchar(45) NOT NULL COMMENT '职称名',
`rank` int(11) NOT NULL COMMENT '职称级别',
`pid` varchar(32) NOT NULL COMMENT '父级id',
`level` int(11) NOT NULL COMMENT '等级',
PRIMARY KEY (`id`)
) ENGINE=FEDERATED
CONNECTION='zjglink/title';
结合Mysql触发器可以做动态数据同步!!!