MySQL主从同步延迟问题简单分析

mysql 用主从同步的方法进行读写分离,减轻主服务器的压力的做法现在在业内做的非常普遍。 主从同步基本上能做到实时同步。我从别的网站借用了主从同步的原理图。

在配置好主从同步以后, 主服务器会把更新语句写入binlog, 从服务器的 IO 线程(这里要注意, 5.6.3 之前的IO线程仅有一个,5.6.3之后的有多线程去读了,速度自然也就加快了)会去主服务器读取 binlog 并写到从服务器的 Relay log(中继日志) 里面,然后从服务器的 的SQL thread 会一个一个执行 relay log 里面的sql,进行数据恢复。

1.主从同步的延迟的原因

我们知道,一个服务器可以开放N个链接给客户端来连接,这样就会有大并发的更新操作, 但是从服务器里面读取binlog 的线程仅有一个, 当某个SQL在从服务器上执行的时间稍长 或者由于某个SQL要进行锁表,就会导致主服务器的SQL大量积压,而不能被同步到从服务器里。这就导致了主从不一致,也就是主从延迟。

2.主从同步延迟的解决办法

实际上主从同步延迟根本没有什么一招制敌的办法,因为所有的SQL必须都要在从服务器里面执行一遍,但是主服务器如果不断的有更新操作源源不断的写入,那么一旦有延迟产生,那么延迟加重的可能性就会原来越大。当然我们可以做一些缓解的措施。

a. 我们知道因为主服务器要负责更新操作,他对安全性的要求比从服务器高,所以有些设置可以修改,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以将sync_binlog设置为0或者关闭binlog,innodb_flushlog,innodb_flush_log_at_trx_commit 也可以设置为0来提高sql的执行效率 这个能很大程度上提高效率。另外就是使用比主库更好的硬件设备作为slave。

b. 就是把一台从服务器当度作为备份使用,而不提供查询,这样它的负载就下来了,执行relay log 里面的SQL效率自然就高了。

c. 增加从服务器,这个目的还是分散读的压力,从而降低服务器负载。

3. 判断主从延迟的方法

MySQL提供了从服务器状态命令,可以通过 show slave status 进行查看,比如可以看看Seconds_Behind_Master参数的值来判断,是否有发生主从延时。

其值有这么几种:

NULL - 表示io_thread或是sql_thread有任何一个发生故障,也就是该线程的Running状态是No,而非Yes。

0  -   该值为零,是我们极为渴望看到的情况,表示主从复制状态正常。

==========================================================

声明:本文转自“Linux就该这么学”

原文链接:https://www.linuxprobe.com/mysql-master-salve.html

==========================================================

猜你喜欢

转载自blog.csdn.net/Mr_Yang__/article/details/84964944
今日推荐