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

MySQL主從復(fù)制之半同步semi-sync?replication

 更新時(shí)間:2022年02月21日 16:24:46   作者:GreatSQL社區(qū)  
這篇文章主要介紹了MySQL主從復(fù)制之半同步semi-sync?replication,半同步相對于異步復(fù)制而言,提高了數(shù)據(jù)的安全性,同時(shí)也造成了一定程度的延遲,這個(gè)延遲最少是一個(gè)TCP往返的時(shí)間。所以,半同步復(fù)制最好在低延時(shí)的網(wǎng)絡(luò)中使用,下文詳細(xì)內(nèi)容,需要的小伙伴可以參考一下

一、半同步簡介

  • MASTER節(jié)點(diǎn)在執(zhí)行完客戶端提交的事務(wù)后不是立刻返回結(jié)果給客戶端,而是等待至少一個(gè)SLAVE節(jié)點(diǎn)接收并寫到relay log中才返回給客戶端。
  • 半同步相對于異步復(fù)制而言,提高了數(shù)據(jù)的安全性,同時(shí)也造成了一定程度的延遲,這個(gè)延遲最少是一個(gè)TCP往返的時(shí)間。所以,半同步復(fù)制最好在低延時(shí)的網(wǎng)絡(luò)中使用。
  • MySQL從5.5開始就支持半同步復(fù)制,在5.7.2版本的時(shí)候?qū)Π胪綇?fù)制進(jìn)行了一次改進(jìn);原先的半同步策略為 AFTER_COMMIT 改進(jìn)后的策略為 AFTER_SYNC 兩者的差異在于SLAVE節(jié)點(diǎn)ACK應(yīng)答MASTER的時(shí)機(jī)不同。

二、兩種模式介紹

AFTER_COMMIT 模式介紹

MASTER將每個(gè)事務(wù)寫入到二進(jìn)制日志并刷盤保存,同時(shí)將事務(wù)發(fā)送給SLAVE,然后將事務(wù)提交給存儲引擎處理并進(jìn)行提交,然后等待SLAVE返回確認(rèn)信息,在收到確認(rèn)信息后,MASTER將結(jié)果返回給客戶端,然后當(dāng)前客戶端可以繼續(xù)工作。

AFTER_SYNC 模式介紹

MASTER將每個(gè)事務(wù)寫入到二進(jìn)制日志并刷盤保存,同時(shí)將事務(wù)發(fā)送給SLAVE,然后等待SLAVE返回確認(rèn)信息,收到確認(rèn)信息后,將事務(wù)提交給存儲引擎處理并進(jìn)行提交,并將結(jié)果返回給客戶端,然后當(dāng)前客戶端可以繼續(xù)工作。

三、兩種方式比較

對于第一種 AFTER_COMMIT 方式,當(dāng)前客戶端只有在服務(wù)器向存儲引擎提交數(shù)據(jù)并收到SLAVE返回的確認(rèn)后,才會收到事務(wù)的返回結(jié)果。在事務(wù)提交之后收到SLAVE返回確認(rèn)信息之前,此刻其他客戶端可以看到當(dāng)前客戶端提交的事務(wù)信息。
如果SLAVE節(jié)點(diǎn)由于網(wǎng)絡(luò)等原因并未收到MASTER節(jié)點(diǎn)傳遞過來的事務(wù),而MASTER節(jié)點(diǎn)此刻crash了。HA進(jìn)行故障轉(zhuǎn)移,客戶端都連到SLAVE節(jié)點(diǎn)上,這時(shí)先前在MASTER節(jié)點(diǎn)看到的事務(wù)在SLAVE節(jié)點(diǎn)并未看到,就會發(fā)生事務(wù)丟失的情況。

