MySQL 遠程連接(federated存儲引擎)


標簽:federated存儲引擎

概述  

本文主要介紹通過federated存儲引擎建立遠程連接表

測試環境:mysql 5.6.21

 

步驟

開啟federated存儲引擎

先查看federated存儲引擎存儲引擎是否啟用

SHOW ENGINES ; 

默認mysql是沒有開啟federated存儲引擎,我這里因為已經配置了。

開啟federated存儲引擎只需要在my.cnf文件中增加‘federated’就可以。

創建遠程連接表

 mysql配置遠程連接必須在本地創建federated存儲引擎的表,配置遠程連接參數,本地創建的表必須和遠程表的定義保持一致,這里我就拿本地另一個案例數據庫來做測試,效果和遠程是一樣。

show create table sakila.actor;

創建遠程存儲引擎表

CREATE TABLE FEDERATED_actor (
   `actor_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
   `first_name` varchar(45) NOT NULL,
   `last_name` varchar(45) NOT NULL,
   `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   PRIMARY KEY (`actor_id`),
   KEY `idx_actor_last_name` (`last_name`)
 ) ENGINE =FEDERATED CONNECTION='mysql://root:123456@127.0.0.1:3306/sakila/actor'; 

注意:本地創建的表名必須在遠程服務器存在,創建的字段也必須是遠程表中的字段,可以比遠程表的字段少,但是不能多,本地存儲引擎選擇:ENGINE =FEDERATED,

CONNECTION選項中的連接字符串的一般形式如下:scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name

還有一些連接字符串的例子:

CONNECTION='mysql://username:password@hostname:port/database/tablename'
CONNECTION='mysql://username@hostname/database/tablename'
CONNECTION='mysql://username:password@hostname/database/tablename'

注意:配置密碼作為純文本的話會存在安全問題,運行show create table,show table status是可以見的

 

SELECT * FROM test.federated_actor;

更新本地表

USE test;

update federated_actor
set last_name='GUINESS1'
where actor_id=1;
SELECT * FROM test.federated_actor;

SELECT * FROM sakila.actor;

對本地進行更新操作,本地和遠程的數據都被更改了。

增加字段

alter table federated_actor add column   idtest INT DEFAULT 0;

Error Code: 1031. Table storage engine for 'federated_actor' doesn't have this option

federated存儲引擎不支持alter table 操作

 

刪除表

drop table test.federated_actor;

刪除本地表對遠程表無影響

 

二、create server方法

還可以通過create server方法創建基於遠程服務器的鏈接,但是這種鏈接也是用於federated存儲引擎,不能通過該鏈接來查詢遠程服務器的表。

語法:

CREATE SERVER server_name
    FOREIGN DATA WRAPPER wrapper_name
    OPTIONS (option [, option] ...)

option:
  { HOST character-literal
  | DATABASE character-literal
  | USER character-literal
  | PASSWORD character-literal
  | SOCKET character-literal
  | OWNER character-literal
  | PORT numeric-literal }

注意:wrapper_name只能是mysql,使用其它名稱無法支持

1.創建server

CREATE SERVER server_10
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST '192.168.137.10',USER 'root',PASSWORD 'root' ,PORT 3306,DATABASE 'study');

注意:這些基本參數應該存在,至少需要保證通過這些參數能連接到遠程服務器,DATABASE不能少

2.創建表

 CREATE TABLE y (name varchar(10)) ENGINE=FEDERATED CONNECTION='server_10';

同樣創建的表名必須和遠程服務器的表名一樣,字段也必須是遠程表中的字段,可以比遠程表的字段要少但是不能多。

現在查詢本地創建的表也就是查詢遠程表,同時對本地表的操作也會應用到遠程服務器表中。

總結

mysql的dblink的功能目前是具有federated存儲引擎,沒有想其它的數據庫產品那樣的可以通過dblink服務來對遠程服務器表進行查詢的功能,希望以后能有這方面的功能。

 

 

 

備注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須注明文章來源,且在文章開頭明顯處給明鏈接,否則保留追究責任的權利。

《歡迎交流討論》

 

---恢復內容結束---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM