mysql一主多从怎么做 mysql 主从一致性方案( 二 )


设计 MySQL 的大叔想了一个折中的方案,mixed 格式的 binlog,其实就是 row 和 statement 格式混合使用 , 当 MySQL 判断可能数据不一致时,就用 row 格式,否则使用就用 statement 格式 。
有时候我们遇到从数据库中获取不到信息的诡异问题时,会纠结于代码中是否有一些逻辑会把之前写入的内容删除 , 但是你又会发现,过了一段时间再去查询时又可以读到数据了 , 这基本上就是主从延迟在作怪 。
主从延迟,其实就是“从库回放” 完成的时间,与 “主库写 binlog” 完成时间的差值 , 会导致从库查询的数据,和主库的不一致。
谈到 MySQL 数据库主从同步延迟原理,得从 MySQL 的主从复制原理说起:
总结一下主从延迟的主要原因:主从延迟主要是出现在 “relay log 回放” 这一步 , 当主库的 TPS 并发较高,产生的 DDL 数量超过从库一个 SQL 线程所能承受的范围,那么延时就产生了,当然还有就是可能与从库的大型 query 语句产生了锁等待 。
我们一般会把从库落后的时间作为一个重点的数据库指标做监控和报警,正常的时间是在毫秒级别,一旦落后的时间达到了秒级别就需要告警了 。
解决该问题的方法,除了缩短主从延迟的时间,还有一些其它的方法,基本原理都是尽量不查询从库 。
具体解决方案如下:
在实际应用场景中,对于一些非常核心的场景 , 比如库存,支付订单等 , 需要直接查询从库 , 其它非核心场景,就不要去查主库了 。
两台机器 A 和 B,A 为主库,负责读写,B 为从库,负责读数据 。
如果 A 库发生故障,B 库成为主库负责读写 , 修复故障后,A 成为从库,主库 B 同步数据到从库 A 。
一台主库多台从库,A 为主库,负责读写,B、C、D为从库,负责读数据 。
如果 A 库发生故障 , B 库成为主库负责读写,C、D负责读,修复故障后 , A 也成为从库,主库 B 同步数据到从库 A 。
mysql 多主一从如何实现原则上MySQL是不支持多主一从的复制架构的,有一个思路可以考虑,就是采用在从机上用多个MySQL实例来实现 , 不过 , 也要看你的各个主数据库数据量的大?。源踊衿鱅O的影响等等因素 。总体来说,还是要看你的应用想解决什么问题,只有仔细分析你的应用系统的实际需求 , 才能设计出适合的方案,国内MySQL的技术研究非常深入的公司,可以联系一下上海爱可生咨询 。
mysql 一主多从 同步据我所知应该是做不到的mysql一主多从怎么做,主从设置只能到某个数据库mysql一主多从怎么做,而不能到某个表里的记录 。只能通过其他方式进行,比如自己写shell脚本
mysql一主多从怎样切一:环境
192.168.1.100 master
192.168.1.101 slave1
192.168.1.102 slave2
slave1,slave2都是连在master上 。
二:模拟主故障
关闭master实例
service mysql stop
此时,slave1,slave2上show slave status\G都会发现错误:
Last_IO_Error: error reconnecting to master'RepUser@192.168.1.100:3307' - retry-time: 60 retries: 1
IO进程和sql进程状态:
Slave_IO_Running: Connecting(该状态表示会一直尝试重连主,如果主正常了,该进程状态会自动变成Yes)
Slave_SQL_Running: Yes
此时,master不能提供读写服务 。我们想将其中最新的slave提升为主 。
三:切换步骤
3.1确保所有的relay log全部读取完毕
在每个从库上执行:
stopslave io_thread;
showprocesslist;
直到看到Slave has read all relay log; waitingfor more updates,则表示从库更新都执行完毕了

推荐阅读