對于第二種 AFTER_SYNC 方式,當(dāng)事務(wù)被SLAVE確認(rèn)后MASTER在存儲引擎層面進(jìn)行提交事務(wù)后,所有客戶端才能看到事務(wù)造成的數(shù)據(jù)更改。因此,所有客戶端在MASTER上同一時(shí)刻看到是相同的數(shù)據(jù)。
當(dāng)MASTER節(jié)點(diǎn)crash的情況下,所有在MASTER上提交的事務(wù)都被復(fù)制到SLAVE(保存到中繼日志中)。 MASTER服務(wù)器意外crash。此刻HA進(jìn)行故障轉(zhuǎn)移到SALVE后,客戶端看到的數(shù)據(jù)是無損的,因?yàn)镾LAVE是最新的。
注意,然而,在這種情況下,MASTER不能直接恢復(fù)使用,因?yàn)樗亩M(jìn)制日志可能包含未提交的事務(wù),此刻當(dāng)二進(jìn)制日志恢復(fù)并用于業(yè)務(wù)需求時(shí),可能會導(dǎo)致與SLAVE的沖突。

四、如何開啟半同步

方式1:半同步以插件的形式存在,咱們可以直接在線開啟即可(本次采用這次方式)

主節(jié)點(diǎn)開啟:

[root@GreatSQL][(none)]>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.02 sec)

從節(jié)點(diǎn)開啟:

[root@GreatSQL][(none)]>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.02 sec)

 PS:一般情況下所有節(jié)點(diǎn)都同步部署master和slave插件,這樣故障切換的時(shí)候會比較方便處理

方式2:在my.cnf配置中進(jìn)行開啟

 主從節(jié)點(diǎn)都同步配置開啟:

plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_sync_slave=semisync_slave.so"
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1

五、查看插件開啟情況

方式1:查詢plugin

主節(jié)點(diǎn)查看:

[root@GreatSQL][test]>show plugins;
| rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.so | GPL |

從節(jié)點(diǎn)查看:

[root@GreatSQL][(none)]>show plugins;
| rpl_semi_sync_slave | ACTIVE | REPLICATION | semisync_slave.so | GPL |

方式二:查詢information_schema.plugins信息更全面

主節(jié)點(diǎn)信息:

(Thu Feb 17 03:03:12 2022)[root@GreatSQL][(none)]>select * from information_schema.plugins where plugin_name like "%semi%"\G;
*************************** 1. row ***************************
? ? ? ? ? ?PLUGIN_NAME: rpl_semi_sync_master
? ? ? ? PLUGIN_VERSION: 1.0
? ? ? ? ?PLUGIN_STATUS: ACTIVE
? ? ? ? ? ?PLUGIN_TYPE: REPLICATION
? ?PLUGIN_TYPE_VERSION: 4.0
? ? ? ? PLUGIN_LIBRARY: semisync_master.so
PLUGIN_LIBRARY_VERSION: 1.10
? ? ? ? ?PLUGIN_AUTHOR: Oracle Corporation
? ? PLUGIN_DESCRIPTION: Semi-synchronous replication master
? ? ? ? PLUGIN_LICENSE: GPL
? ? ? ? ? ?LOAD_OPTION: ON
1 row in set (0.00 sec)

ERROR:
No query specified

# 從節(jié)點(diǎn)信息
(Thu Feb 17 16:05:19 2022)[root@GreatSQL][(none)]>select * from information_schema.plugins where plugin_name like "%semi%"\G;
*************************** 1. row ***************************
? ? ? ? ? ?PLUGIN_NAME: rpl_semi_sync_slave
? ? ? ? PLUGIN_VERSION: 1.0
? ? ? ? ?PLUGIN_STATUS: ACTIVE
? ? ? ? ? ?PLUGIN_TYPE: REPLICATION
? ?PLUGIN_TYPE_VERSION: 4.0
? ? ? ? PLUGIN_LIBRARY: semisync_slave.so
PLUGIN_LIBRARY_VERSION: 1.10
? ? ? ? ?PLUGIN_AUTHOR: Oracle Corporation
? ? PLUGIN_DESCRIPTION: Semi-synchronous replication slave
? ? ? ? PLUGIN_LICENSE: GPL
? ? ? ? ? ?LOAD_OPTION: ON
1 row in set (0.00 sec

六、開啟半同步功能

因?yàn)樯厦媸窃诰€安裝插件的,所以插件安裝完成后,服務(wù)還要啟動(dòng)一下

主節(jié)點(diǎn)啟用半同步復(fù)制:

