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