最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL半同步復(fù)制原理配置與介紹詳解

 更新時(shí)間:2019年01月11日 14:49:05   作者:徐劉根  
這篇文章主要介紹了MySQL半同步復(fù)制原理配置與介紹詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

環(huán)境介紹:

Ubuntu Server 16.04.2+MySQL 5.7.17 Community Server (GPL)

MySQL安裝

通過(guò)APT的方式安裝,官方指導(dǎo)文檔地址:
https://dev.mysql.com/downloads/repo/apt/

1、下載mysql-apt-config_0.8.3-1_all.deb

2、安裝deb

A Quick Guide to Using the MySQL APT Repository:
https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/

>sudo dpkg -i mysql-apt-config_0.8.3-1_all.deb

3、更新源

>sudo apt-get update

4、安裝MySQL

>sudo apt-get install mysql-server

5、根據(jù)提示選擇安裝和設(shè)置密碼。

另外,還需要對(duì)其進(jìn)行設(shè)置,綁定的IP和打開(kāi)防火墻的3306端口,這里主要是學(xué)習(xí)MySQL半同步復(fù)制,對(duì)MySQL的安裝不做多解釋,如果疑問(wèn)歡迎留言。

MySQL半同步復(fù)制介紹

(1)默認(rèn)情況下,MySQL的復(fù)制功能是異步的,異步復(fù)制可以提供最佳的性能, 主庫(kù)把binlog日志發(fā)送給從庫(kù),這一動(dòng)作就結(jié)束了,并不會(huì)驗(yàn)證從庫(kù)是否接收完畢,這一過(guò)程,也就意味著有可能出現(xiàn)當(dāng)主服務(wù)器或從服務(wù)器端發(fā)生故障的時(shí)候,有可能從服務(wù)器沒(méi)有接收到主服務(wù)器發(fā)送過(guò)來(lái)的binlog日志,這就會(huì)造成主服務(wù)器和從服務(wù)器的數(shù)據(jù)不一致,甚至在恢復(fù)時(shí)造成數(shù)據(jù)的丟失。

注意:

半同步復(fù)制模式必須在主服務(wù)器和從服務(wù)器端同時(shí)開(kāi)啟,否則主服務(wù)器默認(rèn)使用異步復(fù)制模式。

(2)異步復(fù)制案例:

MySQL5.6 數(shù)據(jù)庫(kù)主從(Master/Slave)同步安裝與配置詳解

(3)為了解決上述可能發(fā)生的錯(cuò)誤,MySQL 5.5 引入了一種半同步復(fù)制模式。該模式可以確保從服務(wù)器接收完主服務(wù)器發(fā)送的binlog日志文件并寫入到自己的中繼日志relay log里,然后會(huì)給主服務(wù)器一個(gè)反饋,告訴主服務(wù)器已經(jīng)接收完畢,這時(shí)主服務(wù)線程才返回給當(dāng)前session告知操作完成。

(4)當(dāng)出現(xiàn)超時(shí)情況是,主服務(wù)器會(huì)暫時(shí)切換到異步復(fù)制模式,直到至少有一個(gè)從服務(wù)器從及時(shí)收到信息為止。

(5)中繼日志的自我修復(fù):

從MySQL 5.5.X 版本開(kāi)始,增加了relay_log_recovery參數(shù),這個(gè)參數(shù)的作用是:當(dāng)slave從庫(kù)宕機(jī)后,假如relay.log損壞了,導(dǎo)致一部分中繼日志沒(méi)有處理,則自動(dòng)放棄所有未執(zhí)行的relay-log,并且重新從master上獲取日志,這樣就保證了relay-log的完整性。默認(rèn)情況下該功能是關(guān)閉的,將relay_log_recovery的值設(shè)置為1時(shí),可在slave從庫(kù)上開(kāi)啟該功能,建議開(kāi)啟。

(6)半同步復(fù)制與異步復(fù)制的切換:

半同步復(fù)制的工作原理就是當(dāng)slave從庫(kù)IO_Thread線程將binlog日志接收完畢之后,要給master主庫(kù)一個(gè)確認(rèn),如果rpl_semi_sync_master_timeout=10000 (10秒)超過(guò)10秒未收到slave從庫(kù)的接受確認(rèn)信號(hào),那么就會(huì)自動(dòng)切換為傳統(tǒng)的異步復(fù)制模式。

MySQL半同步復(fù)制配置

首先,需要安裝兩個(gè)MySQL,這里是:

  • Master:192.168.1.227
  • Slave:192.168.1.224

原始數(shù)據(jù)庫(kù)的模樣如下:

