現在我有這么一個需求, 就是有兩個項目, 一個叫項目A,一個項目B, 由於A的用戶表和B的用戶表是要實現一樣的.
例如: 我在A項目中注冊了,要實現在B項目中也能登錄, 當用到B的時候, 由於B數據庫中有視圖, 所有不能直接橋連到A
由於用到的數據是mysql, 那么可以使用Federated引擎實現這個需求.
環境
首先查詢一下mysql中有沒有Federated這個引擎.我有的是mysql5.7.22
show engines;
結果
mysql> show engines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | CSV | YES | CSV storage engine | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 9 rows in set (0.00 sec)
這是有的, 在最后一項, 但是它沒有開啟, 那么接下來就方便多了.
第一步
在my.cnf中添加federated這一個屬性就可開啟.
再查詢一下
下面就是在建表語句中加入Federated了.
第二步
聲明引擎 連接屬性 賬號 密碼 ip port 數據庫 表 ENGINE =FEDERATED CONNECTION='mysql://root:lizhenghua@192.168.137.148:3306/zskdb/cas_user';
slave中創建表結構的時候加入上面引擎.
CREATE TABLE `cas_user` ( `id` varchar(255) NOT NULL COMMENT 'id', `encryid` varchar(255) DEFAULT NULL COMMENT '加密后的用戶id', `name` varchar(255) DEFAULT NULL COMMENT '用戶名', `password` varchar(255) DEFAULT NULL COMMENT '密碼', `mobile` varchar(40) DEFAULT NULL COMMENT '手機號碼', `email` varchar(100) DEFAULT NULL COMMENT '郵箱', `sex` int(1) DEFAULT NULL COMMENT '性別(0:男,1:女)', `credit` double(11,2) DEFAULT '0.00', PRIMARY KEY (`oid`), UNIQUE KEY `upk_user_id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='用戶表' ENGINE =FEDERATED CONNECTION='mysql://root:zhenghua@192.168.137.148:3306/zskdb/cas_user';
從上面可以看出來, 我本身表就已經有啦innodb引擎, 我在后面再添加了一個.
注意: 只要表結構就行, 數據會自動從master中映射過來的.
演示:只要master中的cas_user表有操作,在slave中會顯示同樣的操作, 我在master中刪除兩條數據, 打開slave的cas_user會發現數據同樣少了那被刪的兩條.