MySQL利用FREDATED實現跨例項訪問
跨資料庫伺服器,跨例項訪問是比較常見的一種訪問方式,在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:xxx@192.168.1.131: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'
相關文章
- 跨域訪問實現依據跨域
- mysql例項停止、啟動、配置遠端訪問MySql
- SQL Server跨庫跨伺服器訪問實現SQLServer伺服器
- [php]如何讓cookie實現跨域問題的原始碼例項PHPCookie跨域原始碼
- mysql設定指定ip遠端訪問連線例項MySql
- JavaScript 跨域訪問(API介面)實現原理分析JavaScript跨域API
- ajax實現的跨域請求程式碼例項跨域
- $.getJSON()實現跨域請求程式碼例項JSON跨域
- Holer實現外網訪問本地MySQLMySql
- Block內部訪問例項變數會出現的問題BloC變數
- PHP AJAX JSONP實現跨域請求使用例項PHPJSON跨域
- 利用內網穿透 實現外網訪問內網 MySQL等資料庫教程內網穿透MySql資料庫
- mysql實現遠端訪問,phpmyadmin實現遠端連線mysqlMySqlPHP
- 利用CheckForIllegalCrossThreadCalls=false設定跨執行緒訪問ROSthreadFalse執行緒
- 通過驗證訪問ASM例項ASM
- 利用canvas實現的驗證碼效果程式碼例項Canvas
- MYSQL: 表表示式(CTE)實現遞迴例項MySql遞迴
- 利用jstack定位典型效能問題例項JS
- 利用html5實現的飛雪效果程式碼例項HTML
- mysql利用binlog增量備份,還原例項MySql
- ajax實現跨域請求程式碼例項簡單介紹跨域
- 遠端客戶端 訪問 ASM 例項客戶端ASM
- PHP+MySQL實現線上測試答題例項PHPMySql
- 網易雲 MySQL例項遷移的技術實現MySql
- SpringMVC+RestFul詳細示例實戰教程(實現跨域訪問)SpringMVCREST跨域
- localStorage 跨域訪問跨域
- 跨源通訊、跨域訪問跨域
- input file利用FileReader實現圖片上傳程式碼例項
- 利用ServiceWorker實現頁面的快速載入和離線訪問
- 利用VPD細粒度訪問策略實現行級安全性
- 什麼是瀏覽器跨域訪問操作?JS如何實現?瀏覽器跨域JS
- federated儲存引擎實現跨伺服器的資料訪問儲存引擎伺服器
- 利用static來實現單例模式單例模式
- iframe 元素跨域訪問跨域
- 利用jQuery實現Tab選項卡jQuery
- Python的類例項屬性訪問規則Python
- Druid未授權訪問實戰利用UI
- ASP.NET MVC & WebApi 中實現Cors來讓Ajax可以跨域訪問ASP.NETMVCWebAPICORS跨域