自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL數(shù)據(jù)庫(kù)主從同步延遲分析及解決方案

數(shù)據(jù)庫(kù) MySQL
從MySQL5.5開(kāi)始,MySQL已經(jīng)支持半同步復(fù)制了,半同步復(fù)制介于異步復(fù)制和同步復(fù)制之間,主庫(kù)在執(zhí)行完事務(wù)后不立刻返回結(jié)果給客戶端,需要等待至少一個(gè)從庫(kù)接收到并寫(xiě)到relay log中才返回結(jié)果給客戶端。相對(duì)于異步復(fù)制,半同步復(fù)制提高了數(shù)據(jù)的安全性,同時(shí)它也造成了一個(gè)TCP/IP往返耗時(shí)的延遲。

一、MySQL的數(shù)據(jù)庫(kù)主從復(fù)制原理

MySQL主從復(fù)制實(shí)際上基于二進(jìn)制日志,原理可以用一張圖來(lái)表示:

MySQL數(shù)據(jù)庫(kù)主從同步延遲分析及解決方案

MySQL數(shù)據(jù)庫(kù)主從同步延遲分析及解決方案

分為四步走:

1. 主庫(kù)對(duì)所有DDL和DML產(chǎn)生的日志寫(xiě)進(jìn)binlog;

2. 主庫(kù)生成一個(gè) log dump 線程,用來(lái)給從庫(kù)I/O線程讀取binlog;

3. 從庫(kù)的I/O Thread去請(qǐng)求主庫(kù)的binlog,并將得到的binlog日志寫(xiě)到relay log文件中;

4. 從庫(kù)的SQL Thread會(huì)讀取relay log文件中的日志解析成具體操作,將主庫(kù)的DDL和DML操作事件重放。

關(guān)于DDL和DML

SQL語(yǔ)言共分為四大類(lèi):查詢語(yǔ)言DQL,控制語(yǔ)言DCL,操縱語(yǔ)言DML,定義語(yǔ)言DDL。

DQL:可以簡(jiǎn)單理解為SELECT語(yǔ)句;

DCL:GRANT、ROLLBACK和COMMIT一類(lèi)語(yǔ)句;

DML:可以理解為CREATE一類(lèi)的語(yǔ)句;

DDL:INSERT、UPDATE和DELETE語(yǔ)句都是;

二、主從復(fù)制存在的問(wèn)題

1. 主庫(kù)宕機(jī)后,數(shù)據(jù)可能丟失;

2. 主從同步延遲。

三、MySQL數(shù)據(jù)庫(kù)主從同步延遲產(chǎn)生原因

原因分析:MySQL的主從復(fù)制都是單線程的操作,主庫(kù)對(duì)所有DDL和DML產(chǎn)生的日志寫(xiě)進(jìn)binlog,由于binlog是順序?qū)?,所以效率很高。Slave的SQL Thread線程將主庫(kù)的DDL和DML操作事件在slave中重放。DML和DDL的IO操作是隨即的,不是順序的,成本高很多。另一方面,由于SQL Thread也是單線程的,當(dāng)主庫(kù)的并發(fā)較高時(shí),產(chǎn)生的DML數(shù)量超過(guò)slave的SQL Thread所能處理的速度,或者當(dāng)slave中有大型query語(yǔ)句產(chǎn)生了鎖等待那么延時(shí)就產(chǎn)生了。

常見(jiàn)原因:Master負(fù)載過(guò)高、Slave負(fù)載過(guò)高、網(wǎng)絡(luò)延遲、機(jī)器性能太低、MySQL配置不合理。

四、主從延時(shí)排查方法

通過(guò)監(jiān)控 show slave status 命令輸出的Seconds_Behind_Master參數(shù)的值來(lái)判斷:

NULL,表示io_thread或是sql_thread有任何一個(gè)發(fā)生故障;

0,該值為零,表示主從復(fù)制良好;

正值,表示主從已經(jīng)出現(xiàn)延時(shí),數(shù)字越大表示從庫(kù)延遲越嚴(yán)重。

五、解決方案

解決數(shù)據(jù)丟失的問(wèn)題:

1. 半同步復(fù)制

從MySQL5.5開(kāi)始,MySQL已經(jīng)支持半同步復(fù)制了,半同步復(fù)制介于異步復(fù)制和同步復(fù)制之間,主庫(kù)在執(zhí)行完事務(wù)后不立刻返回結(jié)果給客戶端,需要等待至少一個(gè)從庫(kù)接收到并寫(xiě)到relay log中才返回結(jié)果給客戶端。相對(duì)于異步復(fù)制,半同步復(fù)制提高了數(shù)據(jù)的安全性,同時(shí)它也造成了一個(gè)TCP/IP往返耗時(shí)的延遲。

2. 主庫(kù)配置sync_binlog=1,innodb_flush_log_at_trx_commit=1

sync_binlog的默認(rèn)值是0,MySQL不會(huì)將binlog同步到磁盤(pán),其值表示每寫(xiě)多少binlog同步一次磁盤(pán)。

innodb_flush_log_at_trx_commit為1表示每一次事務(wù)提交或事務(wù)外的指令都需要把日志flush到磁盤(pán)。

注意:將以上兩個(gè)值同時(shí)設(shè)置為1時(shí),寫(xiě)入性能會(huì)受到一定限制,只有對(duì)數(shù)據(jù)安全性要求很高的場(chǎng)景才建議使用,比如涉及到錢(qián)的訂單支付業(yè)務(wù),而且系統(tǒng)I/O能力必須可以支撐!

解決從庫(kù)復(fù)制延遲的問(wèn)題:

1. 優(yōu)化網(wǎng)絡(luò)

2. 升級(jí)Slave硬件配置

3. Slave調(diào)整參數(shù),關(guān)閉binlog,修改innodb_flush_log_at_trx_commit參數(shù)值

 

4. 升級(jí)MySQL版本到5.7,使用并行復(fù)制 

責(zé)任編輯:龐桂玉 來(lái)源: 今日頭條
相關(guān)推薦

2019-07-16 06:30:19

MySQL同步延遲數(shù)據(jù)庫(kù)

2017-06-21 08:30:20

MySQL原因解決辦法

2024-11-28 09:37:28

2011-03-07 16:42:05

MySQL數(shù)據(jù)庫(kù)安全

2022-03-24 12:15:50

MySQL數(shù)據(jù)庫(kù)讀寫(xiě)分離

2011-07-12 16:42:41

2011-03-28 13:11:18

MySQL數(shù)據(jù)庫(kù)安全

2024-10-21 08:21:12

數(shù)據(jù)庫(kù)主從延遲

2010-05-27 18:24:09

MySQL數(shù)據(jù)庫(kù)密碼

2010-05-28 11:22:07

2009-11-18 16:10:00

2011-07-26 16:05:19

Oracle數(shù)據(jù)庫(kù)服務(wù)器

2011-08-22 15:31:51

SQL Servermssqlserver數(shù)據(jù)庫(kù)復(fù)制

2011-05-25 09:45:40

Oracle數(shù)據(jù)庫(kù)

2024-08-02 09:36:03

2011-01-21 09:43:10

安恒數(shù)據(jù)庫(kù)安全安全審計(jì)

2011-03-24 15:41:42

數(shù)據(jù)庫(kù)

2011-07-18 09:36:42

Mysql數(shù)據(jù)庫(kù)root@localh

2025-04-07 04:45:00

數(shù)據(jù)架構(gòu)訂單

2010-11-03 08:41:55

MySQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)