欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL?半同步復制的實現(xiàn)

 更新時間:2024年09月03日 11:26:25   作者:V1ncent?Chen  
半同步復制是MySQL復制的一種形式,它結合了異步復制和同步復制的特性,本文主要介紹了?MySQL?半同步復制的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下

一、半同步復制介紹

MySQL基礎復制有三種模式:異步復制/同步復制/半同步復制,3種模式各有利弊,下面對各種復制模式的優(yōu)缺點做個簡要的介紹:

異步復制(Asynchronous replicaton)

這是MySQL默認的復制模式,異步復制指主庫寫binlog、從庫I/O線程讀binlog并寫入relaylog、從庫SQL線程重放事務這三步之間是異步的。異步復制的優(yōu)點是主庫不需要關心備庫的狀態(tài),主庫不保證事務被傳輸?shù)綇膸?,如果主庫崩潰,某些事務可能還未發(fā)送到從庫,切換后可能導致事務的丟失。其優(yōu)點是可以有更高的吞吐量,缺點是不能保持數(shù)據(jù)實時一致,不適合要求主從數(shù)據(jù)一致性要求較高的應用場景。

同步復制(Synchronous replicaton)

同步復制的模式下,主庫在提交事務前,必須確認事務在所有的備庫上都已經(jīng)完成提交。即主庫是最后一個提交的,在提交前需要將事務傳遞給從庫并完成重放、提交等一系列動作。其優(yōu)點是任何時候主備庫都是一致的,主庫的崩潰不會丟失事務,缺點是由于主庫需要等待備庫先提交事務,吞吐量很低。

半同步復制(Semisynchronous replicaiton)

MySQL從5.5開始引入了半同步復制,半同步復制介于異步復制和同步復制之間。主庫在提交事務時先等待,必須確認至少一個從庫收到了事件(從庫將事件寫入relaylog,不需要重放和提交,并向主庫發(fā)送一個確認信息ACK),主庫收到確認信息后才會正式commit。

與同步復制相比,半同步復制速度快很多,因為他只需要至少1個從庫確認寫入relaylog,并不需要完成在從庫上的事務提交,同時又比異步復制更安全,因為主庫在提交時,事務至少已經(jīng)存在2個地方(主庫的binlog和從庫的relaylog)。由于半同步復制在提交事務前,需要從庫返還確認信息,所以這里涉及到網(wǎng)絡的往返通信開銷,因此半同步復制只適合在網(wǎng)絡條件較好的且地理上距離不遠的環(huán)境部署,否則可能會因為網(wǎng)絡延遲大幅降低主庫性能。

半同步復制的特點:

  • 從庫在連接主庫時需要表明它是否支持半同步復制。
  • 如果主庫啟用了半同步復制,且有一個支持半同步復制的從庫,則主庫上事務提交將等待至少一個從庫確認已收到事務,或者直到發(fā)生超時。
  • 默認只有在將事務寫入其中繼日志并刷新到磁盤后,主庫才會提交事務(也可以配置成提交后等待確認)。
  • 如果沒有任何從庫確認事務的情況下發(fā)生超時,則主庫將退化為異步復制。當至少有一個半同步從庫趕上時,主庫恢復半同步復制。退化與恢復過程都是自動的。
  • 必須在主庫和從庫上都啟用半同步復制,否則使用異步復制。

二、搭建半同步復制

半同步復制是以插件的形式實現(xiàn)的,要使用半同步復制,要在主從分別安裝相應的插件,并且通過參數(shù)來控制半同步復制。

在使用半同步復制前需要先滿足下列條件:

  • 服務器要支持動態(tài)加載,參數(shù)have_dynamic_loading要設置為True(MySQL8.0默認就是True)。
  • 已經(jīng)完成基礎異步復制的配置。
  • 不支持一從多主的復制(多通道)。

現(xiàn)以上一篇配置好的異步復制為基礎來配置半同步復制

異步復制(Asynchronous replication)

2臺數(shù)據(jù)庫環(huán)境如下:

  • 192.168.3.71(主庫 主機名master)
  • 192.168.3.72(從庫 主機名slave01)

2.1 安裝半同步插件

安裝半同步插件時,需要在主庫安裝semisync_master.so(8.0.26 以后版本為semisync_source.so),在從庫安裝semisync_slave.so(8.0.26以后版本為semisync_replica.so)。執(zhí)行安裝命令時,插件必須在插件目錄(參數(shù)plugin_dir)存在。

在主庫安裝插件:

install plugin rpl_semi_sync_master soname 'semisync_master.so';
或MySQL 8.0.26以上版本執(zhí)行下面命令:
install plugin rpl_semi_sync_source soname 'semisync_source.so';