[root@GreatSQL][test]>SET GLOBAL rpl_semi_sync_master_enabled = on;
Query OK, 0 rows affected (0.00 sec)

 從節(jié)點(diǎn)啟用半同步復(fù)制:

t@GreatSQL][(none)]>SET GLOBAL rpl_semi_sync_slave_enabled = on;
Query OK, 0 rows affected (0.00 sec)

以上設(shè)置完成后,從節(jié)點(diǎn)重啟IO線程

(Mon Feb 14 15:19:58 2022)[root@GreatSQL][(none)]>
(Mon Feb 14 15:19:58 2022)[root@GreatSQL][(none)]>STOP SLAVE IO_THREAD;
Query OK, 0 rows affected, 1 warning (0.01 sec)

(Mon Feb 14 15:21:41 2022)[root@GreatSQL][(none)]>START SLAVE IO_THREAD;
Query OK, 0 rows affected, 1 warning (0.01 sec)

七、查看半同步是否運(yùn)行

 主節(jié)點(diǎn):

[root@GreatSQL][test]>show status like 'Rpl_semi_sync_master_status';
+-----------------------------+-------+
| Variable_name ? ? ? ? ? ? ? | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | ON ? ?|
+-----------------------------+-------+
1 row in set (0.00 sec)

 從節(jié)點(diǎn):

[root@GreatSQL][(none)]>show status like 'Rpl_semi_sync_slave_status';
+----------------------------+-------+
| Variable_name ? ? ? ? ? ? ?| Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON ? ?|
+----------------------------+-------+
1 row in set (0.01 sec)

查看主節(jié)點(diǎn)error.log,可以看出來從節(jié)點(diǎn)已經(jīng)啟用半同步復(fù)制了

# 關(guān)鍵信息 Start semi-sync binlog_dump to slave (server_id: 3306)
2022-02-14T02:16:35.411061-05:00 13 [Note] [MY-010014] [Repl] While initializing dump thread for slave with UUID <652ade08-8b1c-11ec-9f62-00155dcff90a>, found a zombie dump thread with the same UUID. Master is killing the zombie dump thread(12).
2022-02-14T02:16:35.411236-05:00 13 [Note] [MY-010462] [Repl] Start binlog_dump to master_thread_id(13) slave_server(3306), pos(, 4)
2022-02-14T02:16:35.411263-05:00 13 [Note] [MY-011170] [Repl] Start asynchronous binlog_dump to slave (server_id: 3306), pos(, 4).
2022-02-14T02:16:35.411419-05:00 12 [Note] [MY-011171] [Repl] Stop asynchronous binlog_dump to slave (server_id: 3306).
2022-02-14T02:19:33.913084-05:00 9 [Note] [MY-011130] [Repl] Semi-sync replication initialized for transactions.
2022-02-14T02:19:33.913133-05:00 9 [Note] [MY-011142] [Repl] Semi-sync replication enabled on the master.
2022-02-14T02:19:33.913638-05:00 0 [Note] [MY-011166] [Repl] Starting ack receiver thread.
2022-02-14T02:21:46.899725-05:00 14 [Note] [MY-010014] [Repl] While initializing dump thread for slave with UUID <652ade08-8b1c-11ec-9f62-00155dcff90a>, found a zombie dump thread with the same UUID. Master is killing the zombie dump thread(13).
2022-02-14T02:21:46.899894-05:00 14 [Note] [MY-010462] [Repl] Start binlog_dump to master_thread_id(14) slave_server(3306), pos(, 4)
2022-02-14T02:21:46.899953-05:00 14 [Note] [MY-011170] [Repl] Start semi-sync binlog_dump to slave (server_id: 3306), pos(, 4).

以上,MySQL半同步復(fù)制搭建完畢!

八、半同步參數(shù)信息

主節(jié)點(diǎn)參數(shù)信息:

