Mysql使用FEDERATED引擎实现数据表映射

Mysql使用FEDERATED引擎实现数据表映射

说明

在实际工作中,我们可能会遇到需要操作其他数据库的部分表,但又不想系统连接多库。此时我们就需要用到数据表映射。Mysql自带的FEDERATED引擎完美的帮我们解决了该问题。让我们一起来开启FEDERATED引擎实现数据表映射之路

开启Federated引擎

  • 查看启Federated引擎是否安装
    mysql>show engines;
    Mysql使用FEDERATED引擎实现数据表映射_第1张图片
    可以看出服务器当前并未安装Federated引擎
  • 安装Federated引擎
    mysql> install plugin federated soname ‘ha_federated.so’;
    image
  • 查看本地数据库是否开启FEDERATED引擎
    mysql>show engines;
    Mysql使用FEDERATED引擎实现数据表映射_第2张图片
    此处可以看到FEDERATED引擎已经开启(本地开启过了,实际情况初次安装是未开启状态)
  • 如果没有开启
    • Windows操作系统:在my.ini配置文件中添加“federated”
    • Linux操作系统:vi /etc/my.cnf,加入一行federated,保存并退出
      Mysql使用FEDERATED引擎实现数据表映射_第3张图片
    • 重启mysql服务
      • mysql>service mysqld restart
        Mysql使用FEDERATED引擎实现数据表映射_第4张图片
    • 再次查看(已经开启):mysql>show engines;
      Mysql使用FEDERATED引擎实现数据表映射_第5张图片

使用FEDERATED建表语句实现数据库映射

此处需要注意的一点,映射表的操作会同时对A库–B库建立映射关系的表同步操作,两表数据完全一直。如需对某库的表操作权限设置,请创建操作用户授权时授对应权限。
- 语法

CREATE TABLE (......) ENGINE =FEDERATED CONNECTION='mysql://[name]:[pass]@[location]:[port]/[db-name]/[table-name]' 

name--mysql用户名

pass--mysql密码

location--ip

port:端口号

db-name:数据库名

table-name:表名

 PS:创建的表名和远程访问的表名可以不同。
  • 例:
CREATE TABLE `user` (  
  `id` int(11) NOT NULL,  
  `name` varchar(30) NOT NULL,  
  `age` int(11) NOT NULL,  
  PRIMARY KEY (`id`)  
) ENGINE=FEDERATED    
CONNECTION='mysql://newuser:NewUser(123456)@127.0.0.1:3306/test_a/user';

附录:mysql创建账号/密码及授权

  • 创建用户和密码(请创建在被映射的数据库服务器上)
mysql>CREATE USER newuser IDENTIFIED BY 'NewUser(123456)';
mysql>create user newuser identified by 'NewUser(123456)';
  • 授权
mysql>grant select on dbname.* to newuser@"%" identified by "NewUser(123456)"; 
mysql>grant select,update on dbname.table_name to newuser@"%" identified by "NewUser(123456)"; 
mysql>grant select,update,insert,delete on dbname.table_name to newuser@"%" identified by "XiDian(123456)"; 
- mysql>grant 授权类型(select,update,insert,delete“,”分隔) on 库名 to 用户名@"%" identified by "密码";

- mysql授权后,mysql>FLUSH PRIVILEGES;刷新一下

你可能感兴趣的:(Mysql)