主从复制分了五个步骤进行:
1、 步骤一:主库的更新事件(update、insert, delete)被写到binlog
2、 步骤二:从库发起连接,连接到主库。
3、 步骤三:此时主库创建一个binlog dump thread,把binlog的内容发送到从库。
4、 步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log
5、 步骤五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos 位置开始执行读取到的更新事件,将更新内容写入到slave的db
主从同步延迟的原因
一个服务器开放N个链接给客户端来连接的,这样会有大并发的更新操作,但是从服务器的里面读取binlog的线程仅有一个,当某个SQL在从服务器上执行的时间稍长或者由于某个SQL要进行锁表就会导致,主服务器的SQL大量积压,未被同步到从服务器里。这就导致了主从不一致,也就是主从延迟。
主从同步延迟的解决办法
1、 主服务器要负责更新操作,对安全性的要求比从服务器要高,所以有些设置参数可以修改,比如 sync_binlog=l, innodb_flush_log_at_trx_commit = 1 之类的设置等。
2、 选择更好的硬件设备作为slave。
3、 把一台从服务器当作为备份使用,而不提供查询,那边他的负载下来了,执行relay log里面的SQL效率自然就高了。
4、 增加从服务器喽,这个目的还是分散读的压力,从而降低服务器负载。
Was this helpful?
0 / 0