国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

無損復(fù)制 mysql5.7

2024-07-24 12:31:50
字體:
供稿:網(wǎng)友
       介紹無損復(fù)制之前,首先介紹一下半同步復(fù)制
       半同步復(fù)制:
       無損復(fù)制屬于半同步復(fù)制的一種。
一、半同步復(fù)制介紹
      1,兩個插件實現(xiàn)半同步復(fù)制功能。主庫有一個插件,從庫有一個插件。
      2,系統(tǒng)變量控制插件特性。幾個列子
參數(shù):
1)rpl_semi_sync_master_enabled
      控制是否在主庫上啟用半同步復(fù)制。要啟用或禁用插件,請分別將此變量設(shè)置為1或0。默認(rèn)值是0(關(guān)閉)。
2)rpl_semi_sync_master_timeout
      一個以毫秒為單位的值,用于控制主服務(wù)器等待來自從服務(wù)器的確認(rèn)提交并恢復(fù)到異步復(fù)制的時間,超過這個值就是超時。 默認(rèn)值是10000(10秒)。超時之后,就從半同步復(fù)制,返回到異步復(fù)制。
3)rpl_semi_sync_slave_enabled
     作用和參數(shù) rpl_semi_sync_master_enabled相似,但是控制的是從庫的插件。
3,啟用半同步復(fù)制監(jiān)視的狀態(tài)變量。一些例子:
參數(shù):
1)Rpl_semi_sync_master_clients
半同步從庫的數(shù)量。
2)Rpl_semi_sync_master_status
當(dāng)前是否在主服務(wù)器上運行半同步復(fù)制。如果插件已啟用并且未提交確認(rèn),則值為1。如果插件未啟用,或者由于提交確認(rèn)超時,主服務(wù)器已回退到異步復(fù)制,則為0。
3)Rpl_semi_sync_master_yes_tx
從庫成功確認(rèn)的提交數(shù)量。
4)Rpl_semi_sync_master_no_tx
從庫未成功確認(rèn)的提交數(shù)量。
5)Rpl_semi_sync_slave_status
當(dāng)前是否在從站上運行半同步復(fù)制。如果插件已啟用且從屬I/O線程正在運行,則為1,否則為0。
二、半同步復(fù)制安裝和配置
半同步復(fù)制是使用插件實現(xiàn)的,因此必須將插件安裝到數(shù)據(jù)庫中以使其可用。插件安裝完成后,通過與其關(guān)聯(lián)的系統(tǒng)變量來控制插件。直有關(guān)聯(lián)的插件安裝完成后,這些系統(tǒng)變量才可用。
要使用半同步復(fù)制,必須滿足以下要求:
1)必須安裝MySQL 5.5或更高版本。
2)安裝插件的功能需要一個支持動態(tài)加載的MySQL服務(wù)器。要驗證這一點,請檢查have_dynamic_loading系統(tǒng)變量的值是否為YES。
3)復(fù)制必須已經(jīng)在工作。
4)不能有多個復(fù)制通道配置。半同步復(fù)制僅與默認(rèn)復(fù)制通道兼容。
要設(shè)置半同步復(fù)制,請使用以下說明。
這里提到的INSTALL PLUGIN,SET GLOBAL,STOP SLAVE和START SLAVE語句需要SUPER權(quán)限。
MySQL發(fā)布包括主端和從端的半同步復(fù)制插件文件。
要被主庫或從庫使用,相應(yīng)的插件庫文件必須位于MySQL插件目錄(由plugin_dir系統(tǒng)變量命名的目錄)中。如有必要,請在服務(wù)器啟動時設(shè)置plugin_dir的值,以告知服務(wù)器插件目錄位置。
插件庫文件基名是semisync_master和semisync_slave。 每個平臺的文件名后綴都不相同(例如,用于Unix和類Unix系統(tǒng)的.so,用于Windows的.dll)
主插件庫文件必須存在于主服務(wù)器的插件目錄中。從插件庫文件必須存在于每個從服務(wù)器的插件目錄中
要加載插件,請在主站和每個要半同步的從站上使用INSTALL PLUGIN語句(根據(jù)需要為您的平臺調(diào)整.so后綴)。
MySQL發(fā)布包括主端和從端的半同步復(fù)制插件文件。
要被主庫或從庫使用,相應(yīng)的插件庫文件必須位于MySQL插件目錄(由plugin_dir系統(tǒng)變量命名的目錄)中。如有必要,請在服務(wù)器啟動時設(shè)置plugin_dir的值,以告知服務(wù)器插件目錄位置。
插件庫文件基名是semisync_master和semisync_slave。 每個平臺的文件名后綴都不相同(例如,用于Unix和類Unix系統(tǒng)的.so,用于Windows的.dll)
主插件庫文件必須存在于主服務(wù)器的插件目錄中。從插件庫文件必須存在于每個從服務(wù)器的插件目錄中
要加載插件,請在主站和每個要半同步的從站上使用INSTALL PLUGIN語句(根據(jù)需要為您的平臺調(diào)整.so后綴)。
1,安裝插件
On the master:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
On each slave:
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
如果嘗試安裝插件會導(dǎo)致類似于此處顯示的錯誤,則必須安裝libimf:
2,查看安裝了哪些插件
要查看哪些插件已安裝,請使用SHOW PLUGINS語句,或者查詢INFORMATION_SCHEMA.PLUGINS表。
例如:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME LIKE '%semi%';
在安裝半同步復(fù)制插件之后,默認(rèn)情況下它是禁用的。主庫和從庫都必須啟用插件才能啟用半同步復(fù)制。 如果只啟用了一方,復(fù)制將是異步的。
要控制是否啟用已安裝的插件,請設(shè)置適當(dāng)?shù)南到y(tǒng)變量??梢栽谶\行時使用SET GLOBAL或在服務(wù)器啟動時在命令行或選項文件中設(shè)置這些變量。
在運行時,這些主庫端系統(tǒng)變量是可用的:
         SET GLOBAL rpl_semi_sync_master_enabled = {0|1};
         SET GLOBAL rpl_semi_sync_master_timeout = N;
