mysql資料庫跨伺服器查詢【需要確定mysql支援FEDERATED ,可以參照文章內容自己配置】

NO IMAGE

現有兩臺MySQL資料庫
一臺是192.168.1.1 埠3306 上有資料庫DB1 有表TABLE1
一臺是192.168.1.2 埠3307 上有資料庫DB2 有表TABLE2
192.168.1.1遠端連線192.168.1.2資料庫所使用的使用者名稱root1 密碼root1
192.168.1.2遠端連線192.168.1.1資料庫所使用的使用者名稱root2 密碼root2
現在想對 TABLE1 和 TABLE2 兩張表進行關聯查詢 請問SQL應該怎麼實現

沒有辦法直接進行JOIN查詢。

你可以在DB1中建立一個 FEDERATED 指向這個 DB2.table2 如下,然後就象在同一資料庫中DB1中操作即可。

CREATE TABLE TABLE2 (
id     INT(20) NOT NULL AUTO_INCREMENT,
name   VARCHAR(32) NOT NULL DEFAULT '',
other  INT(20) NOT NULL DEFAULT '0',
PRIMARY KEY  (id),
INDEX name (name),
INDEX other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://root2:[email protected]:3307/DB2/TABLE2';

原表是INNODB 也是被 FEDERATED 支援的

檢視mysql資料庫是否支援FEDERATED
mysql> show engines;

手冊上的說法。
you must start the MySQL server binary using the –federated option.
在你的啟動命令中加上 –federated

==================================================================
參考文章:
MySQL中使用FREDATED引擎實現跨資料庫伺服器、跨例項訪問:
http://www.bitscn.com/pdb/mys…
Mysql 開啟Federated引擎的方法 :
http://www.jb51.net/article/3…

測試伺服器兩臺:192.168.134.11和192.168.134.12
mysql資料庫版本:
[[email protected] ~]# rpm -qa mysql
mysql-5.1.73-5.el6_6.x86_64

目標資料庫IP:192.168.134.11
建立一張測試表student:

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(100) unsigned zerofill NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`age` int(3) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

本資料庫IP:192.168.134.12
登入mysql:
mysql -u root -proot
檢視當前支援的儲存引擎
SQL>show engines;
安裝federated儲存引擎:
mysql>install plugin federated soname ‘ha_federated.so’;
安裝結束後退出來編輯mysql配置檔案

配置啟用FEDERATED引擎

[[email protected] ~]# vi /etc/my.cnf
[[email protected] ~]# tail -7 /etc/my.cnf
[mysqld]
socket = /tmp/mysql3306.sock
port = 3306
pid-file = /var/lib/mysql/my3306.pid
user = mysql
server-id=3306/
federated #新增該選項
重新啟動mysql資料庫:
再次檢視當前支援的儲存引擎
已經支援federated儲存引擎

建立和目標資料庫中表etl/student表結構一樣的表:

DROP TABLE IF EXISTS `student_engine`;
CREATE TABLE `student_engine` (
`id` int(100) unsigned zerofill NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`age` int(3) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=FEDERATED AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
CONNECTION='mysql://使用者名稱:密碼@192.168.134.11:3306/etl/student';

操作本表student_engine可以檢視和更新目標資料庫表student