日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql跨节点join——federated引擎

發(fā)布時間:2023/11/29 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql跨节点join——federated引擎 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

一、 什么是federated引擎

mysql中的federated類似于oracle中的dblink。

federated是一個專門針對遠程數(shù)據(jù)庫的實現(xiàn),一般情況下在本地數(shù)據(jù)庫中建表會在數(shù)據(jù)庫目錄中生成相對應的表定義文件,并同時生成相對應的數(shù)據(jù)文件。

[圖]

但是通過federated引擎創(chuàng)建的表只是在本地有表定義文件數(shù)據(jù)文件則在遠程數(shù)據(jù)庫中。

[圖]

針對federated存儲引擎表的查詢會被發(fā)送到遠程數(shù)據(jù)庫的表上執(zhí)行,本地是不存儲任何數(shù)據(jù)的。

1. 本地的表結(jié)構(gòu)必須與遠程的完全一致。本地可以比遠端數(shù)據(jù)庫的字段少,但是不能多。因為多的話字段就沒有地方存儲了,還記得么,federated只在本地存儲了表結(jié)構(gòu)。

2. 遠程的數(shù)據(jù)庫必須是mysql。

3. 不支持事務。

4. 不支持表結(jié)構(gòu)修改,遠端表結(jié)構(gòu)變了本地不知道(并不會主動通知本地,不理解,搞個監(jiān)聽器很難嗎),一旦遠端修改了表結(jié)構(gòu)就gg了。

5. 創(chuàng)建時遠程數(shù)據(jù)服務器必須已經(jīng)存在此表。

6. 一個federated表指向另一個federated表是有可能的,但是要避免死循環(huán)。

7. 不使用查詢緩存。

8. 遠程服務器gg,federated表gg。

?

二、 如何使用

1. 開啟federated引擎

mysql默認是沒有打開federated存儲引擎的。

如果報這種錯誤,就可能是沒有打開federated存儲引擎:

使用 show engines 命令查看當前的引擎支持狀況:

在mysql的配置文件中 :

這個只是一個引用,去在圈中的文件中:

在[mysqld]節(jié)點下添加一行 federated:

重啟mysql即可:

再連接到myql, show engines

?

2. 創(chuàng)建federated表

先在A服務器創(chuàng)建一張表:

-- A服務器 drop database if exists foo_db ; create database foo_db default charset utf8 ; use foo_db; drop table if exists t_foo_table ; create table t_foo_table(id int primary key auto_increment ,username varchar(20) not null ,passwd varchar(20) not null )charset=utf8;

然后在B服務器創(chuàng)建另一張表,結(jié)構(gòu)和之前創(chuàng)建的一模一樣,不同的只是多了指定engine和connection:

-- B服務器 drop database if exists foo_db ; create database foo_db default charset utf8 ; use foo_db; drop table if exists t_foo_table ; create table t_foo_table(id int primary key auto_increment ,username varchar(20) not null ,passwd varchar(20) not null )charset=utf8 engine=federated connection="mysql://root:@10.26.200.134/foo_db/t_foo_table";

connection的格式:

mysql://username:passwd@hostname/db_name/table_name

在A服務器往表中插入一條數(shù)據(jù):

insert into t_foo_table (username, passwd) values ("foo", "bar");

在B服務器查詢:

同理在B服務器插入,在A服務器也能查得到,實際上是發(fā)送到A服務器執(zhí)行,數(shù)據(jù)也是存儲在A服務器上的。

?

3. 借助于federated表跨節(jié)點join

在B數(shù)據(jù)庫再創(chuàng)建一個表:

-- 要連接的表 drop table if exists t_bar ; create table t_bar(id int primary key auto_increment ,barbar varchar(20) not null default "" )charset utf8;

插入數(shù)據(jù):

insert into t_bar (id,barbar) values (1, "barbar"); insert into t_bar (id,barbar) values (2, "barbarbar"); insert into t_bar (id,barbar) values (3, "barbarbarbar"); insert into t_foo_table (username, passwd) values ("foofoooofoo", "barbaaaaarbar"); insert into t_foo_table (username, passwd) values ("foofooooofoo", "barbaaaarbar"); insert into t_foo_table (username, passwd) values ("foofooooofoo", "barbaaaarbar");

連表查詢:

select * from t_bar as t1 join t_foo_table as t2 on t1.id=t2.id ;

查詢結(jié)果:

OK,查詢結(jié)果是從兩臺服務器的兩個節(jié)點中取出來的。

?

三、 總結(jié)

使用federated有很大的局限性,而且總感覺很不靠譜的樣子,講道理的話應該使用中間件來實現(xiàn)的。

?

?

?

.

轉(zhuǎn)載于:https://www.cnblogs.com/cc11001100/p/6675409.html

總結(jié)

以上是生活随笔為你收集整理的mysql跨节点join——federated引擎的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。