在從庫方面,這個系統(tǒng)變量是可用的:
         SET GLOBAL rpl_semi_sync_slave_enabled = {0|1};
對于rpl_semi_sync_master_enabled或rpl_semi_sync_slave_enabled,值應(yīng)該為1以啟用半同步復(fù)制,或者使用0來禁用它。 默認(rèn)情況下,這些變量設(shè)置為0。
對于rpl_semi_sync_master_timeout,值N以毫秒為單位給出。 默認(rèn)值是10000(10秒)。
3,如果在運行時在從庫上啟用半同步復(fù)制,則還必須啟動從庫I/O線程(如果它已在運行,則首先停止),以使從庫連接到主庫并注冊為半同步從庫:
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
如果I/O線程已經(jīng)在運行,并且不重新啟動,則從庫設(shè)備將繼續(xù)使用異步復(fù)制
在服務(wù)器啟動時,可以將控制半同步復(fù)制的變量設(shè)置為命令行選項或選項文件。每次服務(wù)器啟動時,選項文件中列出的設(shè)置都會生效。例如,您可以按如下方式設(shè)置主站和從站的my.cnf文件中的變量。
On the master:
         [mysqld]
         rpl_semi_sync_master_enabled=1
         rpl_semi_sync_master_timeout=1000 # 1 second
On each slave:
         [mysqld]
         rpl_semi_sync_slave_enabled=1
