链接数据库

MySQL可以向Oracle、SQLServer一样链接到远程数据库,使用 federated 数据库引擎实现远程链接

开启FEDERATED引擎

检验是否开启 federated 数据库引擎。

#查看 federated 引擎的 support 属性值,如果是 "YES" 表示已开启,如果是 "NO" 表示未开启
show engines;

如果 federated 数据库引擎未开启,通过调整配置启动 federated。

#修改 my.cnf (如果是windows系统,修改 C:\ProgramData\MySQL\MySQL Server 5.6\my.ini)
#在 mysqld 下直接添加 federated ,修改保存后重启MySQL,再通过 show engines 查看状态

[mysqld]
federated

mysql-> show engines;

创建远程数据库链接表

首先在源数据库(source,需要被链接的库)建立一个表demo:

CREATE TABLE `demo` (
  `code` varchar(16) NOT NULL,
  `name` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在目标数据库(target,需要链接源数据库的库)建立链接表demo_remote:

CREATE TABLE `demo_remote` (
  `code` varchar(16) NOT NULL,
  `name` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8
CONNECTION='mysql://root:mysql@localhost:3307/source/demo';   #source= demo表所属的schema

# CONNECTION='mysql://username:password@hostname:port/database/tablename'
# CONNECTION='mysql://username@hostname/database/tablename'
# CONNECTION='mysql://username:password@hostname/database/tablename'

在目标库查询和操作数据:

insert into demo_remote values ('code 01','name 01');
select * from demo_remote;

权限分配

grant all PRIVILEGES on source.* to user@'123.123.123.123' identified by 'password';

上面的语句表示将 source 数据库的所有权限授权给 user 用户,允许 user 用户在 123.123.123.123 这个 IP 进行远程登录,并设置 user 用户的密码为 password

下面逐一分析所有的参数:

all PRIVILEGES 表示赋予所有的权限给指定用户,这里也可以替换为赋予某一具体的权限,例如:

select,insert,update,delete,create,drop 等。具体权限间用【,】半角逗号分隔。

source.*表示上面的权限是针对于哪个表的,source 指的是数据库,后面的 * 表示对于所有的表,由此可以推理出:对于全部数据库的全部表授权为“*.*”,对于某一数据库的全部表授权为“数据库名.*”,对于某一数据库的某一表授 权为“数据库名.表名”

FEDERATED的使用

  • 本地的表结构必须与远程的完全一致;

  • 没有对事务的支持;

  • 远程服务器必须是一个MySQL服务器,FEDERATED对其它数据库引擎的支持可能会在将来被添加;

  • FEDERATED表指向的远程表在通过FEDERATED表访问它之前必须存在;

  • 一个FEDERATED表指向另一个FEDERATED表是可能的, 但是必须小心不要创建一个循环;

  • 如果远程表已经改变,对FEDERATED引擎而言是没有办法知道的。原因是因为这个表必须象数据文件一样工作,除了数据其它任何都不会被写入。如果有任何对远程数据库的改变,本地表中数据的完整性可能会被破坏;

  • FEDERATED存储引擎支持SELECT、INSERT、UPDATE、DELETE和索引, 它不支持ALTER TABLE、DROP TABLE或任何其它的数据定义语言语句;

  • 执行使用SELECT、INSERT、UPDATE和DELETE, 但不用HANDLER.;

  • FEDERATED表对查询缓存不起作用.;

results matching ""

    No results matching ""