明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

詳細(xì)講解mysql主從同步原理、設(shè)置以及延遲

[摘要]本文介紹了mysql的主從同步原理、主從同步配置、主從同步延遲,首先我們先來(lái)了解什么是主從同步,主從同步,顧名思義也稱為主從復(fù)制,用來(lái)建立一個(gè)和主數(shù)據(jù)庫(kù)完全一樣的數(shù)據(jù)庫(kù)環(huán)境。主從同步使得數(shù)據(jù)可以從一...
本文介紹了mysql的主從同步原理、主從同步配置、主從同步延遲,首先我們先來(lái)了解什么是主從同步,主從同步,顧名思義也稱為主從復(fù)制,用來(lái)建立一個(gè)和主數(shù)據(jù)庫(kù)完全一樣的數(shù)據(jù)庫(kù)環(huán)境。主從同步使得數(shù)據(jù)可以從一個(gè)數(shù)據(jù)庫(kù)服務(wù)器復(fù)制到其他服務(wù)器上,實(shí)現(xiàn)主數(shù)據(jù)庫(kù)的數(shù)據(jù)和從數(shù)據(jù)庫(kù)的數(shù)據(jù)保持一致。

  • 集群是共享存儲(chǔ)的,是data-sharing . 主從復(fù)制中沒(méi)有任何共享 . 每臺(tái)機(jī)器都是獨(dú)立且完整的系統(tǒng),是nothing-sharing.

主從同步的原理

  • 從mysql5.6之后主從復(fù)制的實(shí)現(xiàn)方式主要有3種:

    1. 異步復(fù)制

    2. 全同步復(fù)制

    3. 半同步復(fù)制

  • 主從同步原理圖
    詳細(xì)講解mysql主從同步原理、配置以及延遲

1.當(dāng)主數(shù)據(jù)庫(kù)的更新事件(update、insert、delete)被寫(xiě)到binary-log .

2.從庫(kù)創(chuàng)建一個(gè)I/O線程,該線程連接到主庫(kù)并請(qǐng)求主庫(kù)發(fā)送binlog里面的更新記錄到從庫(kù)上 .主庫(kù)創(chuàng)建一個(gè)binlog dump thread線程,把binlog的內(nèi)容發(fā)送到從庫(kù) ,從庫(kù)的I/O線程讀取主庫(kù)的輸出線程發(fā)送的更新并拷貝這些更新到本地relay log文件中 .

3.從庫(kù)創(chuàng)建一個(gè)SQL線程,這個(gè)線程讀取從庫(kù)I/O線程寫(xiě)到relay log的更新事件并執(zhí)行 .

主從同步的實(shí)現(xiàn)(異步復(fù)制,數(shù)據(jù)庫(kù)在不同服務(wù)器)

1.配置主數(shù)據(jù)庫(kù)打開(kāi)binary-log

vim /etc/my.cnf

在[mysqld]下添加

server-id=1(用來(lái)標(biāo)識(shí)不同的數(shù)據(jù)庫(kù))log-bin=master-bin(打開(kāi)bin-log并配置文件名為master-bin)log-bin-index=master-bin.index(區(qū)分不同的log-bin文件)

重啟數(shù)據(jù)庫(kù):systemctl restart mariadb.service

2.配置從數(shù)據(jù)庫(kù)打開(kāi)relay-log

vim /etc/my.cnf

在[mysqld]下添加

server-id=2relay-log=slave-relay-bin(打開(kāi)relay-log并配置文件名為slave-relay-bin)

relay-log-index=slave-relay-bin.index

重啟數(shù)據(jù)庫(kù):systemctl restart mariadb.service

3.連接兩個(gè)數(shù)據(jù)庫(kù)

在主數(shù)據(jù)庫(kù)中:創(chuàng)建用戶repl ,每一個(gè)從服務(wù)器都需要用到主數(shù)據(jù)庫(kù)一個(gè)賬戶名和密碼來(lái)連接主服務(wù)器 .

CREATE USER 'repl'@'114.116.77.213' IDENTIFIED BY '12312';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'114.116.77.213' IDENTIFIED BY '12312';

在從數(shù)據(jù)庫(kù)中:

change master to master_host='47.106.78.106',master_user='repl',master_password='12312',master_log_file='master-bin.000001',master_log_pos=0;