一、Master配置

(1)在Master數(shù)據(jù)庫(kù)安裝半同步復(fù)制插件:

mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

(2)設(shè)置Master上開(kāi)啟半同步復(fù)制:

mysql>SET GLOBAL rpl_semi_sync_master_enabled = 1;

(3)修改mysqld.cnf 配置文件:

上圖指出了MySQL配置的文件路徑。

[mysqld]

log-bin=mysql-bin
server_id = 10086
server_id_bits = 33
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000

(4)修改MySQL server-uuid配置文件:

root@xuliugen:/var/lib/mysql# pwd
/var/lib/mysql

修改 auto.cnf文件,server-uuid的值格式固定,為了和Slave的區(qū)別開(kāi)

[auto]
server-uuid=8d90feb7-1a88-11e7-9d11-000c298a546f

(5)查看配置是否成功:

mysql>SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';

(6)參數(shù)說(shuō)明:

1、rpl_semi_sync_master_enabled = 1,表示在master上已經(jīng)開(kāi)啟了半同步復(fù)制模式;

2、rpl_semi_sync_master_timeout = 10000,表示如果主庫(kù)在某次事務(wù)中的等待時(shí)間超過(guò)10000毫秒,則降級(jí)為異步復(fù)制模式,不在等待slave從庫(kù)。如果主庫(kù)再次探測(cè)到slave從恢復(fù)了,則會(huì)自動(dòng)切換回半同步復(fù)制模式;

3、rpl_semi_sync_master_wait_no_slave ,表示是否允許master每個(gè)事務(wù)提交后都要等待slave的接收確認(rèn)信號(hào)。默認(rèn)為ON,即每一個(gè)事務(wù)都會(huì)等待。如果為OFF,則slave追趕上之后,也不會(huì)開(kāi)啟半同步復(fù)制模式,需要手工開(kāi)啟;

4、rpl_semi_sync_master_trace_level = 32,指用于開(kāi)啟半同步復(fù)制模式時(shí)的調(diào)試級(jí)別,默認(rèn)為32。

可以看出,在配置Master的時(shí)候,只設(shè)置了1,其他的都采取的默認(rèn)設(shè)置。

二、Slave配置

(1)在Slave數(shù)據(jù)庫(kù)安裝半同步復(fù)制插件:

mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

(2)設(shè)置Slave上開(kāi)啟半同步復(fù)制:

mysql>SET GLOBAL rpl_semi_sync_slave_enabled = 1;

(3)修改mysqld.cnf 配置文件:

[mysqld]

log-bin=mysql-bin
server_id=10089
server_id_bits = 32
rpl_semi_sync_slave_enabled = 1

(4)修改MySQL server-uuid配置文件:

root@xuliugen:/var/lib/mysql# pwd
/var/lib/mysql

修改 auto.cnf文件,server-uuid的值格式固定,為了和Slave的區(qū)別開(kāi)

[auto]
server-uuid=8d90feb7-1a88-11e7-9d11-000c298a123f

確保和Master的server-uuid不一樣!

(5)查看配置是否成功:

mysql>SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';

(6)參數(shù)說(shuō)明:

1、rpl_semi_sync_slave_enabled = 1,表示在slave上已經(jīng)開(kāi)啟了半同步復(fù)制模式;

2、rpl_semi_sync_slave_trace_level = 32,指用于開(kāi)啟半同步復(fù)制模式時(shí)的調(diào)試級(jí)別,默認(rèn)為32。

三、為Slave指定Master

(1)命令行模式下重啟Master

root@xuliugen:~# service mysql restart

(2)命令行模式下重啟Slave

root@xuliugen:~# service mysql restart

(3)查看Master狀態(tài):

mysql> show master status\G;
*************************** 1. row ***************************
       File: mysql-bin.000004
     Position: 154
   Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.02 sec)

mysql>

注意:

File: mysql-bin.000004
Position: 154

很重要,后邊需要使用!

(4)為Slave指定Master:

1、首先關(guān)閉Slave的半同步復(fù)制

mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)

2、為Slave指定Master

mysql>change master to master_host='192.168.1.227',master_user='root',master_password='123456',master_log_file='mysql-bin.000004', master_log_pos=154;

Query OK, 0 rows affected, 2 warnings (0.02 sec)

其中:

master_host='192.168.1.227',Master主庫(kù)IP地址
master_user='root',Master主庫(kù)數(shù)據(jù)庫(kù)賬戶
master_password='123456',Master主庫(kù)數(shù)據(jù)庫(kù)root用戶密碼
master_log_file='mysql-bin.000004', Master主庫(kù)binlog文件
master_log_pos=154,Master主庫(kù)binlog文件position

