java多线程    Java入门    vsftp    ftp    linux配置    centos    FRP教程    HBase    Html5缓存    webp    zabbix    分布式    neo4j图数据库    

MYSQL读写分离,多库并行写入,主从复制问题

问题:你们有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题?

问题1:如何实现 MySQL 的读写分离?

其实很简单,就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去。

问题2:MySQL 主从复制原理的是啥?

主库将变更写入 binlog 日志,然后从库连接到主库之后,从库有一个 IO 线程,将主库的 binlog 日志拷贝到自己本地,写入一个 relay 中继日志中。接着从库中有一个 SQL 线程会从中继日志读取 binlog,然后执行 binlog 日志中的内容,也就是在自己本地再次执行一遍 SQL,这样就可以保证自己跟主库的数据是一样的。

问题3:MySQL 主从复制的数据丢失问题和数据延迟问题?

所以 MySQL 实际上在这一块有两个机制,一个是半同步复制,用来解决主库数据丢失问题;一个是并行复制,用来解决主从同步延时问题

半同步复制,也叫 semi-sync 复制,指的就是主库写入 binlog 日志之后,就会将强制此时立即将数据同步到从库,从库将日志写入自己本地的 relay log 之后,接着会返回一个 ack 给主库,主库接收到至少一个从库的 ack 之后才会认为写操作完成了。
半同步复制的“半”体现在,虽然主从库的Binlog是同步的,但主库不会等待从库执行完Relay-log后才返回,而是确认从库接收到Binlog,达到主从Binlog同步的目的后就返回了,所以从库的数据对于主库来说还是有延时的,这个延时就是从库执行Relay-log的时间。所以只能称为半同步。

并行复制,指的是从库开启多个线程,并行读取 relay log 中不同库的日志,然后并行重放不同库的日志,这是库级别的并行。 mysql5.7以后就具备了这种并行机制。

参数rpl_semi_sync_master_wait_point在MySQL的半同步复制中,控制master在哪个阶段等待来自slave的ACK确认。在MySQL5.7中,该参数主要有两个值:after_commit和after_sync。 1)rpl_semi_sync_master_wait_point=after_commit:master将自己的binlog写入到bin-log文件并且sync,且向存储引擎提交事务,然后一直等待ACK。当至少一个slave接收到binlog后,写入relay-log并返回ACK确认信息。master在接收到从库ACK确认信息后,将结果返回给客户端。 2)rpl_semi_sync_master_wait_point=after_sync(MySQL5.7新增):master将自己的binlog写入到binlog文件并且sync,之后会进入等待ACK,当至少一个slave接收到binlog之后,写入relay-log并返回ACK确认信息。master接收到从库ACK确认信息之后,向存储引擎提交事务,最终返回给客户端。

一般来说,如果主从延迟较为严重,有以下解决方案:

  • 分库,降低单库并发,将一个主库拆分为多个主库,每个主库的写并发就减少了几倍,此时主从延迟可以忽略不计。
  • 打开 MySQL 支持的并行复制,多个库并行复制。如果说某个库的写入并发就是特别高,单库写并发达到了 2000/s,并行复制还是没意义。
  • 重写代码,写代码的同学,要慎重,插入数据时立马查询可能查不到。

https://blog.51cto.com/u_12592884/2694004

https://gitee.com/shishan100/Java-Interview-Advanced/blob/master/docs/high-concurrency/mysql-read-write-separation.md#mysql-%E4%B8%BB%E4%BB%8E%E5%90%8C%E6%AD%A5%E5%BB%B6%E6%97%B6%E9%97%AE%E9%A2%98%E7%B2%BE%E5%8D%8E
https://blog.csdn.net/keil_wang/article/details/88669587


This entry was posted in 数据库 and tagged , . Bookmark the permalink.
月小升QQ 2651044202, 技术交流QQ群 178491360
首发地址:月小升博客https://java-er.com/blog/mysql-zhu-cong-write/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.

Leave a Reply