在備庫安裝插件:

install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
或MySQL 8.0.26以上版本執(zhí)行下面命令:
install plugin rpl_semi_sync_replica soname 'semisync_replica.so';

安裝完成后可以用show plugins來查看是否安裝成功,安裝成功后插件列表中應該有下列類似信息:

show plugins;

2.2 啟用半同步復制

確認主備的插件都成功安裝后,使用下面命名調(diào)整參數(shù),啟用半同步復制。

主庫執(zhí)行:

set global rpl_semi_sync_master_enabled=1;
或MySQL 8.0.26以后版本執(zhí)行:
set global rpl_semi_sync_source_enabled = 1;

備庫執(zhí)行:

set global rpl_semi_sync_slave_enabled=1;
或MySQL 8.0.26以后版本執(zhí)行:
set global rpl_semi_sync_replica_enabled = 1;

為了防止配置不丟失,建議也將配置添加到my.cnf中:

主庫配置文件添加:

[mysqld]
rpl_semi_sync_master_enabled=1
# 或8.026版本添加:
# rpl_semi_sync_source_enabled=1

主庫配置文件添加:

[mysqld]
rpl_semi_sync_slave_enabled=1
# 或8.026版本添加:
# rpl_semi_sync_replica_enabled=1

如果在完成上面配置時異步復制正在運行,則需要重啟從庫的I/O線程來切換到半同步復制:

stop slave io_thread;
start slave io_thread;
show status like 'rpl_semi_sync_slave_status';    -- 查看備庫半同步復制狀態(tài)

查看主庫半同步復制狀態(tài):

show status like 'rpl_semi_sync_master_status';

通過狀態(tài)變量,我們看到主備的半同步都是處于工作狀態(tài),半同步復制的搭建完成。

三、配置半同步復制

當完成了半同步配置后,系統(tǒng)上和半同步相關的配置參數(shù)就可以使用了,這些參數(shù)可用來調(diào)整半同步復制的配置:

主庫查看半同步相關配置參數(shù):

show variables like 'rpl_semi_sync%';

如果使用的是8.0.26以上的版本,參數(shù)中的'master'會被替換為'source','slave'會被替換為'replica',下面依次解釋各參數(shù)設置含義:

rpl_semi_sync_master_enabled

用來控制是否開啟半同步復制,ON代表開啟,OFF代表關閉。

rpl_semi_sync_master_timeout

主庫等待從庫ACK超時的時長,單位是毫秒,默認是10000(10s)。

rpl_semi_sync_master_trace_level

半同步復制時主庫的調(diào)試級別

rpl_semi_sync_master_wait_for_slave_count

主庫需要收到多少個ACK才認為此次提交成功,否則就降級為異步復制,默認是1,即只要有1個從庫確認即可提交。

rpl_semi_sync_master_wait_no_slave

為ON時(默認值),當狀態(tài)變量Rpl_semi_sync_master_clients中的值小于rpl_semi_sync_master_wait_for_slave_count時(即從庫數(shù)小于需要的最小確認數(shù)),Rpl_semi_sync_master_status依舊為ON,只有當事務提交后等待rpl_semi_sync_master_timeout超時后,Rpl_semi_sync_master_status才會變?yōu)镺FF,即降級為異步復制;

為OFF時,當狀態(tài)變量Rpl_semi_sync_master_clients中的值小于rpl_semi_sync_master_wait_for_slave_count時,Rpl_semi_sync_master_status立即顯示為OFF,即立即降級為異步復制。

rpl_semi_sync_master_wait_point

控制主庫上commit、接收ACK、返回控制給客戶端的時間點。值為after_sync(默認)或after_commit。

  • after_sync:主庫會等待從庫的ACK后再提交事務,最后返還控制權給客戶端。主庫上所有會話同一時間看到提交的事務,如果發(fā)生failover,主從數(shù)據(jù)是一致的。
  • after_commit:主庫會先提交事務,再等待ACK,最后返還控制權給客戶端。主庫會先提交,此時主庫上其他會話可以看到已提交的事務,但執(zhí)行事務的會話還未返還,依然在等待從庫確認,如果從庫因為崩潰沒有處理這個事務,那么其他會話會在主從看到不一致的數(shù)據(jù)(主庫事務提交了,從庫的事務丟了)。

四、監(jiān)控半同步復制

完成了半同步配置后,和半同步相關的相關狀態(tài)變量可以幫助我們監(jiān)控半同步復制的狀態(tài):

show status like 'rpl_semi_sync%';

主庫有半同步復制相關的狀態(tài)變量解釋:

Rpl_semi_sync_master_clients:當前有多少個半同步從庫連接到主庫。