[root@GreatSQL][test]>show variables like '%Rpl%';
+-------------------------------------------+------------+
| Variable_name ? ? ? ? ? ? ? ? ? ? ? ? ? ? | Value ? ? ?|
+-------------------------------------------+------------+
| rpl_read_size ? ? ? ? ? ? ? ? ? ? ? ? ? ? | 8192 ? ? ? |
| rpl_semi_sync_master_enabled ? ? ? ? ? ? ?| ON ? ? ? ? |
| rpl_semi_sync_master_timeout ? ? ? ? ? ? ?| 10000 ? ? ?|
| rpl_semi_sync_master_trace_level ? ? ? ? ?| 32 ? ? ? ? |
| rpl_semi_sync_master_wait_for_slave_count | 1 ? ? ? ? ?|
| rpl_semi_sync_master_wait_no_slave ? ? ? ?| ON ? ? ? ? |
| rpl_semi_sync_master_wait_point ? ? ? ? ? | AFTER_SYNC |
| rpl_stop_slave_timeout ? ? ? ? ? ? ? ? ? ?| 31536000 ? |
+-------------------------------------------+------------+
8 rows in set (0.00 sec)

部分參數(shù)簡單說明:

 從節(jié)點(diǎn)參數(shù)信息:

[root@GreatSQL][test]>show variables like '%Rpl%';
+---------------------------------+----------+
| Variable_name ? ? ? ? ? ? ? ? ? | Value ? ?|
+---------------------------------+----------+
| rpl_read_size ? ? ? ? ? ? ? ? ? | 8192 ? ? |
| rpl_semi_sync_slave_enabled ? ? | ON ? ? ? |
| rpl_semi_sync_slave_trace_level | 32 ? ? ? |
| rpl_stop_slave_timeout ? ? ? ? ?| 31536000 |
+---------------------------------+----------+
4 rows in set (0.00 sec)

部分參數(shù)簡單說明:

九、半同步狀態(tài)信息

主節(jié)點(diǎn)查看:

[root@GreatSQL][test]> show status like '%Rpl_semi%';
+--------------------------------------------+-------+
| Variable_name ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients ? ? ? ? ? ? ? | 1 ? ? |
| Rpl_semi_sync_master_net_avg_wait_time ? ? | 0 ? ? |
| Rpl_semi_sync_master_net_wait_time ? ? ? ? | 0 ? ? |
| Rpl_semi_sync_master_net_waits ? ? ? ? ? ? | 0 ? ? |
| Rpl_semi_sync_master_no_times ? ? ? ? ? ? ?| 0 ? ? |
| Rpl_semi_sync_master_no_tx ? ? ? ? ? ? ? ? | 0 ? ? |
| Rpl_semi_sync_master_status ? ? ? ? ? ? ? ?| ON ? ?|
| Rpl_semi_sync_master_timefunc_failures ? ? | 0 ? ? |
| Rpl_semi_sync_master_tx_avg_wait_time ? ? ?| 0 ? ? |
| Rpl_semi_sync_master_tx_wait_time ? ? ? ? ?| 0 ? ? |
| Rpl_semi_sync_master_tx_waits ? ? ? ? ? ? ?| 0 ? ? |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 ? ? |
| Rpl_semi_sync_master_wait_sessions ? ? ? ? | 0 ? ? |
| Rpl_semi_sync_master_yes_tx ? ? ? ? ? ? ? ?| 0 ? ? |
+--------------------------------------------+-------+
14 rows in set (0.00 sec)

部分參數(shù)用途簡要說明:

從節(jié)點(diǎn)轉(zhuǎn)態(tài)信息:

show global status like '%semi%';
+----------------------------+-------+
| Variable_name ? ? ? ? ? ? ?| Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON ? ?|
+----------------------------+-------+
1 row in set (0.00 sec)

參數(shù)簡單說明:

十、測試一下半同步的同步情況

  • 半同步是否會降級為異步復(fù)制?是會的。
  • 當(dāng)半同步復(fù)制發(fā)生超時(shí)時(shí)(由rpl_semi_sync_master_timeout參數(shù)控制,單位是毫秒,默認(rèn)為10000,即10s),會暫時(shí)關(guān)閉半同步復(fù)制,轉(zhuǎn)而使用異步復(fù)制。
  • 當(dāng)MASTER DUMP 線程發(fā)送完一個(gè)事務(wù)的所有事件之后,如果在rpl_semi_sync_master_timeout內(nèi),收到了從庫的響應(yīng),則主從又重新恢復(fù)為半同步復(fù)制。

