溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mysql主從同步原理、配置以及延遲的示例分析

發(fā)布時間:2021-01-22 11:12:05 來源:億速云 閱讀:184 作者:小新 欄目:MySQL數(shù)據(jù)庫

小編給大家分享一下mysql主從同步原理、配置以及延遲的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

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

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

主從同步的原理

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

    1.    異步復(fù)制

    2.    全同步復(fù)制

    3.    半同步復(fù)制

  • 主從同步原理圖
    mysql主從同步原理、配置以及延遲的示例分析

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

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

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

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

1.配置主數(shù)據(jù)庫打開binary-log
vim /etc/my.cnf

在[mysqld]下添加

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

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

2.配置從數(shù)據(jù)庫打開relay-log
vim /etc/my.cnf

在[mysqld]下添加

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

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

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

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

在主數(shù)據(jù)庫中:創(chuàng)建用戶repl ,每一個從服務(wù)器都需要用到主數(shù)據(jù)庫一個賬戶名和密碼來連接主服務(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ù)庫中:

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;

啟動同步:start slave;

4.驗證

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

主從同步的作用

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

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

主從同步的注意事項

  1. 主庫可以讀寫數(shù)據(jù),而從庫只能讀數(shù)據(jù),因為當(dāng)從庫寫了數(shù)據(jù)positon會變化,但是主庫的position是不會變的,當(dāng)主庫寫數(shù)據(jù)變化position的時候就可能會有沖突.

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

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

面試相關(guān)

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

  1. 主從的好處是?

  2. 主從的原理是?

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

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

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

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

主從同步延遲問題

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

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

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

實際上主從同步延遲根本沒有什么一招制敵的辦法, 因為所有的SQL必須都要在從服務(wù)器里面執(zhí)行一遍,但是主服務(wù)器如果不斷的有更新操作源源不斷的寫入, 那么一旦有延遲產(chǎn)生, 那么延遲加重的可能性就會原來越大。 當(dāng)然我們可以做一些緩解的措施。

a. 我們知道因為主服務(wù)器要負(fù)責(zé)更新操作, 他對安全性的要求比從服務(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í)行效率 這個能很大程度上提高效率。另外就是使用比主庫更好的硬件設(shè)備作為slave。

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

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

看完了這篇文章,相信你對“mysql主從同步原理、配置以及延遲的示例分析”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI