Mysql使用FEDERATED引擎实现数据表映射
说明
在实际工作中,我们可能会遇到需要操作其他数据库的部分表,但又不想系统连接多库。此时我们就需要用到数据表映射。Mysql自带的FEDERATED引擎完美的帮我们解决了该问题。让我们一起来开启FEDERATED引擎实现数据表映射之路
开启Federated引擎
- 查看启Federated引擎是否安装
mysql>show engines;
可以看出服务器当前并未安装Federated引擎 - 安装Federated引擎
mysql> install plugin federated soname ‘ha_federated.so’;
- 查看本地数据库是否开启FEDERATED引擎
mysql>show engines;
此处可以看到FEDERATED引擎已经开启(本地开启过了,实际情况初次安装是未开启状态) - 如果没有开启
- Windows操作系统:在my.ini配置文件中添加“federated”
- Linux操作系统:vi /etc/my.cnf,加入一行federated,保存并退出
- 重启mysql服务
- mysql>service mysqld restart
- mysql>service mysqld restart
- 再次查看(已经开启):mysql>show engines;
使用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;刷新一下