在工作中會(huì)遇到MySQL要跨服務(wù)器訪問,下面就介紹mysql的FEDERATED引擎如何建立跨服務(wù)器訪問
進(jìn)入mysql命令行,沒有看到Federated,說明沒有安裝
mysql>show engines;

安裝Federated
mysql> install plugin federated soname 'ha_federated.so';

查看有了Federated,但是是NO,說明沒有開啟

vi /etc/my.cnf,加入一行federated,保存并退出

重啟mysql服務(wù)
service mysqld restart

再次查看,已經(jīng)是yes了

使用FEDERATED建表語句如下:
CREATE TABLE (......) ENGINE =FEDERATED CONNECTION='mysql://[name]:[pass]@[location]:[port]/[db-name]/[table-name]'
name--mysql用戶名
pass--mysql密碼
location--ip
port:端口號(hào)
db-name:數(shù)據(jù)庫名
table-name:表名
PS:創(chuàng)建的表名和遠(yuǎn)程訪問的表名可以不同。
目前使用federated 最大的缺點(diǎn):
1. select count(*), select * from limit M, N 等語句執(zhí)行效率非常低,數(shù)據(jù)量較大時(shí)存在很嚴(yán)重的問題,但是按主鍵或索引列查詢,則很快,如以下查詢就非常慢(假設(shè) id 為主索引)
select id from db.tablea where id >100 limit 10 ;
而以下查詢就很快:
select id from db.tablea where id >100 and id<150
2. 如果虛擬虛擬表中字段未建立索引,而實(shí)體表中為此字段建立了索引,此種情況下,性能也相當(dāng)差。但是當(dāng)給虛擬表建立索引后,性能恢復(fù)正常。
3. 類似 where name like "str%" limit 1 的查詢,即使在 name 列上創(chuàng)建了索引,也會(huì)導(dǎo)致查詢過慢,是因?yàn)?/p>
federated引擎會(huì)將所有滿足條件的記錄讀取到本,再進(jìn)行 limit 處理。
這幾個(gè)問題已經(jīng)嚴(yán)重影響了federated 在實(shí)際環(huán)境中的應(yīng)用,所以這個(gè)引擎很冷門,不過在一些特定環(huán)境還是能用的。
————————————————
版權(quán)聲明:本文為CSDN博主「糾結(jié)的逗號(hào)」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/commasx/article/details/87284878