MariaDB-federated
开启 federated 方式
- 安装插件 mysql>
install plugin federated soname 'ha_federated.so';
- mysql> show engines;
启动 FEDERATED 存储引擎,修改 / etc/my.cnf 参数,
在 [mysqld] 下面添加:federated,重启 mysql``` [mysqld] federated # federated=1 ```
在服务器 A [真实数据存储] 数据库 test 下面创建表 john
mysql>CREATE TABLE IF NOT EXISTS user
( id
varchar(32) DEFAULT NULL,UNIQUE KEY index-123
(id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> insert into user values(1),(2),(3);
Query OK, 3 rows affected (0.11 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from john;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
- 在服务器 B [映射存储] federated
GRANT ALL PRIVILEGES ON sources.s TO dex IDENTIFIED BY 'federated';
GRANT ALL PRIVILEGES ON test.* TO federated@'%' IDENTIFIED BY 'federated';
SHOW GRANTS FOR dex;
数据库 test 下面创建相应的表 federated_user
mysql> CREATE TABLE IF NOT EXISTS federated_user ( id
varchar(32) DEFAULT NULL, UNIQUE KEY index-123
(id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ENGINE=FEDERATED CONNECTION='mysql://federated:federated@10.114.0.14:3306/test/user';
DROP TABLE IF EXISTS sbtest1
;
CREATE TABLE sbtest2
(id
int(11) NOT NULL AUTO_INCREMENT,k
int(11) NOT NULL DEFAULT 0,c
char(120) NOT NULL DEFAULT '',pad
char(60) NOT NULL DEFAULT '',
PRIMARY KEY (id
),
KEY k_1
(k
)
) ENGINE=InnoDB AUTO_INCREMENT=1000001 DEFAULT CHARSET=latin1 ENGINE=FEDERATED CONNECTION='mysql://federated:federated@10.114.0.14:3306/test/sbtest1';
insert into sbtest1 values (1000005,486130,"47513645709-35092521244-74964471417-72326288909-23344110303-47569023971-79820853098-08050066800-93542686704-72275113768","03868057333-47146290482-37804645000-22378876760-56591265036");
mysql> select * from federated_user;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.37 sec) #请注意执行时间
mysql> insert into federated_user values(4),(5),(6); #可以通过 federated_user 修改数据
Query OK, 3 rows affected (0.16 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from federated_user;
在服务器 A 下面查询
mysql> select * from john;
6 rows in set (0.00 sec) #数据同样被修改;
在服务器 B 下面查看存储数据,只有表结构并没有相应的数据
image
【3】连接脚本注意事项,federated 连接字符串的格式说明
mysql> CREATE TABLE federated_user (
-> id
varchar(32) DEFAULT NULL,
-> UNIQUE KEY index-123
(id
)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8
-> ENGINE=FEDERATED CONNECTION='mysql://root:123456@192.168.47.167:3306/test/john';
其中 CONNECTION 的格式如下:
mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name
【总结】利用 federated 存储引擎构建表的时候,可以快速实现跨数据库的访问和修改,为一些特殊场景的应用提供了良好的解决办法;
由于是跨主机的访问,所以当表数量级别达到十万以上的时候,整个访问的速度相对本机有很明显的效率问题。