隨著 MySQL 8.0.16 的發(fā)布,我們?yōu)?MGR 添加了一些功能,以增強(qiáng)其高可用性。其中一個(gè)功能是能夠在某些情況下啟用已離開組的成員自動(dòng)重新加入,而無(wú)需用戶干預(yù)。

創(chuàng)新互聯(lián)公司憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗(yàn),為客戶提供超值的營(yíng)銷型網(wǎng)站建設(shè)服務(wù),我們始終認(rèn)為:好的營(yíng)銷型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個(gè)人等客戶提供了網(wǎng)站建設(shè)、成都網(wǎng)站制作服務(wù),以良好的商業(yè)信譽(yù),完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。
為了理解這個(gè)功能的好處以及如何使用它,我們將快速查看它背后的概念以及它首先存在的動(dòng)機(jī)。
介紹
MGR 允許 MySQL 用戶輕松管理高可用組,并完成保證系統(tǒng)高可用所需的所有特征,例如容錯(cuò)或故障檢測(cè)。
MGR 中提供的基本保證之一是該組呈現(xiàn)給用戶的是一個(gè)不可分割的整體,這意味著一旦成員加入或離開該組,該更改將立即被其他成員得知。默認(rèn)情況下,組內(nèi)的數(shù)據(jù)本身最終是一致的,盡管可以被修改。為了實(shí)現(xiàn)這種保證,MGR 使用組成員服務(wù),以及通過一致性算法檢測(cè)有沖突的事務(wù)并中止它們。MGR 的這一方面超出了本文的范圍,與成員自動(dòng)重新加入功能并不完全相關(guān),本文不作贅述。
組內(nèi)新成員必須符合一些條件。其中新成員需要在事務(wù)方面趕上組進(jìn)度(是通過選擇組內(nèi)一個(gè)成員來將已處理的事務(wù)流式傳輸給他,在 MGR 中稱為“捐贈(zèng)”)。最后,只要在此“分布式恢復(fù)”過程中沒有遇到任何錯(cuò)誤,組內(nèi)新成員將被聲明為 ONLINE 狀態(tài)。
MGR 依靠組通信層 (GCS) 來管理組。該層實(shí)現(xiàn)了用于解決沖突事務(wù)的一致性算法,并強(qiáng)制執(zhí)行一些通信特性。對(duì)于實(shí)現(xiàn)前面提到的組的不可分割視圖,這些特性至關(guān)重要,如消息的總順序、安全傳遞或視圖同步等。
GCS 需要能夠檢測(cè)組中哪些成員失效或看起來失效。一旦這些成員被檢測(cè)為失效,就將其從該組中移除,以便保持該組正常使用。為此 GCS 在每個(gè)成員中引入了一個(gè)故障檢測(cè)器,用于分析組內(nèi)交換的消息。如果它在一段時(shí)間內(nèi)沒有收到來自指定成員的消息,則故障檢測(cè)器將對(duì)該成員產(chǎn)生“懷疑”,并認(rèn)為該成員可能已經(jīng)失效。成員從“懷疑”到真正失效的等待時(shí)間是可以配置的。
重新加入成員存在的問題
我們已經(jīng)了解 MGR 必須為了高可用提供的策略,以及它如何實(shí)現(xiàn),接下來請(qǐng)看示例:
一個(gè)小組由三個(gè)成員組成,其中一個(gè)成員偶爾會(huì)遇到丟失數(shù)據(jù)包、斷連或者其它導(dǎo)致無(wú)法解決的錯(cuò)誤情況的影響組內(nèi)通信。還要考慮這些錯(cuò)誤持續(xù)時(shí)間超過?group_replication_member_expel_timeout的值。
其中一個(gè)組員發(fā)生故障,小組的其他成員將決定踢出該成員。問題是,一旦該成員重新入組,他將被組驅(qū)逐加入失敗,需要通過手動(dòng)干預(yù)。
如果該成員的驅(qū)逐超時(shí)屬性設(shè)置不為 0,則它將在被驅(qū)逐前等待滿足該時(shí)間量(將超時(shí)設(shè)置為 0 意味著他將永遠(yuǎn)等待)。超時(shí)后成員將被驅(qū)逐并重新建立連接,并且無(wú)法重新加入舊組,需要再次手動(dòng)干預(yù)。
于此,當(dāng)存在網(wǎng)絡(luò)故障時(shí),顯然需要手動(dòng)干預(yù)。
在 MySQL 8.0.16 中,我們引入了自動(dòng)重新加入組的功能,一旦成員被驅(qū)逐出組,它就會(huì)自動(dòng)嘗試重新加入該組,直到達(dá)到預(yù)設(shè)的次數(shù)為止。有時(shí)每次重試之間至少等待5分鐘。
如何啟動(dòng)自動(dòng)重新加入?
可以通過將group_replication_autorejoin_tries設(shè)置為所需的重試次數(shù)來開啟并使用自動(dòng)重新加入功能。
SET GLOBAL group_replication_autorejoin_tries = 3
默認(rèn)值為 0,表示服務(wù)器禁用自動(dòng)重新加入。
如何驗(yàn)證自動(dòng)重新加入?
與 MySQL 中的許多功能一樣,自動(dòng)重新加入過程是可以監(jiān)測(cè)的。自動(dòng)重新加入的可檢測(cè)性依賴于性能模式基礎(chǔ)架構(gòu),階段式收集有關(guān)數(shù)據(jù)。
他們獲取以下信息:
事件發(fā)生的線程ID(THREAD_ID)
活動(dòng)名稱(EVENT_NAME)
起止時(shí)間戳以及事件的總持續(xù)時(shí)間(TIMER_START,TIMER_END 和 TIMER_WAIT)
在事件停止之前完成的工作單位和預(yù)估工作單位(WORK_COMPLETED,WORK_ESTIMATED)
因此,當(dāng)自動(dòng)重新加入過程開始時(shí),它將在performance schema中注冊(cè)一個(gè)名為“stage / grouprpl / Undergoing auto-rejoinprocedure”的事件。使用表performance_schema.events_stage_current,??performance_schema.events_stages_summary_global_by_event_name和performance_schema.events_stages_history_long我們可以觀察到以下內(nèi)容:
是否正在進(jìn)行自動(dòng)重新加入程序
到目前為止,已經(jīng)減少重試的次數(shù)
直到下一次重試的估計(jì)剩余時(shí)間
自動(dòng)重新加入過程狀態(tài)
可以通過過濾包含“auto-rejoin”字符串的活動(dòng)事件來查找自動(dòng)重新加入過程狀態(tài)(即,是否正在進(jìn)行):
SELECT COUNT(*) FROM performance_schema.events_stages_current
WHERE EVENT_NAME LIKE '%auto-rejoin%';
COUNT(*)
1
查詢結(jié)果存在,證明服務(wù)器上運(yùn)行了自動(dòng)重新加入過程。
到目前為止的重試次數(shù)
如果正在進(jìn)行自動(dòng)重新加入程序,我們可以通過選擇階段事件上的工作單元數(shù)來檢查到目前為止嘗試的重試次數(shù):
SELECT WORK_COMPLETED FROM performance_schema.events_stages_current WHERE
EVENT_NAME LIKE '%auto-rejoin%';
WORK_COMPLETED
1
在這個(gè)例子中,到目前為止只有一次嘗試。
預(yù)計(jì)到下次重試的剩余時(shí)間
在每次重新加入嘗試之間,服務(wù)器將處于 5 分鐘的可中斷睡眠中。 重新加入嘗試直到成功或失敗之間的時(shí)間是無(wú)法估計(jì)的。 因此,為了粗略估計(jì)剩余時(shí)間,我們可以將到目前為止嘗試的重試次數(shù)乘以 5 分鐘,并減去到目前為止的階段事件所花費(fèi)的時(shí)間,以估計(jì)我們還需要多長(zhǎng)時(shí)間:
SELECT (300.0 - ((TIMER_WAIT*10e-12) - 300.0 * num_retries)) AS time_remaining FROM
(SELECT COUNT(*) - 1 AS num_retries FROM
performance_schema.events_stages_current WHERE EVENT_NAME LIKE '%auto-rejoin%') AS T,
performance_schema.events_stages_current WHERE EVENT_NAME LIKE '%auto-rejoin%';
time_remaining
30.0
所以在這個(gè)例子中,在下一次重新加入之前還有 30 秒。注意性能模式表中的所有時(shí)間記帳都以微秒精度保持,因此我們將 TIMER_WAIT 縮放為秒。
使用自動(dòng)重新加入與驅(qū)逐超時(shí)的權(quán)衡
到目前為止,在這篇文章中我們只關(guān)注自動(dòng)重新加入。實(shí)際上,有兩種不同的方法可以實(shí)現(xiàn)離開組的成員的重新加入:
設(shè)置自動(dòng)重新加入嘗試次數(shù)來實(shí)現(xiàn)自動(dòng)重新加入
設(shè)置該成員的驅(qū)逐超時(shí)時(shí)間然后配合手動(dòng)干預(yù)
能有延緩刪除組內(nèi)可疑成員,并且如果配置為足夠長(zhǎng)的驅(qū)逐超時(shí)時(shí)間,則增加了重新建立連接的機(jī)會(huì),再次與組進(jìn)行交互。
雖然這兩個(gè)功能實(shí)現(xiàn)了相同的目標(biāo),但它們的工作方式是不同的,并且需要權(quán)衡。通過使用驅(qū)逐超時(shí),您可以維護(hù)組中可疑的成員,其缺點(diǎn)是您無(wú)法添加或刪除成員或選擇新的主機(jī)。如果通過使用自動(dòng)重新加入,該成員將不再是該組的正常組員,將保持在 superreadonly 模式,直到重新加入該組。但在此期間,重新加入成員的同步舊數(shù)據(jù)的可能性將增加。自動(dòng)重新加入過程可監(jiān)控,而驅(qū)逐超時(shí)不是真正可監(jiān)控的。
所以,總結(jié)一下:
驅(qū)逐超時(shí)的優(yōu)點(diǎn)
- 該成員一直在該組內(nèi)
- 可能更適合足夠小的網(wǎng)絡(luò)故障
驅(qū)逐超時(shí)的缺點(diǎn)
- 在懷疑某個(gè)成員時(shí),無(wú)法在該組上添加/刪除成員
- 在懷疑某個(gè)成員時(shí),無(wú)法選擇新的主機(jī)
- 您無(wú)法監(jiān)控此過程
自動(dòng)重新加入的優(yōu)點(diǎn)
- 該組將在沒有重新加入成員的情況下運(yùn)行,您可以添加/刪除成員并選擇新的主機(jī)
- 您可以監(jiān)控該過程
自動(dòng)重新加入的缺點(diǎn)
- 您增加了重新加入成員上過時(shí)讀取的可能性
- 可能不適合足夠小的網(wǎng)絡(luò)故障
總而言之,我從啟用自動(dòng)重新加入中獲得了什么?
通過啟用自動(dòng)重新加入,您可以減少對(duì)MySQL實(shí)例的手動(dòng)干預(yù)的需要。您的系統(tǒng)
更加適應(yīng)瞬間網(wǎng)絡(luò)故障,同時(shí)滿足對(duì)容錯(cuò)性和高可用的保證。
摘要
我們引入了一個(gè)名為group_replication_autorejoin_tries的新系統(tǒng)變量,允許用戶設(shè)置 MGR 成員在被驅(qū)逐或與組的大多數(shù)人失去聯(lián)系后嘗試重新加入組的次數(shù)。
默認(rèn)情況下,此自動(dòng)重新加入過程處于關(guān)閉狀態(tài)。它能幫助用戶在面對(duì)瞬間網(wǎng)絡(luò)故障時(shí)避免對(duì) MGR 成員進(jìn)行手動(dòng)干預(yù)。
停止mysql
# /etc/init.d/mysqld stop
安全模式進(jìn)入mysql
# /usr/sbin//mysqld_safe --skip-grant-tables
完成以后就可以不用密碼進(jìn)入MySQL了
# mysql -u root
按下列步驟建立 root 用戶:
insert into mysql.user (host, user, password) values ('localhost', 'root', password('密碼'));
flush privileges;
grant all on *.* to 'root'@'localhost';
1、查找以前是否裝有mysql
命令:rpm
-qa|grep
-i
mysql
可以看到如下圖的所示:
說明之前安裝了:
MySQL-client-5.5.25a-1.rhel5
MySQL-server-5.5.25a-1.rhel5
2、停止mysql服務(wù)、刪除之前安裝的mysql
刪除命令:rpm
-e
–nodeps
包名
#
rpm
-ev
MySQL-client-5.5.25a-1.rhel5
#
rpm
-ev
MySQL-server-5.5.25a-1.rhel5
3、查找之前老版本mysql的目錄、并且刪除老版本mysql的文件和庫(kù)
find
/
-name
mysql
查找結(jié)果如下:
[root@localhost
~]#
find
/
-name
mysql
/var/lib/mysql
/var/lib/mysql/mysql
/usr/lib64/mysql
刪除對(duì)應(yīng)的mysql目錄
rm
-rf
/var/lib/mysql
rm
-rf
/var/lib/mysql
rm
-rf
/usr/lib64/mysql
具體的步驟如圖:查找目錄并刪除
注意:卸載后/etc/my.cnf不會(huì)刪除,需要進(jìn)行手工刪除
rm
-rf
/etc/my.cnf
4、再次查找機(jī)器是否安裝mysql
rpm
-qa|grep
-i
mysql
無(wú)結(jié)果,說明已經(jīng)卸載徹底、接下來直接安裝mysql即可
如果你要恢復(fù)的數(shù)據(jù)庫(kù)是包含授權(quán)表的mysql數(shù)據(jù)庫(kù),您將需要使用--skip贈(zèng)款-tables選項(xiàng)來運(yùn)行服務(wù)器恢復(fù)整個(gè)數(shù)據(jù)庫(kù)
- 首先,。否則,服務(wù)器會(huì)抱怨不能找到授權(quán)表。恢復(fù)表后,執(zhí)行mysqladmin沖水privileges告訴服務(wù)器裝載授權(quán)表,并用它們來啟動(dòng)。數(shù)據(jù)庫(kù)目錄到其他地方的原始內(nèi)容
復(fù)制。例如,您可以使用它們?cè)谝院蟮氖潞蠓治鰴z查表(驗(yàn)尸)的崩潰。
酒店與最新的數(shù)據(jù)庫(kù)備份文件重新加載。如果您打算使用mysqldump的所加載的文件,則需要輸入它們作為mysql的。如果您打算使用從數(shù)據(jù)庫(kù)文件直接拷貝(例如,使用tar或CP),它會(huì)復(fù)制他們直接回?cái)?shù)據(jù)庫(kù)目錄中。然而,在這種情況下,你應(yīng)該在關(guān)閉之前,該服務(wù)器復(fù)制這些文件,然后重新啟動(dòng)它。在備份過程中
重做日志,然后查詢更新數(shù)據(jù)庫(kù)表中。對(duì)于所有可用的更新日志,你可以使用它作為mysql的輸入。指定--one-database選項(xiàng),因此MySQL只是要還原的數(shù)據(jù)庫(kù)執(zhí)行查詢。如果你意識(shí)到有必要使用所有的更新日志文件,可以使用包含以下命令日志的目錄:
%LS-TRL更新(0-9)* | xargs的貓| mysql--。一個(gè)數(shù)據(jù)庫(kù)DB_NAME
ls命令生成一個(gè)單獨(dú)的日志文件更新列表,更新日志文件根據(jù)服務(wù)器(你知道,如果你其中的任何文件,排序順序生成的順序進(jìn)行排序會(huì)發(fā)生變化,這將導(dǎo)致在更新日志中以錯(cuò)誤的順序使用)。有限公司您可能需要使用一些更新日志。例如,如果日志,因?yàn)槊鹵pdate.392備份,pdate.393等產(chǎn)生的,可以在命令重新運(yùn)行它們:
%的mysql - 一個(gè)數(shù)據(jù)庫(kù)DB_NAME 錄入。 392
%的mysql - 一個(gè)數(shù)據(jù)庫(kù)DB_NAME updata.393 ...
如果您正在運(yùn)行的恢復(fù),并打算使用更新日志恢復(fù)由于失誤降數(shù)據(jù)的基礎(chǔ)上,DROPTABLE或DELETE語(yǔ)句和丟失的信息時(shí),一定要在開始更新日志刪除這些語(yǔ)句。
恢復(fù)單個(gè)表
恢復(fù)單個(gè)表是非常困難的。如果是的mysqldump備份文件生成的,它只是不包含數(shù)據(jù),您需要一個(gè)表,你需要提取的相關(guān)線路,并利用它們作為mysql的輸入,這部分比較容易。困難的是,提取在該表的更新日志中使用的片段。你會(huì)發(fā)現(xiàn):mysql_find_rows工具在這方面有所幫助,它可以提取多行從更新日志查詢。另一種可能性是使用另一臺(tái)服務(wù)器
恢復(fù)整個(gè)數(shù)據(jù)庫(kù),然后將該文件復(fù)制到表的原始數(shù)據(jù)庫(kù)。這其實(shí)很容易!當(dāng)文件被復(fù)制回?cái)?shù)據(jù)庫(kù)目錄,確保原始數(shù)據(jù)庫(kù)服務(wù)器關(guān)閉。
使用mysql中的日志功能。
首先:將最近的二進(jìn)制類型的日志文件存成文本文件導(dǎo)出,命令如下:
mysqlbinlog F:/wamp/mysql-bin.000045 F:/test.txt
其次:打開保存的txt文件,文件格式如下:
其中at 1099代表第1099個(gè)命令(姑且這么記),查詢這些命令,看看需要回復(fù)的命令在什么地方,然后執(zhí)行命令。
最后:執(zhí)行回復(fù)命令,如下:
mysqlbinlog --start-position="123" --stop-position="531" F:/wamp/mysql-bin.000045 F:/test.txt | mysql -uroot -p
這樣就可以完成數(shù)據(jù)庫(kù)的回復(fù)了!!!
網(wǎng)站題目:mysql刪除后怎么設(shè)置,怎么樣徹底刪除mysql
本文網(wǎng)址:http://chinadenli.net/article8/dsgodop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、品牌網(wǎng)站建設(shè)、服務(wù)器托管、網(wǎng)站改版、動(dòng)態(tài)網(wǎng)站、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)