MySQL常用存储引擎之Federated
生活随笔
收集整理的這篇文章主要介紹了
MySQL常用存储引擎之Federated
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最后呢要給大家介紹的存儲引擎呢,是Federated這種存儲引擎,常常有人會問MYSQL是否像SQL Server服務器或者ORACLE網關的功能,從MYSQL服務器本身來說呢,他并沒有提供連接服務器這樣的功能,像Federation這種存儲引擎呢,是存儲引擎給我們這樣的一個功能,Federated這種存儲引擎,主要是提供不使用復制的情況下,在本地訪問遠程服務器表的功能,由于Federated只是在本地建立一個到遠程服務器的一個連接,可以說呢我們要訪問表的所有數據呢,還是放在遠程服務器上面,在本地并不存儲任何數據,每次訪問Federated上面表的時候呢,查詢都會發送到遠程服務器上來執行,并從遠程的服務器上獲取相關的數據,所以Federated表的第二個特點是,本地并不存儲數據,數據全部放到遠程服務器上面,那么Federated這個表的第三個特點呢,雖然他不會在本地存儲所訪問的數據,但是還是需要保存遠程MYSQL數據庫表的結構信息的,也就是說,在本地的Federated存儲引擎表呢,同樣需要存在一個FRM文件的,這里面有遠程表結構信息,以及如何連接遠程表的結構信息
?
那么Federated這種存儲引擎呢,可以實現連接SQL Server連接服務器的功能,但是由于其本身的性能并不太好,而且通常可以通過復制等方式來實現相同的目的,所以在當前的MYSQL版本中呢,Federated這種引擎默認是禁止的,想要使用這種引擎呢,我需要在我們使用時指定,Federated這個參數,我們可以通過命令確認一下,當前的MYSQL服務器中呢,是否支持federated這種存儲引擎,而在create table這種語句中呢,使用下面的連接字符串呢,就可以指定要查詢遠程的MYSQL服務器的相關信息,相關的數據庫表的一些信息,我們來看一下連接代表的參數是什么意思,首先username和password,是本地連接遠程MYSQL數據庫服務器的用戶和密碼,也就是要使用federated引擎,我們需要在遠程的MYSQL服務器上呢,建立的一種相關的用戶權限,這個我們在下面演示中我們就會看到,而host_name和端口號呢,遠程MYSQL的ip和端口號,db_name就是我們所要在本地要映射的遠程MYSQL數據庫的名字,table_name很簡單了,我們要在本地映射遠程MYSQL服務器表的名字,這樣說起來大家可能不太理解,演示一下federated引擎的使用 所以我們要演示一下federated這種引擎的使用,首先我們說明的一點是,現在是在一臺MYSQL服務器上來模擬,本地和遠程的服務器,來給大家演示一下,federated引擎的使用,為了模擬呢,首先我們來看看當前這個實例是否是支持federated引擎的show engines; 這里大家可以看到,現在是不支持NO的狀態,我們必須要在我們的MYSQL啟動文件中呢,進行一下修改vi my.cnf 首先加入federated引擎的支持,讓他等于1,開啟federated引擎的支持 這個時候我們要重啟一下我們的mysql服務器了mysqladmin shutdown 我們把它放在后臺中運行bin/mysqlid_safe --defaults-file=./my.cnf --user=mysql & 啟動了MYSQL服務器,大家看到federated引擎已經被支持了show engines; 現在我就為大家來演示一下,這種存儲引擎如何來使用,為了在同一個實例上來給大家來演示呢,我們需要建立兩個庫,首先一個庫稱之為local庫,另一個庫被稱之為remote庫,首先我們在遠程庫中建立一個表,稱之為remote,隨便加一些列,varchar它是10,同時id列作為我們的主鍵,我們可以使用innodb存儲引擎 我們來看一看遠程表的表結構是什么樣的create table remote_fed(id int auto_increment not null,c1 varchar(10) not null default '',c2 char(10)not null default '',primary key(id))engine=innodb;show create table remote_fed\G 大家可以看到,我們在遠程數據庫中,remote_fed這種遠程表,他實際上是使用了innodb這種存儲引擎,同時呢我們在這種表中呢,還需要插入一些數據,演示本地如何獲取遠程數據庫的信息,比如c1列,c2列,我們隨便插入一些數據就好,insert into remote_fed(c1,c2) values('aaa','bbb'),('ccc','ddd'),('ddd','fff');大家可以來看一下select * from remote_fed; 如果想要使用federated引擎,必須在 遠程數據庫中建立一個權限,我們要給他select,update,insert,delete的權限,我們就把這個用戶的名字稱之為fred_link,它是我們用來演示,在這臺機器上進行訪問就可以了,密碼設置為123456就好,現在已經完成了遠程數據庫訪問的工作grant select,update,insert,delete on remote.remote_fed to 'fred_link@127.0.0.1' identified by '123456' 我們現在來到fed_link服務器,模擬本地如何讀取遠程服務器上的演示的服務器上,同樣剛才我們說過了,我們要在本地服務器上保存遠程服務器上表的結構,我們可以把剛才建的表拷貝下來use local 唯一不同的大家要注意了,存儲引擎要指定為federated存儲引擎了,剛才知道,在遠程數據庫當中是innodb的,還要我們如何連接到遠程服務器的連接信息,就是我們剛才說的連接字符串,需要的比如說,用戶名我們剛才創建好了,fed_link,密碼是123456,數據庫IP就是我們剛才的實例了,只不過我們是跨了一個庫而已,數據庫是remote,表呢,remote_fed,現在我們就創建了federate表create table remote_fed(id int(11) not null auto_increment,c1 varchar(10) not null default '',c2 char(10) not null default '',primary key(id) )engine=federated connection='mysql://fred_link:123456@127.0.0.1:3306/remote/remote_fed';我們重新命名一下這個表名rename table remote_fed to local_fed; 大家可以看到,就是在local服務器下建立的local_fed這個表show create table local_fed\G 他使用存儲引擎是federated存儲引擎,同時連接到遠程字符串,我們在本地在對這個表進行查詢,看能否查詢到遠程的數據,大家可以看到,和我們剛才遠程插入的數據是完全一樣的select * from local.local_fed; 刪除數據是否可以反映到遠程的數據庫上,我們把id等于2的數據刪除,我們來查詢一下遠程數據庫的表delete from local.local_fed where id = 2;use remote;select * from remote_fed; 大家可以看到,id為2的那一列也被刪除了,這就驗證了剛才所說的federated引擎的一個功能,可以在本地數據庫中操作遠程數據庫中的庫和表,同時呢我們來看一看,在我們的本地數據庫下,是否存儲了federated表的數據,剛才我們在講解federated表的特性的時候呢,講解過在本地庫中,它是不應該存儲數據的,那么我們就來看一看,大家可以看到,本地庫中他只存儲了一個frm文件,存儲了一個遠程數據庫表中的一個結構,以及如何連接服務器表的一個文件 這里我們就介紹了完了federated表的特性和使用方法,同樣呢,我們來看一看他的適用場景,前面提到了連接遠程服務器表的功能,可以訪問遠程服務器上的表,這看起來很方便,但是由于其實現方式的原因呢,對于關聯查詢的查詢處理起來會比較的慢,有時還會影響遠程服務器的性能,所以這種表不適合在生產環境中,但是如果只是為了滿足偶爾的查詢和分析使用的話呢,或是由DBA手動查詢的話,以檢查業務邏輯是否符合,這種情況下還是可以使用的,所以我們說federated存儲引擎呢?
總結
以上是生活随笔為你收集整理的MySQL常用存储引擎之Federated的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL常用存储引擎之Memory
- 下一篇: MySQL服务器参数介绍