Rpl_semi_sync_master_net_avg_wait_time:主庫等待從庫回復的平均時間,以微秒為單位。此變量始終為0,不推薦使用,并且將在以后的版本中刪除。

Rpl_semi_sync_master_net_wait_time:主庫等待從庫回復的總時間,以微秒為單位。此變量始終為0,不推薦使用,并且將在以后的版本中刪除。

Rpl_semi_sync_master_net_waits:主庫等待從庫回復的總次數(shù)。

Rpl_semi_sync_master_no_times:主庫關閉半同步復制的次數(shù)。

Rpl_semi_sync_master_no_tx:從庫未成功確認的事務數(shù)。

Rpl_semi_sync_master_status:為ON時表示使用半同步復制,為OFF時表示異步復制。

Rpl_semi_sync_master_timefunc_failures:調(diào)用gettimeofday等時間函數(shù)時主庫失敗的次數(shù)。

Rpl_semi_sync_master_tx_avg_wait_time:主庫等待一個事務的平均時間,以微秒為單位。

Rpl_semi_sync_master_tx_wait_time:主庫等待事務的總時間,以微秒為單位。

Rpl_semi_sync_master_tx_waits:主庫等待事務的總次數(shù)。

Rpl_semi_sync_master_wait_pos_backtraverse:主庫等待事件的二進制日志次數(shù)低于之前等待事件的總次數(shù)。當事務等待回復的順序與其二進制日志事件的寫入順序不同時,就會發(fā)生這種情況。

Rpl_semi_sync_master_wait_sessions:當前正在等待從庫回復的會話數(shù)。

Rpl_semi_sync_master_yes_tx:從庫成功確認的事務數(shù)。

到此這篇關于 MySQL 半同步復制的實現(xiàn)的文章就介紹到這了,更多相關 MySQL 半同步復制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Mysql數(shù)據(jù)庫之索引優(yōu)化

    Mysql數(shù)據(jù)庫之索引優(yōu)化

    MySQL憑借著出色的性能、低廉的成本、豐富的資源,已經(jīng)成為絕大多數(shù)互聯(lián)網(wǎng)公司的首選關系型數(shù)據(jù)庫。本文給大家介紹mysql數(shù)據(jù)庫之索引優(yōu)化,感興趣的朋友一起學習吧
    2016-03-03
  • MYSQL大表加索引的實現(xiàn)

    MYSQL大表加索引的實現(xiàn)

    本文主要介紹了MYSQL大表加索引的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • mysql與mysqli的區(qū)別與用法說明

    mysql與mysqli的區(qū)別與用法說明

    mysql是非持繼連接函數(shù)而mysqli是永遠連接函數(shù)。
    2010-07-07
  • MySQL的事務特性概念梳理總結

    MySQL的事務特性概念梳理總結

    這篇文章主要介紹了MySQL的事務特性概念梳理總結,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • mysql過濾復制思路詳解

    mysql過濾復制思路詳解

    這篇文章主要介紹了mysql過濾復制的實現(xiàn)思路,主要講解了兩種思路,一種是在主庫的binlog上實現(xiàn)另一種是從庫的sql線程上實現(xiàn),具體實現(xiàn)過程跟隨小編一起看看吧
    2021-08-08
  • MySQL關系型數(shù)據(jù)庫事務的ACID特性與實現(xiàn)

    MySQL關系型數(shù)據(jù)庫事務的ACID特性與實現(xiàn)

    這篇文章主要介紹了MySQL關系型數(shù)據(jù)庫事務的ACID特性與實現(xiàn),ACID?是為保證事務transaction是正確可靠的,具備原子性、一致性、隔離性、持久性等特性
    2022-07-07
  • MySQL性能優(yōu)化技巧分享

    MySQL性能優(yōu)化技巧分享

    這篇文章主要介紹了MySQL性能優(yōu)化的相關技巧,幫助大家提高數(shù)據(jù)庫的性能,感興趣的朋友可以了解下
    2020-09-09
  • Mysql下載安裝、部署與圖形化詳細操作教程

    Mysql下載安裝、部署與圖形化詳細操作教程

    這篇文章主要為大家詳細介紹了Mysql下載安裝、部署與圖形化詳細操作教程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • MySQL安裝時initializing database失敗的問題解決

    MySQL安裝時initializing database失敗的問題解決

    本文主要介紹了MySQL安裝時initializing database失敗的問題解決,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-02-02
  • Mysql常用命令匯總

    Mysql常用命令匯總

    這篇文章主要介紹了Mysql常用命令,都是mysql數(shù)據(jù)庫日常最基本的操作命令,感興趣的小伙伴們可以參考一下
    2015-11-11

最新評論