详细介绍Mysql各种存储引擎的特性以及如何选择存储引擎
最近业务上有要求,要实现类似oracle 的dblink
linux版本
修改配置文件 /etc/mysql/my.cnf
windows 版本
Server version: 5.6.21-log MySQL Community Server (GPL)
修改配置文件my.ini
接着将其开启,在 [mysqld] 下添加一行:
重启Mysql,完成。
引擎说明
本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来实现. 有点类似Oracle中的
数据库链接(DBLINK). 要允许这个存储引擎, 当构建MySQL时使用--with-federated-storage-engine来configure.
当创建一个FEDERATED表的时候, 服务器在数据库目录创建一个表定义文件. 文件由表的名字开始, 并有一个.frm扩展名.
无其它文件被创建, 因为实际的数据在一个远程数据库上. 使用FEDERATED表的步骤是非常简单的. 通常, 运行两个服务器,
要么在同一个主机上, 要么在不同主机上.
首先, 必须在想要用FEDERATED表访问的远程服务器上有一个表. 假设, 远程的表在DB_FED数据库中并且被如下定义:
CREATE TABLE test_table (
id int(20) NOT NULL auto_increment,
name varchar(32) NOT NULL default '',
other int(20) NOT NULL default '0',
PRIMARY KEY (id),
KEY name (name),
KEY other_key (other)
) ENGINE=MyISAM;
接着, 在本地服务器上为访问远程表创建一个FEDERATED表:
CREATE TABLE federated_table (
id int(20) NOT NULL auto_increment,
name varchar(32) NOT NULL default '',
other int(20) NOT NULL default '0',
PRIMARY KEY (id),
KEY name (name),
KEY other_key (other)
) ENGINE=FEDERATED CONNECTION='mysql://remote_user@remote_host:9306/db_fed/test_table';
除了ENGINE选项应该是FEDERATED, 并且CONNECTION表选项是给FEDERATED指明如何连接到远程服务器上的连接字符串之外,
这个表的结构必须完全与远程表的结构相同.
远程主机信息指明本地服务器要连接到的远程服务器, 数据库和表信息指明哪一个远程表要被作为数据文件来用. 在这个例子中.
远程服务器被指定来作为远程主机在9306端口上运行, 所以要启动服务器, 让它监听9306端口.
在CONNECTION选项中的连接字符串的一般形式如下(密码和端口号是可选的):
mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name
这里有一些连接字符串的例子:
CONNECTION='mysql://username:password@hostname:port/database/tablename'
CONNECTION='mysql://username@hostname/database/tablename'
CONNECTION='mysql://username:password@hostname/database/tablename'
因为任何被用的密码作为纯文本被存在连接字符串中, 它可以被任何使对FEDERATED表使用SHOW CREATE TABLE或SHOW TABLE STATUS的用户, 或者在INFORMATION_SCHEMA数据库中查询TABLES表的用户看见.
FEDERATED支持及不支持的如下:
·远程服务器必须是一个MySQL服务器. FEDERATED对其它数据库引擎的支持可能会在将来被添加.
·FEDERATED表指向的远程表在通过FEDERATED表访问它之前必须存在.
·一个FEDERATED表指向另一个FEDERATED表是可能的, 但是必须小心不要创建一个循环.
·没有对事务的支持.
·如果远程表已经改变, 对FEDERATED引擎而言是没有办法知道的. 这个的原因是因为这个表必须象数据文件一样工作,
除了数据库其它任何都不会被写入. 如果有任何对远程数据库的改变, 本地表中数据的完整性可能会被破坏.
·FEDERATED存储引擎支持SELECT,INSERT,UPDATE,DELETE和索引. 它不支持ALTER TABLE,DROP TABLE或任何
其它的数据定义语言语句. 当前的实现不使用预先准备好的语句.
·执行使用SELECT,INSERT,UPDATE和DELETE, 但不用HANDLER.
·FEDERATED表不能对查询缓存不起作用.
这些限制中的一些在FEDERATED处理机的将来版本可能被消除.
2 使用示例
MySQL实例A(主机192.168.41.196)下, 建立对远程MySQL实例B(主机192.168.41.197)的表db_fed.tab_test访问.
1) MySQL实例B建立测试表
mysql> create database db_fed;
mysql> use db_fed
mysql> CREATE TABLE tab_test (
id int(20) NOT NULL auto_increment,
name varchar(32) NOT NULL default '',
PRIMARY KEY (id)
) ENGINE=MyISAM;
mysql> insert into tab_test set name = 'test1';
mysql> insert into tab_test set name = '测试1';
mysql> select * from tab_test;
+----+-------+
| id | name |
+----+-------+
| 1 | test1 |
| 3 | 测试1 |
+----+-------+
--建立一个用户专门用于远程federated引擎访问, 这个用户的权限决定了远程federated表的操作权限:
mysql> grant select on db_fed.* to u_fed@192.168.41.196 identified by 'iamwangnc';
2) MySQL实例A建立FEDERATED引擎表
--确认FEDERATED引擎已启用:
mysql> show engines;
...
| FEDERATED | YES | Federated MySQL storage engine | NO | NO | NO |
...
--如果未启用, 先确保configure MySQL时加了--with-federated-storage-engine选项, 另外还确保启动mysqld时加了--federated参数,
或者在my.cnf里[mysqld]段后面加了federated参数, 如下, 然后重启mysqld:
--------------------------------
[mysqld]
federated
--------------------------------
--在某个库下建立FEDERATED引擎表:
mysql> create database db_test;
mysql> use db_test
mysql> CREATE TABLE tab_test_fed (
id int(20) NOT NULL auto_increment,
name varchar(32) NOT NULL default '',
PRIMARY KEY (id)
) ENGINE=FEDERATED connection = 'mysql://u_fed:iamwangnc@192.168.41.197:3306/db_fed/tab_test';
--测试是否可以访问:
mysql> select * from tab_test_fed;
+----+-------+
| id | name |
+----+-------+
| 1 | test1 |
| 3 | 测试1 |
+----+-------+
--测试是否可以修改:
mysql> delete from tab_test_fed;
ERROR 1296 (HY000): Got error 10000 'Error on remote system: 1142: DROP command denied to user 'u_fed'@'comp196'
for table 'tab_test'' from FEDERATED
详细介绍Mysql各种存储引擎的特性以及如何选择存储引擎的更多相关文章
- Mysql各种存储引擎的特性以及如何选择存储引擎
几个常用存储引擎的特点 下面我们重点介绍几种常用的存储引擎并对比各个存储引擎之间的区别和推荐使用方式. 特点 Myisam BDB Memory InnoDB Archive 存储限制 没有 没有 有 ...
- 多图文,详细介绍mysql各个集群方案
目录 多图文,详细介绍mysql各个集群方案 一,mysql原厂出品 二,mysql第三方优化 三,依托硬件配合 四,其它 多图文,详细介绍mysql各个集群方案 集群的好处 高可用性:故障检测及迁移 ...
- 详细介绍MySQL/MariaDB的锁
官方手册:https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-transaction-model.html 1.事务提交的方式 在MariaD ...
- 详细介绍Spring 5的那些新特性与增强
Spring5 是一个重要的版本,距离SpringFramework4差不多四年.在此期间,大多数增强都是在 SpringBoot 项目中完成的.在本文中,我们将很快了解到Spring5发行版中的一些 ...
- MySQL数据分析-(15)表补充:存储引擎
大家好,我是jacky,很高兴继续跟大家分享<MySQL数据分析实战>,今天跟大家分享的主题是表补充之存储引擎: 我们之前学了跟表结构相关的一些操作,那我们看一下创建表的SQL模型: 在我 ...
- Spotlight on Mysql详细介绍
Spotlight on Mysql详细介绍 by:授客 QQ:1033553122 1. 版本 2. 使用介绍 1) 主页 会话面板 MySQL面板 INNODB面板 存储面板 主机面板 ...
- Impala基于内存的SQL引擎的详细介绍
一.简介 1.概述 Impala是Cloudera公司推出,提供对HDFS.Hbase数据的高性能.低延迟的交互式SQL查询功能. •基于Hive使用内存计算,兼顾数据仓库.具有实时.批处理.多并发等 ...
- 网卡配置和DNS配置,手动挂在nas存储的共享目录,网络相关其它操作命令,修改防火墙中的端口配置,resolv.conf配置详细介绍和网卡信息配置详细介绍
1. 网卡配置和DNS配置 若想服务器能够发邮件,需要让部署的服务器能够访问到外网环境.若部署的服务器访问不到外网,通过ping www.baidu.com的方式执行的时候,会出现以下问题: &q ...
- Mysql Binlog三种格式详细介绍
一.MySQL Binlog格式介绍 mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW! 查看binlog的格式的脚本: 二.binlog 的不同模式有什么区别 ...
随机推荐
- 烂泥:redis3.2.3安装与配置
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 前一段时间写过一篇codis集群的文章,写那篇文章主要是因为当时的项目不支持redis自 ...
- Harmonic Number(调和级数+欧拉常数)
题意:求f(n)=1/1+1/2+1/3+1/4-1/n (1 ≤ n ≤ 108).,精确到10-8 (原题在文末) 知识点: 调和级数(即f(n))至今没有一个完全正确的公式, ...
- 使用Masstransit开发基于消息传递的分布式应用
Masstransit作为.Net平台下的一款优秀的开源产品却没有得到应有的关注,这段时间有机会阅读了Masstransit的源码,我觉得我有必要普及一下这个框架的使用. 值得一提的是Masstran ...
- Flexbox 自由的布局
css3提出了一种新的布局方式.她并没有以摧枯拉朽之势博得我的喜爱.我和她的故事总是伴随着苦涩的味道.世道变了,总要做出些选择才能跟紧步伐.她很强大,能满足你天马行空的需求而不必抓掉一大把头发.她却很 ...
- Lesson 24 It could be worse
Text I entered the hotel manager's office and sat down. I had just lost £50 and I felt very upset. ' ...
- NodeJS的代码调试和性能调优
本文转自我的个人博客. NodeJS 自 2009 年显露人间,到现在已经六个年头了,由于各种原因,中间派生出了个兄弟,叫做 iojs,最近兄弟继续合体,衍生出了 nodejs4.0 版本,这东西算是 ...
- ABP(现代ASP.NET样板开发框架)系列之20、ABP展现层——动态生成WebApi
点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之20.ABP展现层——动态生成WebApi ABP是“ASP.NET Boilerplate Project (ASP.N ...
- ABP框架 - 会话
文档目录 本节内容: 简介 关于 IAbpSeesion 注入会话 会话属性 用户标识符 简介 如果一个应用需要登录,它就需要知道当前用户在执行的操作.尽管Asp.net自身在展现层提供了Sessio ...
- MySQL基础之存储过程
学过之后却没有总结,今天好不容易有点时间来看看. 存储过程的优势 1.简化复杂的SQL语句,将多个SQL语句封装成为一个存储过程,可以在其中加上一些流程控制语句 2.存储过程封装在数据库内部,编译之后 ...
- 游戏编程系列[1]--游戏编程中RPC协议的使用
RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在 ...