在工作中會遇到MySQL要跨服務器訪問,下面就介紹mysql的FEDERATED引擎如何建立跨服務器訪問
進入mysql命令行,沒有看到Federated,說明沒有安裝
mysql>show engines;
安裝Federated
mysql> install plugin federated soname 'ha_federated.so';
查看有了Federated,但是是NO,說明沒有開啟
vi /etc/my.cnf,加入一行federated,保存并退出
重啟mysql服務
service mysqld restart
再次查看,已經是yes了
使用FEDERATED建表語句如下:
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:創建的表名和遠程訪問的表名可以不同。
目前使用federated 最大的缺點:
1. select count(*), select * from limit M, N 等語句執行效率非常低,數據量較大時存在很嚴重的問題,但是按主鍵或索引列查詢,則很快,如以下查詢就非常慢(假設 id 為主索引)
select id from db.tablea where id >100 limit 10 ;
而以下查詢就很快:
select id from db.tablea where id >100 and id<150
2. 如果虛擬虛擬表中字段未建立索引,而實體表中為此字段建立了索引,此種情況下,性能也相當差。但是當給虛擬表建立索引后,性能恢復正常。
3. 類似 where name like "str%" limit 1 的查詢,即使在 name 列上創建了索引,也會導致查詢過慢,是因為
federated引擎會將所有滿足條件的記錄讀取到本,再進行 limit 處理。
這幾個問題已經嚴重影響了federated 在實際環境中的應用,所以這個引擎很冷門,不過在一些特定環境還是能用的。
————————————————
版權聲明:本文為CSDN博主「糾結的逗號」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/commasx/article/details/87284878