注意:

在MySQL 5.6版本以后,在進(jìn)行主從復(fù)制的時(shí)候可以使用GTID的方式,無(wú)需再找binglog和pos點(diǎn),只需要知道主服務(wù)器的IP、端口、賬戶、密碼就可以實(shí)現(xiàn)自動(dòng)找點(diǎn)同步,開(kāi)啟GTID功能的時(shí)候就不用再使用binlog和pos了。詳細(xì)信息,請(qǐng)查閱相關(guān)資料進(jìn)行學(xué)習(xí)。

3、開(kāi)啟Slave的半同步復(fù)制

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

四、測(cè)試半同步復(fù)制是否成功

五、如何優(yōu)雅的關(guān)閉Slave同步信息

在某些時(shí)候,一臺(tái)服務(wù)器不再用來(lái)作為Slave,那么我們就需要清楚他的同步信息,一般會(huì)使用:

mysql> stop slave #先關(guān)閉
mysql> reset slave #清楚Slave同步信息

但是,這樣再通過(guò)show master status\G顯示的時(shí)候:

mysql> show master status\G;

還是會(huì)出現(xiàn)同步的信息,這是因?yàn)閳?zhí)行了 reset slave 只是把 master.inforelay-log.info 文件刪除了,但同步信息還在,如果有人在執(zhí)行start slave命令開(kāi)啟了同步功能,結(jié)果就會(huì)又從頭開(kāi)始同步了,有可能還會(huì)造成數(shù)據(jù)的丟失。

如何讓其清除的更干凈哪?請(qǐng)使用下邊的命令:

mysql> stop slave #先關(guān)閉
mysql> reset slave all#清楚Slave同步信息

再次執(zhí)行show master status\G就不會(huì)再有任何信息了。

六、部分異常場(chǎng)景模擬

(1)半同步復(fù)制與異步復(fù)制的切換:

上述已經(jīng)介紹了為什么會(huì)出現(xiàn)半同步復(fù)制到異步復(fù)制的切換,那么現(xiàn)在模擬一個(gè)場(chǎng)景進(jìn)行演示。

場(chǎng)景如下:

1、關(guān)閉slave同步,停止IO接收binlog日志

mysql> stop slave;

該操作就將IO線程關(guān)閉,等待10秒之后,如果master未收到來(lái)自slave的確認(rèn)信息,就會(huì)切換到異步復(fù)制模式:

上圖看到slave已經(jīng)關(guān)閉了半同步復(fù)制模式,再次開(kāi)啟:

mysql> start slave;

此時(shí),已經(jīng)還原到半同步復(fù)制模式了。

(2)同步報(bào)錯(cuò)案例演示:

我們,首先從slave庫(kù)上刪除數(shù)據(jù)庫(kù)表 ufind,然后到master再次刪除該庫(kù)ufind,該同步就會(huì)報(bào)錯(cuò):

Last_Error: Error 'Can't drop database 'ufind'; database doesn't exist' on query. Default database: 'ufind'. Query: 'DROP DATABASE `ufind`'

此時(shí),查看半同步狀態(tài):

是開(kāi)啟的,因此沒(méi)有將半同步復(fù)制模式轉(zhuǎn)化為異步復(fù)制模式,可以看出半同步復(fù)制模式跟IO_Thread是有直接關(guān)系的,但跟SQL_THREAD沒(méi)有關(guān)系。

也就是說(shuō),slave從庫(kù)接收完二進(jìn)制日志后給master主庫(kù)一個(gè)確認(rèn),但是他不會(huì)管relay-log中繼日志是否執(zhí)行完畢。

六、半同步復(fù)制模式性能分析及優(yōu)缺點(diǎn)

