暂无图片
keepalive双主架构下,前台应用是只连接到有1个主节点写还是连接到2个主节点,进行写入??
我来答
分享
暂无图片 匿名用户
keepalive双主架构下,前台应用是只连接到有1个主节点写还是连接到2个主节点,进行写入??

keepalive双主架构下,前台应用是只连接到有1个主节点写还是连接到2个主节点,进行写入??

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
PiscesCanon

不建议双主双写,因为存在如下问题:

在单机 MySQL 架构中,当我们需要更新一行数据时,系统会为该行加上 X 锁,以防止其他事务对其进行修改。这时,任何尝试修改该行的其他事务都将被阻塞,直到当前事务释放锁。

然而,在双主架构中,两个主节点是独立运作的。每个节点的 MySQL 实例只能管理和控制自己的锁,它们不能感知或者干预对方的锁状态。这意味着当两个节点同时尝试更新同一行数据时,它们可能会各自在本地实例中成功地加上 X 锁并进行更新,无视对方可能正在进行的同样的操作。这就可能引发数据不一致的问题。

假设我们有两个主节点,左节点和右节点。如果左节点试图更新一行数据,它会在自己的 MySQL 实例中为该行加上 X 锁。而右节点对此一无所知,所以如果它此时也试图更新同一行数据,会在自己的 MySQL 实例中加上 X 锁,而不会遇到任何阻塞。之后,左节点和右节点都可以正常地完成更新和提交操作。

然而,问题在于,这一行最终会被更新成什么值呢?这是未知的。因为两个节点都完成了各自的更新操作,但通过主从复制到另外一个节点后结果可能会不一致,这个和更新操作的先后顺序,网络的快慢都有关系。

暂无图片 评论
暂无图片 有用 1
打赏 0
手机用户9375
2023-08-10
建议单写是吗?
回答交流
Markdown


请输入正文
提交
相关推荐
mysql里面有表值函数吗?
回答 2
已采纳
没有
top命令中显示的res是8560,mysql中的buffer pool是512m,怎么对不上?
回答 2
在Linux系统中使用top命令查看进程信息时,RES(ResidentSetSize)表示的是该进程当前使用的物理内存大小,不包括被交换出去的部分,但包括共享库占用的内存。而MySQL中的buffe
mysql多用户连接时,会自动宕掉,这可能是什么原因?
回答 2
自动宕掉是指mysqld挂了?可能是发生OOM了,可以查下单个用户的分配的内存大小是多少,调整下内存相关的参数。
MySQL 有没有办法不影响table其他数据 ,让主键ID重新从1开始?
回答 1
没有外键引用。可直接新建一列。从1开始。然后从1开始。删除原主键,再将新建一列为主键,再重命名列名如果有外键引用。则需要新建一列。从1开始。更新外键值。删除原主键,再将新建一列为主键,再重命名列名
逻辑备份和物理备份搭建主从,是否需要实例初始化的区别
回答 2
一个是逻辑备份,一个是物理热备,问题不在于实例是否要初始化,而是选择不同的备份恢复方式而采用不同的方法。
如何以最简单的方式将 MS excel 列转换为 mysql 列?
回答 1
复制到文本文件,使用loaddatainfile方式导入到mysql中
explain analyze delete 后出现not executable by iterator executor 提示,是什么意思?
回答 2
它表示查询计划无法通过迭代执行器来执行。这通常发生在以下情况下:查询计划使用了一些不支持迭代执行器的操作符:有些操作符可能无法被迭代执行器处理,例如某些特定的聚合函数、子查询类型等。因此,如果查询计划
oracle 有没有类似于 easycode 插件可以生成 mysql 表对应的数据的插件?
回答 1
已采纳
平时如果要向表中填充数据,我通常是定义一个存储过程直接执行,如果要测试实时写入,还可以设置一个job定期执行这个过程。
MySQL 两个表a表左连接b表查询,a表的时间类型跟b表的时间类型不一样,如何取出a表的时间大于b表的时间的数据?
回答 1
已采纳
在sql中把一个表的时间类型字段转换成和另一个表匹配后再写判断条件
mysql当前写的binlog文件是不能读取,一般怎么做?
回答 1
可以读取的mysqlbinlog可以解析当前binlog文件