三,半同步復(fù)制監(jiān)控
半同步復(fù)制功能的插件公開了可以檢查的幾個系統(tǒng)和狀態(tài)變量,以確定其配置和操作狀態(tài)。
系統(tǒng)變量反映了如何配置半同步復(fù)制。要檢查它們的值,使用SHOW VARIABLES:
mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';
狀態(tài)變量使您能夠監(jiān)視半同步復(fù)制的操作。要檢查它們的值,使用SHOW STATUS:
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';
當(dāng)由于提交阻塞超時或從站追趕而導(dǎo)致主站在異步或半同步復(fù)制之間切換時,它會適當(dāng)?shù)卦O(shè)置Rpl_semi_sync_master_status狀態(tài)變量的值。
從主機上的半同步復(fù)制到異步復(fù)制的自動回退意味著,即使在此時半同步復(fù)制實際上不可操作的情況下,rpl_semi_sync_master_enabled系統(tǒng)變量也可能在主端具有值1。 可以監(jiān)視Rpl_semi_sync_master_status狀態(tài)變量,以確定當(dāng)前主服務(wù)器是使用異步還是半同步復(fù)制。
要查看連接了多少個半同步從站,請檢查狀態(tài)參數(shù)Rpl_semi_sync_master_clients。
show status like '%rpl_semi_sync_master_clients%';
Rpl_semi_sync_master_yes_tx和Rpl_semi_sync_master_no_tx變量指示已成功確認(rèn)或從屬失敗的提交數(shù)。
show status like '%Rpl_semi_sync_master_yes_tx%';
show status like '%Rpl_semi_sync_master_no_tx%';
在從屬方面,Rpl_semi_sync_slave_status指示當(dāng)前是否正在運行半同步復(fù)制。
mysql> SHOW STATUS LIKE 'Rpl_semi_sync_slave_status%';
四:具體實驗步驟
1)查看是否支持動態(tài)加載的MySQL服務(wù)器
mysql> show variables like '%dynamic%';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| have_dynamic_loading | YES   |
+----------------------+-------+
2)主庫安裝semisync_master插件
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.05 sec)
3)備庫安裝semisync_slave插件
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.07 sec)
4)主庫查看關(guān)于半同步復(fù)制的一些參數(shù)值
mysql> show variables like '%semi%';
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | OFF        |
| 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 |
+-------------------------------------------+------------+
6 rows in set (0.00 sec)
5)主庫重新設(shè)置
mysql> SET GLOBAL rpl_semi_sync_master_enabled =1;
Query OK, 0 rows affected (0.00 sec)
6)備庫查看本同步復(fù)制的參數(shù)值
mysql> show variables like '%rpl_semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | OFF   |
| rpl_semi_sync_slave_trace_level | 32    |
7)備庫重新設(shè)置參數(shù)
mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;
Query OK, 0 rows affected (0.00 sec)
8)從庫重新關(guān)閉,再開啟IO_THREAD線程
mysql> STOP SLAVE IO_THREAD;
Query OK, 0 rows affected (0.00 sec)
mysql> START SLAVE IO_THREAD;
Query OK, 0 rows affected (0.00 sec)
9)備庫查看半同步復(fù)制狀態(tài),
mysql> SHOW STATUS LIKE 'Rpl_semi_sync_slave_status%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON    |
+----------------------------+-------+
 
無損復(fù)制
 
普通的半同步復(fù)制
 
測試1,半同步復(fù)制
1,主庫設(shè)置超時時間為10000秒,備庫停掉復(fù)制,模擬timeout
mysql> set global rpl_semi_sync_master_timeout=100000000;
Query OK, 0 rows affected (0.00 sec)
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
2,主庫修改參數(shù)pl_semi_sync_master_wait_point,修改成普通的半同步復(fù)制
mysql> set global rpl_semi_sync_master_wait_point=AFTER_COMMIT;
Query OK, 0 rows affected (0.00 sec)
3,主庫開窗口1,向表中插入一條數(shù)據(jù)
發(fā)現(xiàn)窗口1,卡住
主庫開窗口2 ,查詢這張表
發(fā)現(xiàn)數(shù)據(jù)已經(jīng)有了。
 
故得出結(jié)論,普通的半同步復(fù)制是在commit binlog之后。再需要得到備庫的確認(rèn)。所以這時候主庫宕機,最后的一個事物的數(shù)據(jù),備庫是沒有的,會發(fā)生丟數(shù)據(jù)。
測試2,無損的半同步復(fù)制
1,主庫修改參數(shù)rpl_semi_sync_master_wait_point,為無損復(fù)制
mysql> set global rpl_semi_sync_master_wait_point=AFTER_SYNC;
Query OK, 0 rows affected (0.00 sec)
2,主庫開窗口1,向表中插入一條數(shù)據(jù)
發(fā)現(xiàn)窗口1,卡住
 
主庫開窗口2 ,查詢這張表
發(fā)現(xiàn)數(shù)據(jù)還沒有。
 
故得出結(jié)論,無損的半同步復(fù)制是再write binlog之后。在需要得到備庫的確認(rèn)。所以這時候主庫宕機,不會發(fā)生丟數(shù)據(jù)。
 

(編輯:武林網(wǎng))

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 丘北县| 冷水江市| 东丰县| 电白县| 白河县| 北安市| 东安县| 乌拉特前旗| 长泰县| 依兰县| 江门市| 高台县| 白水县| 高陵县| 仁怀市| 巴南区| 大丰市| 西城区| 永川市| 惠水县| 锡林郭勒盟| 内丘县| 屏东市| 吴江市| 万安县| 靖远县| 清徐县| 信丰县| 凤庆县| 秦皇岛市| 阜平县| 文成县| 大新县| 富民县| 普格县| 内黄县| 琼结县| 翼城县| 和林格尔县| 定陶县| 疏附县|