我想在两台独立的机器上运行两个独立的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