程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL中使用FREDATED引擎實現跨數據庫服務器、跨實例訪問

MySQL中使用FREDATED引擎實現跨數據庫服務器、跨實例訪問

編輯:關於MYSQL數據庫

跨數據庫服務器,跨實例訪問是比較常見的一種訪問方式,在Oracle中可以通過DB LINK的方式來實現。對於MySQL而言,有一個FEDERATED存儲引擎與之相對應。同樣也是通過創建一個鏈接方式的形式來訪問遠程服務器上的數據。本文簡要描述了FEDERATED存儲引擎,以及演示了基於FEDERATED存儲引擎跨實例訪問的示例。

1、FEDERATED存儲引擎的描述

  FEDERATED存儲引擎允許在不使用復制或集群技術的情況下實現遠程訪問數據庫
  創建基於FEDERATED存儲引擎表的時候,服務器在數據庫目錄僅創建一個表定義文件,即以表名開頭的.frm文件。

  FEDERATED存儲引擎表無任何數據存儲到本地,即沒有.myd文件
  對於遠程服務器上表的操作與本地表操作一樣,僅僅是數據位於遠程服務器
  基本流程如下:   

2、安裝與啟用FEDERATED存儲引擎

  源碼安裝MySQL時使用DWITH_FEDERATED_STORAGE_ENGINE來配置
  rpm安裝方式缺省情況下已安裝,只需要啟用該功能即可

3、准備遠程服務器環境

復制代碼 代碼如下:
-- 此演示中遠程服務器與本地服務器為同一服務器上的多版本多實例 
-- 假定遠程服務為:5.6.12(實例3406) 
-- 假定本地服務器:5.6.21(實例3306)    
-- 基於實例3306創建FEDERATED存儲引擎表test.federated_engine以到達訪問實例3406數據庫tempdb.tb_engine的目的 
 
[root@rhel64a ~]# cat /etc/issue 
Red Hat Enterprise Linux Server release 6.4 (Santiago)  
 
--啟動3406的實例 
[root@rhel64a ~]# /u01/app/mysql/bin/mysqld_multi start 3406 
[root@rhel64a ~]# mysql -uroot -pxxx -P3406 --protocol=tcp 
 
root@localhost[(none)]> show variables like 'server_id'; 
+---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| server_id     | 3406  | 
+---------------+-------+ 
 
--實例3406的版本號 
root@localhost[tempdb]> show variables like 'version'; 
+---------------+------------+ 
| Variable_name | Value      | 
+---------------+------------+ 
| version       | 5.6.12-log | 
+---------------+------------+ 
 
--創建數據庫 
root@localhost[(none)]> create database tempdb; 
Query OK, 1 row affected (0.00 sec) 
 
-- Author : Leshami 
-- Blog   :http://blog.csdn.net/leshami 
 
root@localhost[(none)]> use tempdb 
Database changed 
 
--創建用於訪問的表 
root@localhost[tempdb]> create table tb_engine as  
    -> select engine,support,comment from information_schema.engines; 
Query OK, 9 rows affected (0.10 sec) 
Records: 9  Duplicates: 0  Warnings: 0 
 
--提取表的SQL語句用於創建為FEDERATED存儲引擎表 
root@localhost[tempdb]> show create table tb_engine \G 
*************************** 1. row *************************** 
       Table: tb_engine 
