案例概况
在企业应用中,成熟的业务通常数据量都比较大 单台MySQL在安全性、 高可用性和高并发方面都无法满足实际的需求 ,所以需要配置多台主从数据库服务器以实现读写分离来满足需求
一、主从复制原理
1.1、 MySQL的复制类型
- 基于语句的复制(STATEMENT, MySQL默认类型)
- 基于行的复制(ROW)
- 混合类型的复制(MIXED)
1.2、MySQL主从复制的工作过程

其中最重要的是:两个日志三个线程
1.2.1、过程
Master端的操作
- 记录变更到二进制日志(Binary Log):
- 在每个事务更新数据完成之前,Master会在其二进制日志中记录这些改变。这些改变包括数据修改、结构变更等所有会影响数据库状态的操作。
- 写入二进制日志的操作完成后,Master会通知存储引擎提交事务。这一步确保了事务的完整性和数据的一致性。
Slave端的操作
- 复制二进制日志到中继日志(Relay Log):
- Slave会启动一个I/O线程,该线程在Master上打开一个普通的连接,并启动Binlog dump process。
- Binlog dump process负责从Master的二进制日志中读取事件。如果Slave已经跟上Master的进度,它会进入睡眠状态等待Master产生新的事件。
- I/O线程将这些从Master读取到的事件写入到Slave的中继日志中。中继日志是Slave端用于暂存从Master接收到的变更事件的日志。
- 应用变更到Slave数据库:
- 接下来,SQL从线程(SQL slave thread)会处理中继日志中的事件。它从中继日志中读取事件,并重新执行这些事件,以此来更新Slave数据库中的数据,使其与Master数据库中的数据保持一致。
- 只要SQL线程与I/O线程保持一致,中继日志通常会位于操作系统的缓存中,这大大减少了磁盘I/O的开销。
复制的限制
- 串行化操作:复制过程在Slave上是串行化的,这意味着在Master上并行执行的更新操作在Slave上必须串行执行。这可能导致Slave上的复制延迟,特别是当Master上的更新操作非常频繁时。
性能优化和问题解决
- 优化硬件和网络:确保Master和Slave服务器的硬件资源充足,并优化网络延迟以减少数据传输的时间。
- 使用并行复制:在MySQL 5.7及以上版本中,可以使用并行复制来加速Slave的复制速度。并行复制允许多个SQL线程同时处理中继日志中的不同事件,但需要注意事务的依赖性和冲突。
- 分析和优化SQL查询:定期分析并优化查询,确保没有慢查询影响复制性能。
- 处理复制延迟:监控复制状态,如果发现延迟,需要分析原因并采取相应措施,如增加Slave服务器的数量、优化查询等。
二、MySQL主从复制延迟
1、网络延迟
2、master服务器高并发,形成大量事务
3、主从硬件设备导致 cpu主频、内存io、硬盘io
4、本来就不是同步复制、而是异步复制从库优化Mysql参数。
比如增大innodb_buffer_pool_size,让更多操作在Mysql内存中完成,减少磁盘 操作。 从库使用高性能主机。包括cpu强悍、内存加大。避免使用虚拟云主机,使用物理主机,这样提升了i/o 方面性。 从库使用SSD磁盘 网络优化,避免跨机房实现同步 问题解决方法 半同步复制- 解决数据丢失的问题 并行复制---解决从库复制延迟的问题
三、MySQL 有几种同步方式
三种(加扩展一种)
1、异步复制(Async Replication)
2、同步复制(sync Replication)
3、半同步复制(Async Replication)
4、增强半同步复制(lossless Semi-Sync Replication)、无损复制
3.1、异步复制(Async Replication)
主完成之后就返回客户端,不关系从是否同步,主挂之后,从可能会只有原来数据。
都不等
主库将更新写入Binlog日志文件后,不需要等待数据更新是否已经复制到从库中,就可以继续处理更多 的请求。Master将事件写入binlog,但并不知道Slave是否

1268

被折叠的 条评论
为什么被折叠?



