mysql 访问两个库,两个MySQL Server通过NFS访问同一个数据库

我想在两台独立的机器上运行两个独立的MySQL实例,但在nfs上使用相同的数据目录,是否可以使用InnoDB存储引擎?申请操作将确保以下内容:

>一个MySQL实例将成为生产者

>一个MySQL将只读消费者

在MySQL网站上,可以通过MyISAM和合并存储引擎来提及这一点,但他们从不推荐它.

解决方法:

你现在要求的是不可能的.为什么???

首先,看看InnoDB架构

您正在寻找的内容目前存在于Oracle RAC中.

Oracle RAC

形成具有这些特征的集群

>每个Oracle RAC服务器都运行Oracle RDBMS的本地实例

>每个Oracle RAC服务器都有自己的日志缓冲区

>每个Oracle RAC服务器与其他Oracle RAC服务器共享访问权限

>所有Oracle RAC服务器都连接到同一组数据库文件

InnoDB的

适用于MySQL的InnoDB存储引擎

> InnoDB只有一个Log Buffer,只有一个连接到Log Buffer的线程

> InnoDB不允许多个Log Buffer线程

>当您启动mysqld(MySQL的一个实例)并且其InnoDB存储引擎尝试连接到ibdata1时,如果另一个日志缓冲区线程已经从另一个mysqld进程打开,则InnoDB存储引擎必须无法启动.

结语

请阅读我的earlier post for 2 alternatives.第三种方法是切换到MySQL Cluster(使用NDB Storage Engine).这样,您可以在多个SQL节点之间共享一个或多个数据节点.

更新2014-04-24 16:55美国东部时间

@ypercube发表了以下评论

Your linked question (and answer) is about 1 server. This question is about 2 servers that share the same data directory. The two do not seem relevant.

理论上,您可以在单个服务器上设置多个mysqld实例.但是,每个mysqld实例都必须指向一个唯一的系统表空间(ibdata1).鉴于这一事实,当涉及到多个mysqld实例时,无论它们来自一个数据库服务器还是来自多个数据库服务器:

>只有一个mysqld实例可以在系统表空间上获得独占的日志缓冲线程

>只有一个mysqld实例可以在系统表空间上获得独占的插入缓冲线程

这就是为什么我提到我的Oct 03, 2013帖子.我还提到了与Oracle RAC的比较.

你的实际问题

I want to run two separate MySQL instances on two separate machines, but using same data directory over NFS, is it possible with InnoDB Storage Engine?

InnoDB不具有共享日志缓冲区或共享插入缓冲区.答案是不.我不认为Oracle会改变InnoDB存储引擎来做到这一点.如果他们这样做了,由于预算和/或愚蠢的原因,许多人会放弃Oracle RAC和MySQL Cluster以支持InnoDB.

标签:mysql,innodb,ibdata

来源: https://codeday.me/bug/20190806/1601488.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值