啟動(dòng)同步:start slave;

4.驗(yàn)證

在主數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),然后在從數(shù)據(jù)庫(kù)查看

主從同步的作用

1. 做數(shù)據(jù)的熱備,作為后備數(shù)據(jù)庫(kù),主數(shù)據(jù)庫(kù)服務(wù)器故障后,可切換到從數(shù)據(jù)庫(kù)繼續(xù)工作,避免數(shù)據(jù)丟失 .

2. 讀寫(xiě)分離,使數(shù)據(jù)庫(kù)能支撐更大的并發(fā) .

主從同步的注意事項(xiàng)

  1. 主庫(kù)可以讀寫(xiě)數(shù)據(jù),而從庫(kù)只能讀數(shù)據(jù),因?yàn)楫?dāng)從庫(kù)寫(xiě)了數(shù)據(jù)positon會(huì)變化,但是主庫(kù)的position是不會(huì)變的,當(dāng)主庫(kù)寫(xiě)數(shù)據(jù)變化position的時(shí)候就可能會(huì)有沖突.

  2. 當(dāng)主庫(kù)的binatylog文件存儲(chǔ)的數(shù)據(jù)很多,也就是position很大的時(shí)候,會(huì)再分裂一個(gè)新的binarylog文件,position置為0;

  3. 主從庫(kù)的mysql版本可以不一樣,但是從庫(kù)的mysql版本要比主庫(kù)的版本要高,如果不是的話,那么主庫(kù)的語(yǔ)句到了從庫(kù)可能就不能執(zhí)行.
    因?yàn)閙ysql是向后兼容的,也就是說(shuō)低版本的語(yǔ)句在高版本里面是支持的,但是高版本的有些語(yǔ)句在低版本是不支持的.

面試相關(guān)

(如果問(wèn)到數(shù)據(jù)庫(kù)主從問(wèn)題,必問(wèn)以下問(wèn)題):

  1. 主從的好處是?

  2. 主從的原理是?

  3. 從數(shù)據(jù)庫(kù)的讀的延遲問(wèn)題了解嗎?如何解決?

  4. 做主從后主服務(wù)器掛了怎么辦?

  5. 主從同步的延遲的原因

  6. 主從同步的延遲的原因

主從同步延遲問(wèn)題

1. 主從同步的延遲的原因

我們知道, 一個(gè)服務(wù)器開(kāi)放N個(gè)鏈接給客戶端來(lái)連接的, 這樣有會(huì)有大并發(fā)的更新操作, 但是從服務(wù)器的里面讀取binlog 的線程僅有一個(gè), 當(dāng)某個(gè)SQL在從服務(wù)器上執(zhí)行的時(shí)間稍長(zhǎng) 或者由于某個(gè)SQL要進(jìn)行鎖表就會(huì)導(dǎo)致,主服務(wù)器的SQL大量積壓,未被同步到從服務(wù)器里。這就導(dǎo)致了主從不一致, 也就是主從延遲。

2. 主從同步延遲的解決辦法

實(shí)際上主從同步延遲根本沒(méi)有什么一招制敵的辦法, 因?yàn)樗械腟QL必須都要在從服務(wù)器里面執(zhí)行一遍,但是主服務(wù)器如果不斷的有更新操作源源不斷的寫(xiě)入, 那么一旦有延遲產(chǎn)生, 那么延遲加重的可能性就會(huì)原來(lái)越大。 當(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來(lái)提高sql的執(zhí)行效率 這個(gè)能很大程度上提高效率。另外就是使用比主庫(kù)更好的硬件設(shè)備作為slave。

b. 就是把,一臺(tái)從服務(wù)器當(dāng)度作為備份使用, 而不提供查詢, 那邊他的負(fù)載下來(lái)了, 執(zhí)行relay log 里面的SQL效率自然就高了。

c. 增加從服務(wù)器嘍,這個(gè)目的還是分散讀的壓力, 從而降低服務(wù)器負(fù)載。

相關(guān)推薦:

MYSQL主從不同步延遲原理分析及解決方案

MYSQL主從不同步延遲原理

以上就是詳細(xì)講解mysql主從同步原理、配置以及延遲的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門(mén)到精通的SQL知識(shí)。