1.從節(jié)點(diǎn)暫時(shí)先關(guān)掉IO線程

[root@GreatSQL][(none)]>STOP SLAVE IO_THREAD;
Query OK, 0 rows affected, 1 warning (0.02 sec)

2.主節(jié)點(diǎn)寫入幾條測試數(shù)據(jù)

[root@GreatSQL][test]>insert into ptype values(4,'4','4'),(5,'5','5'),(6,'6','6');
Query OK, 3 rows affected (0.02 sec)

3.等待10s后查看復(fù)制狀態(tài),半同步已經(jīng)關(guān)掉了

[root@GreatSQL][test]>show status like 'Rpl_semi_sync_slave_status';
+----------------------------+-------+
| Variable_name ? ? ? ? ? ? ?| Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | OFF ? |
+----------------------------+-------+
1 row in set (0.00 sec)

4.從節(jié)點(diǎn)開啟IO線程

[root@GreatSQL][(none)]>START SLAVE IO_THREAD;
Query OK, 0 rows affected, 1 warning (0.02 sec)

5.再次查看復(fù)制狀態(tài),半同步復(fù)制自動(dòng)開啟了

t@GreatSQL][test]>show status like 'Rpl_semi_sync_slave_status';
+----------------------------+-------+
| Variable_name ? ? ? ? ? ? ?| Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON ? ?|
+----------------------------+-------+
1 row in set (0.00 sec)

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

相關(guān)文章

  • MySQL索引失效場景及解決方案

    MySQL索引失效場景及解決方案

    這篇文章主要介紹了MySQL索引失效場景及解決方案,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • 解決mysql ERROR 1045 (28000)-- Access denied for user問題

    解決mysql ERROR 1045 (28000)-- Access denied for user問題

    這篇文章主要介紹了mysql ERROR 1045 (28000)-- Access denied for user解決方法,需要的朋友可以參考下
    2018-03-03
  • 詳解MySQL中concat函數(shù)的用法(連接字符串)

    詳解MySQL中concat函數(shù)的用法(連接字符串)

    本篇文章主要介紹了MySQL中concat函數(shù)的用法(連接字符串),在命令行模式下進(jìn)行測試。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2016-12-12
  • SQL 優(yōu)化

    SQL 優(yōu)化

    SQL 優(yōu)化...
    2006-12-12
  • 一文解答什么是MySQL的回表

    一文解答什么是MySQL的回表

    這篇文章主要介紹了一文解答什么是MySQL的回表,回表就是?MySQL要先查詢到主鍵索引,然后再用主鍵索引定位到數(shù)據(jù),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,需要的朋友可以參考一下
    2022-08-08
  • MySQL?Innodb索引機(jī)制詳細(xì)介紹

    MySQL?Innodb索引機(jī)制詳細(xì)介紹

    這篇文章介紹了MySQL?Innodb索引數(shù)據(jù)結(jié)構(gòu)工作原理。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • 在Windows環(huán)境下安裝MySQL 的教程圖解

    在Windows環(huán)境下安裝MySQL 的教程圖解

    這篇文章主要介紹了在Windows環(huán)境下安裝MySQL 的教程圖解,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • MySQL中幾種數(shù)據(jù)統(tǒng)計(jì)查詢的基本使用教程

    MySQL中幾種數(shù)據(jù)統(tǒng)計(jì)查詢的基本使用教程

    這篇文章主要介紹了幾種MySQL中數(shù)據(jù)統(tǒng)計(jì)查詢的基本使用教程,包括平均數(shù)和最大最小值等的統(tǒng)計(jì)結(jié)果查詢方法,是需要的朋友可以參考下
    2015-12-12
  • 一文搞懂MySQL預(yù)編譯

    一文搞懂MySQL預(yù)編譯

    這篇文章主要介紹了MySQL預(yù)編譯的相關(guān)資料,文中講解非常詳細(xì),示例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • MySQL筆記之?dāng)?shù)據(jù)類型詳解

    MySQL筆記之?dāng)?shù)據(jù)類型詳解

    本篇文章對mysql數(shù)據(jù)類型進(jìn)行了詳細(xì)的介紹,需要的朋友參考下
    2013-05-05

最新評論