2013-01-16 24 views

回答

0

實現此行爲的一種可能方式是使用存儲引擎的FEDERATED表(與MyISAM,InnoDB相反)。

該存儲本質上是一個代理。假設您在主機'remote_host'上有一個'remote_table'數據庫'remote_db'。如果你想使用該表,如果它是在數據庫主機「local_hostlocal_db「本地表,你會建立一個新的表「local_table」上的「local_dbFEDERATED storange引擎,並將其指向'remote_table'on'remote_host.remote_db'。它將充當虛擬代理表,通過MySQL客戶端API將語句轉發到遠程表並返回結果。

設置和使用FEDERATED表中的可笑容易。

在remote_db上,除了可能爲該表創建專用用戶外,出於安全原因以及有限權限,您無需執行任何特殊操作。

在local_db,您可以創建鏡像remote_table一個新表:

CREATE TABLE federated_table (
    [column definitions go here] 
) 
ENGINE=FEDERATED 
CONNECTION='mysql://[email protected]_host:9306/remote_db/remote_table'; 

那些最後兩行做所有的魔法 - 他們做出此表充當遠程表的代理,在指定的CONNECTION一行。

有一些疑難雜症的,雖然 - 沒有交易,沒有查詢緩存(local_host服務器上),在龐大的批量插入性能下降,...

參考文獻: The MySQL documentation

+0

更新了我的答案,包括一些更多的信息 – ilias

+0

我有兩個表,他們已經創建了一個是test1和其他是test2在mysql數據庫test2表是在另一臺服務器上創建的,我希望在我的服務器上創建視圖或讀取數據,並且這兩個表不是任何關係我的目標以避免重複..你可以幫助,如果你有任何想法ilias .. –

+0

有什麼不清楚我的答案? (建設性的批評總是受歡迎的)。無論如何,在與您的其他服務器上指向「test2」的聯合表格「test1」相同的服務器上創建一個表「test2」。通過這種方式,它將*使用test1,就像它在服務器上一樣,但它將*不會保存任何數據*。它會將所有查詢代理到其他服務器並返回結果,就像它是本地表一樣。避免任何重複。這個聯邦表也可以在視圖內使用。請告訴我你不明白的事情,以便我可以幫助你,但請仔細閱讀,首先... – ilias

相關問題