mysql relaylog 慢_MySQL 主从同步延迟的原因及解决办法
mysql 用主從同步的方法進(jìn)行讀寫分離,減輕主服務(wù)器的壓力的做法現(xiàn)在在業(yè)內(nèi)做的非常普遍。 主從同步基本上能做到實(shí)時(shí)同步。我從別的網(wǎng)站借用了主從同步的原理圖。
在配置好了, 主從同步以后, 主服務(wù)器會(huì)把更新語句寫入binlog, 從服務(wù)器的IO 線程(這里要注意, 5.6.3 之前的IO線程僅有一個(gè),5.6.3之后的有多線程去讀了,速度自然也就加快了)回去讀取主服務(wù)器的binlog 并且寫到從服務(wù)器的Relay log 里面,然后從服務(wù)器的 的SQL thread 會(huì)一個(gè)一個(gè)執(zhí)行 relay log 里面的sql , 進(jìn)行數(shù)據(jù)恢復(fù)。
relay 就是 傳遞, relay race 就是接力賽的意思
1. 主從同步的延遲的原因
我們知道, 一個(gè)服務(wù)器開放N個(gè)鏈接給客戶端來連接的, 這樣有會(huì)有大并發(fā)的更新操作, 但是從服務(wù)器的里面讀取binlog 的線程僅有一個(gè), 當(dāng)某個(gè)SQL在從服務(wù)器上執(zhí)行的時(shí)間稍長 或者由于某個(gè)SQL要進(jìn)行鎖表就會(huì)導(dǎo)致,主服務(wù)器的SQL大量積壓,未被同步到從服務(wù)器里。這就導(dǎo)致了主從不一致, 也就是主從延遲。
2. 主從同步延遲的解決辦法
實(shí)際上主從同步延遲根本沒有什么一招制敵的辦法, 因?yàn)樗械腟QL必須都要在從服務(wù)器里面執(zhí)行一遍,但是主服務(wù)器如果不斷的有更新操作源源不斷的寫入, 那么一旦有延遲產(chǎn)生, 那么延遲加重的可能性就會(huì)原來越大。 當(dāng)然我們可以做一些緩解的措施。
a. 我們知道因?yàn)橹鞣?wù)器要負(fù)責(zé)更新操作, 他對(duì)安全性的要求比從服務(wù)器高, 所有有些設(shè)置可以修改,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之類的設(shè)置,而slave則不需要這么高的數(shù)據(jù)安全,完全可以講sync_binlog設(shè)置為0或者關(guān)閉binlog,innodb_flushlog,innodb_flush_log_at_trx_commit?也 可以設(shè)置為0來提高sql的執(zhí)行效率 這個(gè)能很大程度上提高效率。另外就是使用比主庫更好的硬件設(shè)備作為slave。
b. 就是把,一臺(tái)從服務(wù)器當(dāng)度作為備份使用, 而不提供查詢, 那邊他的負(fù)載下來了, 執(zhí)行relay log 里面的SQL效率自然就高了。
c. 增加從服務(wù)器嘍,這個(gè)目的還是分散讀的壓力, 從而降低服務(wù)器負(fù)載。
3. 判斷主從延遲的方法
MySQL提供了從服務(wù)器狀態(tài)命令,可以通過 show slave status 進(jìn)行查看, 比如可以看看Seconds_Behind_Master參數(shù)的值來判斷,是否有發(fā)生主從延時(shí)。
其值有這么幾種:
NULL - 表示io_thread或是sql_thread有任何一個(gè)發(fā)生故障,也就是該線程的Running狀態(tài)是No,而非Yes.
0 - 該值為零,是我們極為渴望看到的情況,表示主從復(fù)制狀態(tài)正常
總結(jié)
以上是生活随笔為你收集整理的mysql relaylog 慢_MySQL 主从同步延迟的原因及解决办法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql中text格式化_mysql中
- 下一篇: dedecms mysql 支持_安装d