在通常情況下,由于異步復(fù)制模式不需要等待從服務(wù)器的響應(yīng),其速度較半同步復(fù)制模式要快,吞吐率要高,在數(shù)據(jù)進(jìn)行更新、插入、刪除的時(shí)候其速度要高于半同步復(fù)制模式。但是,半同步復(fù)制模式有利于數(shù)據(jù)的一致性,對(duì)于一些數(shù)據(jù)一致性要求較高的,網(wǎng)絡(luò)波動(dòng)較小的可以采用半同步復(fù)制模式。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL 加鎖控制并發(fā)的方法

    MySQL 加鎖控制并發(fā)的方法

    這篇文章主要介紹了MySQL 加鎖控制并發(fā)的方法,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2021-01-01
  • MySQL提示Accessdeniedforuser‘‘@‘localhost‘”的解決方案

    MySQL提示Accessdeniedforuser‘‘@‘localhost‘”的解決方案

    在使用MySQL數(shù)據(jù)庫(kù)的過(guò)程中,有時(shí)會(huì)遇到錯(cuò)誤提示:“Access denied for user ''@'localhost'”,這個(gè)錯(cuò)誤通常意味著MySQL服務(wù)器拒絕了當(dāng)前用戶的連接請(qǐng)求,本文將詳細(xì)探討該問(wèn)題的原因及解決方法,需要的朋友可以參考下
    2025-01-01
  • mysql中drop、truncate與delete的區(qū)別詳析

    mysql中drop、truncate與delete的區(qū)別詳析

    對(duì)于drop、truncate和delete雖然簡(jiǎn)單,但是真要使用或者面試時(shí)候問(wèn)到還是需要有一定的總結(jié),下面這篇文章主要給大家介紹了關(guān)于mysql中drop、truncate與delete區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • windows server2014 安裝 Mysql Applying Security出錯(cuò)的完美解決方法

    windows server2014 安裝 Mysql Applying Security出錯(cuò)的完美解決方法

    這篇文章給大家介紹了windows server2014 安裝 Mysql Applying Security出錯(cuò)的完美解決方法,造成這種問(wèn)題的主要原因是因?yàn)榘惭b一遍之后沒(méi)有卸載干凈,要解決這個(gè)問(wèn)題需要注意以下幾點(diǎn),具體解決方法,大家參考下本文
    2017-07-07
  • sql查詢語(yǔ)句教程之插入、更新和刪除數(shù)據(jù)實(shí)例

    sql查詢語(yǔ)句教程之插入、更新和刪除數(shù)據(jù)實(shí)例

    如果要在程序運(yùn)行過(guò)程中操作數(shù)據(jù)庫(kù)中的數(shù)據(jù),那得先學(xué)會(huì)使用SQL語(yǔ)句,下面這篇文章主要給大家介紹了關(guān)于sql查詢語(yǔ)句教程之插入、更新和刪除數(shù)據(jù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • MySql 8.0.11安裝配置教程

    MySql 8.0.11安裝配置教程

    這篇文章給大家介紹了MySql 8.0.11安裝配置教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2018-05-05
  • MySQL查詢字段為NULL、不為NULL的數(shù)據(jù)問(wèn)題

    MySQL查詢字段為NULL、不為NULL的數(shù)據(jù)問(wèn)題

    介紹了MySQL查詢字段為NULL和不為NULL的數(shù)據(jù)時(shí)需要注意的幾點(diǎn),包括查詢語(yǔ)句的編寫和NULL與其他字符的操作,通過(guò)實(shí)際操作對(duì)比,指出使用IS NOT NULL可以正確查詢到非NULL字段的數(shù)據(jù)
    2025-02-02
  • MySQL 丟失數(shù)據(jù)的原因及解決

    MySQL 丟失數(shù)據(jù)的原因及解決

    這篇文章主要介紹了MySQL 丟失數(shù)據(jù)的原因及解決,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2021-05-05
  • MySQL同步Elasticsearch的6種方案小結(jié)

    MySQL同步Elasticsearch的6種方案小結(jié)

    在分布式架構(gòu)中,MySQL與Elasticsearch(ES)的協(xié)同已成為解決高并發(fā)查詢與復(fù)雜檢索的標(biāo)配組合,本文整理了MySQL同步ES的6種主流方案,大家可以根據(jù)自己的需要進(jìn)行選擇
    2025-05-05
  • Mysql添加聯(lián)合唯一索引及相同數(shù)據(jù)插入報(bào)錯(cuò)問(wèn)題

    Mysql添加聯(lián)合唯一索引及相同數(shù)據(jù)插入報(bào)錯(cuò)問(wèn)題

    這篇文章主要介紹了Mysql添加聯(lián)合唯一索引及相同數(shù)據(jù)插入報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評(píng)論

新闻| 浦县| 会理县| 铜山县| 山东| 巴中市| 夏津县| 房产| 揭东县| 石门县| 新野县| 同德县| 黔南| 三门峡市| 鸡东县| 正宁县| 乌兰察布市| 合江县| 临漳县| 鄯善县| 牟定县| 尖扎县| 忻城县| 龙江县| 东海县| 广平县| 仁寿县| 于田县| 礼泉县| 烟台市| 大安市| 临朐县| 喀喇| 卢氏县| 墨玉县| 温州市| 尉犁县| 苍南县| 郸城县| 榆林市| 肃宁县|