赞
踩
目录
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
上图详细的记录了,当我们执行一条SQL语句之后,MySQL是怎么处理的,并且将数据同步到从服务器上的。
1.1 SQL执行成功,执行commit,将命令保存到binlog二进制文件中
1.2 从服务器启动线程
1.3 该线程会向主服务器发起连接请求,建立连接
1.4 主服务器收到请求后,启动binlog dump线程
1.5 binlog dump线程启动后,从主服务器的binlog二进制文件拉取数据
1.6 binlog dump线程将拉取的数据发送到从服务器
1.7 从服务器收到数据后,将其保存到Relaylog中继日志中
1.8 从服务器启动SQL线程
1.9 SQL线程从中继日志中读取数据
1.10 SQL线程执行读取的命令,执行结果写入binlog
从服务器的I/O线程和SQL线程,都是复制线程,只不过前者负责同步数据,后者负责解析执行数据
记录的是修改的细节,但是会产生大量的日志内容
记录的是执行的SQL
以上两种都用
MySQL的主从同步,属于增量同步
主要基于以下三点考虑的:
3.1 效率高
3.2 网络开销小
3.3 减少对主库的负担
从服务器会维护一个称为:中继日志位置的信息
该信息记录了上次同步到的最后位置,下次同步的时候,会将该信息代入,获取同步的数据时,从该条记录的下一条记录开始获取,从服务器处理完之后,会将最新的最后一条记录信息存入中继日志位置信息中。
复制线程是从服务器启动时自动启动的,该线程会一直保持和主服务器的连接,并持续从主服务器拉取最新的数据,解析并执行。
复制线程会自动重连并恢复复制,来确保主从一致
我们利用从库,是为了保证数据库高可用的同时,也能提高从库的查询效率,为主库减轻压力
但是一旦出现了主从延迟,就意味着主库变更的数据在从库查不到,对于敏感的数据,就得变更策略,从主库查询了,如果是不敏感的数据,可以从从库查。
MySQL 5.6版本及以上支持并行复制,可以将一个大的复制线程分成多个子线程,加速复制速度
MySQL 5.5版本及以上支持半同步复制,可以确保至少有一个从服务器已经应用了主服务器的变更操作,减少延迟
MySQL的复制线程数量是可以配置的。可以考虑增加复制线程的数量来加快同步速度
如果主服务器的负载过高,可能会导致主从同步的延迟。可以通过优化查询、增加硬件资源等方式来减轻主服务器的负载,实际生产中遇到的大都是慢查询引起的,可以将此类慢查询通过其他的方式实现,例如走ES,同步实质上依赖的还是服务器的CPU和IO。
以上就是MySQL主从复制的过程及常见的问题,涵盖了参与复制的核心组件、同步方式、复制线程等要点。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。