跨数据库服务器,跨实例访问是比较常见的一种访问方式,在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中使用FREDATED引擎实现跨数据库服务器、跨实例访问相关推荐

  1. mysql获取当月最后一天_mysql中获取本月第一天、本月最后一天、上月第一天、上月最后一天

    mysql获取当月最后一天_mysql中获取本月第一天.本月最后一天.上月第一天.上月最后一天等等 转自: https://blog.csdn.net/min996358312/article/det ...

  2. mysql 缓存怎么设置_mysql中缓存如何设置

    我就废话不多说了,大家还是直接看代码吧~create or replace function aa1(a1 integer[],a2 bigint) returns void AS $$declare ...

  3. mysql中存储引擎是啥_mysql中的存储引擎

    mysql存储引擎概述 什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力. ...

  4. mysql 复制 二进制文件命令_Mysql中复制详细解析

    原标题:Mysql中复制详细解析 1.mysql复制概念 指将主数据库的DDL和DML操作通过二进制日志传到复制服务器上,然后在复制服务器上将这些日志文件重新执行,从而使复制服务器和主服务器的数据保持 ...

  5. mysql my.cnf 日志_mysql中my.cnf配置项记录

    [mysqld] # 一般配置选项 port = @MYSQL_TCP_PORT@ socket = @MYSQL_UNIX_ADDR@ # back_log 是操作系统在监听队列中所能保持的连接数, ...

  6. mysql百万数据写入_mysql 百万级数据查找,并写入txt文件

    public class ConnectMysql { public List getTag(int start,int end){ List intList=new ArrayList(); Con ...

  7. mysql 导出用户权限_MySQL中导出用户权限设置的脚本分享

    在对MySQL数据库进行迁移的时候,有时候也需要迁移源数据库内的用户与权限.对于这个迁移我们可以从mysql.user表来获取用户的相关权限来生成相应的SQL语句,然后在目标服务器上来执行生成的SQL ...

  8. mysql datetime timestamp 索引_MYSQL中时间类型底层存储,DATETIME ,TIMESTAMP,INT 如何选择?...

    在优化索引时,思考了一个问题,DATE, DATETIME, TIMESTAMP,还有INT存储的时间,在索引中哪个效率更高一些? 索引存储的,如果单纯的测试,而不去了解底层存储的方式和类型就不能断言 ...

  9. mysql innodb4大特征_MYSQL中InnoDB特性浅谈

    许久没有更新博客,上周末放假把网易大牛姜sir的著作MYSQL技术内幕InnoDB存储引擎又翻阅了一番,对当前工作的InnoDB特性有了一些新的认识,下面谈谈自己的读后感. 1. InnoDB的体系架 ...

最新文章

  1. 【论文解读】MV3D-Net、AVOD-Ne用于自动驾驶的多视图3D目标检测网络
  2. 安卓Day16-bug
  3. WUSTOJ 1299: 结点选择(Java)
  4. 对dropout的理解详细版
  5. pwd 查看”当前工作目录“的完整路径
  6. tomcat8日志乱码_Tomcat输出日志乱码解决
  7. wordpress置顶文章调用与设置
  8. LeetCode 6055. 转化时间需要的最少操作数(贪心)
  9. 信息学奥赛C++语言:优惠购物
  10. 3 SD配置-企业结构-定义-定义产品组
  11. 小a与星际探索---DP
  12. 4 form j1 w 如何填写_设计必备方法,如何通过数据优化设计?
  13. 20190324每日一句:生活中的困难使我更加强大​​​​​​​
  14. 你熟悉的矢量图形制作软件ai cc 2019 mac完美直装版——Illustrator CC 2019 for Mac 23.0.3
  15. web服务器共享文件夹,局域网web共享文件夹的方法
  16. <tx:annoation-driven/>, web.xml的Spring配置文件位置,Spring父子容器, Spring部分源代码分析,<mvc:annotation-driven/>
  17. 盘点≠走过场,哪些功能可以进行高效库存盘点?
  18. mysql linux-syn25000是什么_Linux使用awl0.2进行局域网SYN进行洪水ATT
  19. qlib格式的可转债数据:正股价,转股价的整合
  20. NLP-预训练模型-2018-Bert-解析:BertForMaskedLM

热门文章

  1. 带有Python示例的math.cos()方法
  2. 4 种方法!检查字符串是否为合法的日期格式
  3. 有关链表的小技巧,我都给你总结好了
  4. C# 操作线程的通用类[测试通过]
  5. linux内核2.6.35编译过程
  6. [深入学习C#]匿名函数、委托和Lambda表达式
  7. 小米用户画像_腾讯企鹅智库发布手机品牌用户画像:华为一二线城市用户少于小米...
  8. 两台服务器之间mysql数据库怎么做同步_mysql数据库占满磁盘导致服务器无法运行...
  9. android 三个点按钮实现_Android 常用侧滑栏实现
  10. 已知三个用不同数制表示的整数_数学一轮复习26,数列的概念及简单表示法,常用方法及具体策略...