Create Table: CREATE TABLE `tb_engine` ( 
  `engine` varchar(64) NOT NULL DEFAULT '', 
  `support` varchar(8) NOT NULL DEFAULT '', 
  `comment` varchar(80) NOT NULL DEFAULT '' 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 
 
--創建用於遠程訪問的賬戶 
root@localhost[tempdb]> grant all privileges on tempdb.* to 'remote_user'@'192.168.1.131' identified by 'xxx'; 
Query OK, 0 rows affected (0.00 sec) 
 
root@localhost[tempdb]> flush privileges; 
Query OK, 0 rows affected (0.00 sec) 

4、演示FEDERATED存儲引擎跨實例訪問

復制代碼 代碼如下:
[root@rhel64a ~]# mysql -uroot -pxxx 
 
root@localhost[(none)]> show variables like 'version'; 
+---------------+--------+ 
| Variable_name | Value  | 
+---------------+--------+ 
| version       | 5.6.21 | 
+---------------+--------+ 
 
#查看是否支持FEDERATED引擎 
root@localhost[(none)]> select * from information_schema.engines where engine='federated'; 
+-----------+---------+--------------------------------+--------------+------+------------+ 
| ENGINE    | SUPPORT | COMMENT                        | TRANSACTIONS | XA   | SAVEPOINTS | 
+-----------+---------+--------------------------------+--------------+------+------------+ 
| FEDERATED | NO      | Federated MySQL storage engine | NULL         | NULL | NULL       | 
+-----------+---------+--------------------------------+--------------+------+------------+ 
 
root@localhost[(none)]> exit 
[root@rhel64a ~]# service mysql stop 
Shutting down MySQL..[  OK  ] 
#配置啟用FEDERATED引擎 
[root@rhel64a ~]# vi /etc/my.cnf 
[root@rhel64a ~]# 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         #添加該選項 
[root@rhel64a ~]# service mysql start 
Starting MySQL.[  OK  ] 
[root@rhel64a ~]# mysql -uroot -pxxx 
root@localhost[(none)]> select * from information_schema.engines where engine='federated'; 
+-----------+---------+--------------------------------+--------------+------+------------+ 
| ENGINE    | SUPPORT | COMMENT                        | TRANSACTIONS | XA   | SAVEPOINTS | 
+-----------+---------+--------------------------------+--------------+------+------------+ 
| FEDERATED | YES     | Federated MySQL storage engine | NO           | NO   | NO         | 
+-----------+---------+--------------------------------+--------------+------+------------+ 
 
root@localhost[(none)]> use test 
 
-- 創建基於FEDERATED引擎的表federated_engine 
root@localhost[test]> CREATE TABLE `federated_engine` ( 
    ->   `engine` varchar(64) NOT NULL DEFAULT '', 
    ->   `support` varchar(8) NOT NULL DEFAULT '', 
    ->   `comment` varchar(80) NOT NULL DEFAULT '' 
    -> ) ENGINE=FEDERATED DEFAULT CHARSET=utf8 
    -> CONNECTION='mysql://remote_user:[email protected]:3406/tempdb/tb_engine'; 
Query OK, 0 rows affected (0.00 sec) 
 
-- 下面是創建後表格式文件 
root@localhost[test]> system ls -hltr /var/lib/mysql/test 
total 12K 
-rw-rw---- 1 mysql mysql 8.5K Oct 24 08:22 federated_engine.frm 
 
--查詢表federated_engine 
root@localhost[test]> select * from federated_engine limit 2; 
+------------+---------+---------------------------------------+ 
| engine     | support | comment                               | 
+------------+---------+---------------------------------------+ 
| MRG_MYISAM | YES     | Collection of identical MyISAM tables | 
| CSV        | YES     | CSV storage engine                    | 
+------------+---------+---------------------------------------+ 
 
--更新表federated_engine 
root@localhost[test]> update federated_engine set support='NO' where engine='CSV'; 
Query OK, 1 row affected (0.03 sec) 
Rows matched: 1  Changed: 1  Warnings: 0 
 
--查看更新後的結果 
root@localhost[test]> select * from federated_engine where engine='CSV'; 
+--------+---------+--------------------+ 
| engine | support | comment            | 
+--------+---------+--------------------+ 
| CSV    | NO      | CSV storage engine | 
+--------+---------+--------------------+ 

5、創建FEDERATED引擎表的鏈接方式

復制代碼 代碼如下:
scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name
    scheme: A recognized connection protocol. Only mysql is supported as the scheme value at this point.
    user_name: The user name for the connection. This user must have been created on the remote server, and must have suitable privileges to perform the required actions (SELECT, INSERT,UPDATE, and so forth) on the remote table.
    password: (Optional) The corresponding password for user_name.
    host_name: The host name or IP address of the remote server.
    port_num: (Optional) The port number for the remote server. The default is 3306.
    db_name: The name of the database holding the remote table.
    tbl_name: The name of the remote table. The name of the local and the remote table do not have to match.
鏈接示例樣本:
    CONNECTION='mysql://username:password@hostname:port/database/tablename'
    CONNECTION='mysql://username@hostname/database/tablename'
    CONNECTION='mysql://username:password@hostname/database/tablename'

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved